amber-cli.js 2.8 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443614446144561446614476144861449614506145161452614536145461455614566145761458614596146061461614626146361464614656146661467614686146961470614716147261473614746147561476614776147861479614806148161482614836148461485614866148761488614896149061491614926149361494614956149661497614986149961500615016150261503615046150561506615076150861509615106151161512615136151461515615166151761518615196152061521615226152361524615256152661527615286152961530615316153261533615346153561536615376153861539615406154161542615436154461545615466154761548615496155061551615526155361554615556155661557615586155961560615616156261563615646156561566615676156861569615706157161572615736157461575615766157761578615796158061581615826158361584615856158661587615886158961590615916159261593615946159561596615976159861599616006160161602616036160461605616066160761608616096161061611616126161361614616156161661617616186161961620616216162261623616246162561626616276162861629616306163161632616336163461635616366163761638616396164061641616426164361644616456164661647616486164961650616516165261653616546165561656616576165861659616606166161662616636166461665616666166761668616696167061671616726167361674616756167661677616786167961680616816168261683616846168561686616876168861689616906169161692616936169461695616966169761698616996170061701617026170361704617056170661707617086170961710617116171261713617146171561716617176171861719617206172161722617236172461725617266172761728617296173061731617326173361734617356173661737617386173961740617416174261743617446174561746617476174861749617506175161752617536175461755617566175761758617596176061761617626176361764617656176661767617686176961770617716177261773617746177561776617776177861779617806178161782617836178461785617866178761788617896179061791617926179361794617956179661797617986179961800618016180261803618046180561806618076180861809618106181161812618136181461815618166181761818618196182061821618226182361824618256182661827618286182961830618316183261833618346183561836618376183861839618406184161842618436184461845618466184761848618496185061851618526185361854618556185661857618586185961860618616186261863618646186561866618676186861869618706187161872618736187461875618766187761878618796188061881618826188361884618856188661887618886188961890618916189261893618946189561896618976189861899619006190161902619036190461905619066190761908619096191061911619126191361914619156191661917619186191961920619216192261923619246192561926619276192861929619306193161932619336193461935619366193761938619396194061941619426194361944619456194661947619486194961950619516195261953619546195561956619576195861959619606196161962619636196461965619666196761968619696197061971619726197361974619756197661977619786197961980619816198261983619846198561986619876198861989619906199161992619936199461995619966199761998619996200062001620026200362004620056200662007620086200962010620116201262013620146201562016620176201862019620206202162022620236202462025620266202762028620296203062031620326203362034620356203662037620386203962040620416204262043620446204562046620476204862049620506205162052620536205462055620566205762058620596206062061620626206362064620656206662067620686206962070620716207262073620746207562076620776207862079620806208162082620836208462085620866208762088620896209062091620926209362094620956209662097620986209962100621016210262103621046210562106621076210862109621106211162112621136211462115621166211762118621196212062121621226212362124621256212662127621286212962130621316213262133621346213562136621376213862139621406214162142621436214462145621466214762148621496215062151621526215362154621556215662157621586215962160621616216262163621646216562166621676216862169621706217162172621736217462175621766217762178621796218062181621826218362184621856218662187621886218962190621916219262193621946219562196621976219862199622006220162202622036220462205622066220762208622096221062211622126221362214622156221662217622186221962220622216222262223622246222562226622276222862229622306223162232622336223462235622366223762238622396224062241622426224362244622456224662247622486224962250622516225262253622546225562256622576225862259622606226162262622636226462265622666226762268622696227062271622726227362274622756227662277622786227962280622816228262283622846228562286622876228862289622906229162292622936229462295622966229762298622996230062301623026230362304623056230662307623086230962310623116231262313623146231562316623176231862319623206232162322623236232462325623266232762328623296233062331623326233362334623356233662337623386233962340623416234262343623446234562346623476234862349623506235162352623536235462355623566235762358623596236062361623626236362364623656236662367623686236962370623716237262373623746237562376623776237862379623806238162382623836238462385623866238762388623896239062391623926239362394623956239662397623986239962400624016240262403624046240562406624076240862409624106241162412624136241462415624166241762418624196242062421624226242362424624256242662427624286242962430624316243262433624346243562436624376243862439624406244162442624436244462445624466244762448624496245062451624526245362454624556245662457624586245962460624616246262463624646246562466624676246862469624706247162472624736247462475624766247762478624796248062481624826248362484624856248662487624886248962490624916249262493624946249562496624976249862499625006250162502625036250462505625066250762508625096251062511625126251362514625156251662517625186251962520625216252262523625246252562526625276252862529625306253162532625336253462535625366253762538625396254062541625426254362544625456254662547625486254962550625516255262553625546255562556625576255862559625606256162562625636256462565625666256762568625696257062571625726257362574625756257662577625786257962580625816258262583625846258562586625876258862589625906259162592625936259462595625966259762598625996260062601626026260362604626056260662607626086260962610626116261262613626146261562616626176261862619626206262162622626236262462625626266262762628626296263062631626326263362634626356263662637626386263962640626416264262643626446264562646626476264862649626506265162652626536265462655626566265762658626596266062661626626266362664626656266662667626686266962670626716267262673626746267562676626776267862679626806268162682626836268462685626866268762688626896269062691626926269362694626956269662697626986269962700627016270262703627046270562706627076270862709627106271162712627136271462715627166271762718627196272062721627226272362724627256272662727627286272962730627316273262733627346273562736627376273862739627406274162742627436274462745627466274762748627496275062751627526275362754627556275662757627586275962760627616276262763627646276562766627676276862769627706277162772627736277462775627766277762778627796278062781627826278362784627856278662787627886278962790627916279262793627946279562796627976279862799628006280162802628036280462805628066280762808628096281062811628126281362814628156281662817628186281962820628216282262823628246282562826628276282862829628306283162832628336283462835628366283762838628396284062841628426284362844628456284662847628486284962850628516285262853628546285562856628576285862859628606286162862628636286462865628666286762868628696287062871628726287362874628756287662877628786287962880628816288262883628846288562886628876288862889628906289162892628936289462895628966289762898628996290062901629026290362904629056290662907629086290962910629116291262913629146291562916629176291862919629206292162922629236292462925629266292762928629296293062931629326293362934629356293662937629386293962940629416294262943629446294562946629476294862949629506295162952629536295462955629566295762958629596296062961629626296362964629656296662967629686296962970629716297262973629746297562976629776297862979629806298162982629836298462985629866298762988629896299062991629926299362994629956299662997629986299963000630016300263003630046300563006630076300863009630106301163012630136301463015630166301763018630196302063021630226302363024630256302663027630286302963030630316303263033630346303563036630376303863039630406304163042630436304463045630466304763048630496305063051630526305363054630556305663057630586305963060630616306263063630646306563066630676306863069630706307163072630736307463075630766307763078630796308063081630826308363084630856308663087630886308963090630916309263093630946309563096630976309863099631006310163102631036310463105631066310763108631096311063111631126311363114631156311663117631186311963120631216312263123631246312563126631276312863129631306313163132631336313463135631366313763138631396314063141631426314363144631456314663147631486314963150631516315263153631546315563156631576315863159631606316163162631636316463165631666316763168631696317063171631726317363174631756317663177631786317963180631816318263183631846318563186631876318863189631906319163192631936319463195631966319763198631996320063201632026320363204632056320663207632086320963210632116321263213632146321563216632176321863219632206322163222632236322463225632266322763228632296323063231632326323363234632356323663237632386323963240632416324263243632446324563246632476324863249632506325163252632536325463255632566325763258632596326063261632626326363264632656326663267632686326963270632716327263273632746327563276632776327863279632806328163282632836328463285632866328763288632896329063291632926329363294632956329663297632986329963300633016330263303633046330563306633076330863309633106331163312633136331463315633166331763318633196332063321633226332363324633256332663327633286332963330633316333263333633346333563336633376333863339633406334163342633436334463345633466334763348633496335063351633526335363354633556335663357633586335963360633616336263363633646336563366633676336863369633706337163372633736337463375633766337763378633796338063381633826338363384633856338663387633886338963390633916339263393633946339563396633976339863399634006340163402634036340463405634066340763408634096341063411634126341363414634156341663417634186341963420634216342263423634246342563426634276342863429634306343163432634336343463435634366343763438634396344063441634426344363444634456344663447634486344963450634516345263453634546345563456634576345863459634606346163462634636346463465634666346763468634696347063471634726347363474634756347663477634786347963480634816348263483634846348563486634876348863489634906349163492634936349463495634966349763498634996350063501635026350363504635056350663507635086350963510635116351263513635146351563516635176351863519635206352163522635236352463525635266352763528635296353063531635326353363534635356353663537635386353963540635416354263543635446354563546635476354863549635506355163552635536355463555635566355763558635596356063561635626356363564635656356663567635686356963570635716357263573635746357563576635776357863579635806358163582635836358463585635866358763588635896359063591635926359363594635956359663597635986359963600636016360263603636046360563606636076360863609636106361163612636136361463615636166361763618636196362063621636226362363624636256362663627636286362963630636316363263633636346363563636636376363863639636406364163642636436364463645636466364763648636496365063651636526365363654636556365663657636586365963660636616366263663636646366563666636676366863669636706367163672636736367463675636766367763678636796368063681636826368363684636856368663687636886368963690636916369263693636946369563696636976369863699637006370163702637036370463705637066370763708637096371063711637126371363714637156371663717637186371963720637216372263723637246372563726637276372863729637306373163732637336373463735637366373763738637396374063741637426374363744637456374663747637486374963750637516375263753637546375563756637576375863759637606376163762637636376463765637666376763768637696377063771637726377363774637756377663777637786377963780637816378263783637846378563786637876378863789637906379163792637936379463795637966379763798637996380063801638026380363804638056380663807638086380963810638116381263813638146381563816638176381863819638206382163822638236382463825638266382763828638296383063831638326383363834638356383663837638386383963840638416384263843638446384563846638476384863849638506385163852638536385463855638566385763858638596386063861638626386363864638656386663867638686386963870638716387263873638746387563876638776387863879638806388163882638836388463885638866388763888638896389063891638926389363894638956389663897638986389963900639016390263903639046390563906639076390863909639106391163912639136391463915639166391763918639196392063921639226392363924639256392663927639286392963930639316393263933639346393563936639376393863939639406394163942639436394463945639466394763948639496395063951639526395363954639556395663957639586395963960639616396263963639646396563966639676396863969639706397163972639736397463975639766397763978639796398063981639826398363984639856398663987639886398963990639916399263993639946399563996639976399863999640006400164002640036400464005640066400764008640096401064011640126401364014640156401664017640186401964020640216402264023640246402564026640276402864029640306403164032640336403464035640366403764038640396404064041640426404364044640456404664047640486404964050640516405264053640546405564056640576405864059640606406164062640636406464065640666406764068640696407064071640726407364074640756407664077640786407964080640816408264083640846408564086640876408864089640906409164092640936409464095640966409764098640996410064101641026410364104641056410664107641086410964110641116411264113641146411564116641176411864119641206412164122641236412464125641266412764128641296413064131641326413364134641356413664137641386413964140641416414264143641446414564146641476414864149641506415164152641536415464155641566415764158641596416064161641626416364164641656416664167641686416964170641716417264173641746417564176641776417864179641806418164182641836418464185641866418764188641896419064191641926419364194641956419664197641986419964200642016420264203642046420564206642076420864209642106421164212642136421464215642166421764218642196422064221642226422364224642256422664227642286422964230642316423264233642346423564236642376423864239642406424164242642436424464245642466424764248642496425064251642526425364254642556425664257642586425964260642616426264263642646426564266642676426864269642706427164272642736427464275642766427764278642796428064281642826428364284642856428664287642886428964290642916429264293642946429564296642976429864299643006430164302643036430464305643066430764308643096431064311643126431364314643156431664317643186431964320643216432264323643246432564326643276432864329643306433164332643336433464335643366433764338643396434064341643426434364344643456434664347643486434964350643516435264353643546435564356643576435864359643606436164362643636436464365643666436764368643696437064371643726437364374643756437664377643786437964380643816438264383643846438564386643876438864389643906439164392643936439464395643966439764398643996440064401644026440364404644056440664407644086440964410644116441264413644146441564416644176441864419644206442164422644236442464425644266442764428644296443064431644326443364434644356443664437644386443964440644416444264443644446444564446644476444864449644506445164452644536445464455644566445764458644596446064461644626446364464644656446664467644686446964470644716447264473644746447564476644776447864479644806448164482644836448464485644866448764488644896449064491644926449364494644956449664497644986449964500645016450264503645046450564506645076450864509645106451164512645136451464515645166451764518645196452064521645226452364524645256452664527645286452964530645316453264533645346453564536645376453864539645406454164542645436454464545645466454764548645496455064551645526455364554645556455664557645586455964560645616456264563645646456564566645676456864569645706457164572645736457464575645766457764578645796458064581645826458364584645856458664587645886458964590645916459264593645946459564596645976459864599646006460164602646036460464605646066460764608646096461064611646126461364614646156461664617646186461964620646216462264623646246462564626646276462864629646306463164632646336463464635646366463764638646396464064641646426464364644646456464664647646486464964650646516465264653646546465564656646576465864659646606466164662646636466464665646666466764668646696467064671646726467364674646756467664677646786467964680646816468264683646846468564686646876468864689646906469164692646936469464695646966469764698646996470064701647026470364704647056470664707647086470964710647116471264713647146471564716647176471864719647206472164722647236472464725647266472764728647296473064731647326473364734647356473664737647386473964740647416474264743647446474564746647476474864749647506475164752647536475464755647566475764758647596476064761647626476364764647656476664767647686476964770647716477264773647746477564776647776477864779647806478164782647836478464785647866478764788647896479064791647926479364794647956479664797647986479964800648016480264803648046480564806648076480864809648106481164812648136481464815648166481764818648196482064821648226482364824648256482664827648286482964830648316483264833648346483564836648376483864839648406484164842648436484464845648466484764848648496485064851648526485364854648556485664857648586485964860648616486264863648646486564866648676486864869648706487164872648736487464875648766487764878648796488064881648826488364884648856488664887648886488964890648916489264893648946489564896648976489864899649006490164902649036490464905649066490764908649096491064911649126491364914649156491664917649186491964920649216492264923649246492564926649276492864929649306493164932649336493464935649366493764938649396494064941649426494364944649456494664947649486494964950649516495264953649546495564956649576495864959649606496164962649636496464965649666496764968649696497064971649726497364974649756497664977649786497964980649816498264983649846498564986649876498864989649906499164992649936499464995649966499764998649996500065001650026500365004650056500665007650086500965010650116501265013650146501565016650176501865019650206502165022650236502465025650266502765028650296503065031650326503365034650356503665037650386503965040650416504265043650446504565046650476504865049650506505165052650536505465055650566505765058650596506065061650626506365064650656506665067650686506965070650716507265073650746507565076650776507865079650806508165082650836508465085650866508765088650896509065091650926509365094650956509665097650986509965100651016510265103651046510565106651076510865109651106511165112651136511465115651166511765118651196512065121651226512365124651256512665127651286512965130651316513265133651346513565136651376513865139651406514165142651436514465145651466514765148651496515065151651526515365154651556515665157651586515965160651616516265163651646516565166651676516865169651706517165172651736517465175651766517765178651796518065181651826518365184651856518665187651886518965190651916519265193651946519565196651976519865199652006520165202652036520465205652066520765208652096521065211652126521365214652156521665217652186521965220652216522265223652246522565226652276522865229652306523165232652336523465235652366523765238652396524065241652426524365244652456524665247652486524965250652516525265253652546525565256652576525865259652606526165262652636526465265652666526765268652696527065271652726527365274652756527665277652786527965280652816528265283652846528565286652876528865289652906529165292652936529465295652966529765298652996530065301653026530365304653056530665307653086530965310653116531265313653146531565316653176531865319653206532165322653236532465325653266532765328653296533065331653326533365334653356533665337653386533965340653416534265343653446534565346653476534865349653506535165352653536535465355653566535765358653596536065361653626536365364653656536665367653686536965370653716537265373653746537565376653776537865379653806538165382653836538465385653866538765388653896539065391653926539365394653956539665397653986539965400654016540265403654046540565406654076540865409654106541165412654136541465415654166541765418654196542065421654226542365424654256542665427654286542965430654316543265433654346543565436654376543865439654406544165442654436544465445654466544765448654496545065451654526545365454654556545665457654586545965460654616546265463654646546565466654676546865469654706547165472654736547465475654766547765478654796548065481654826548365484654856548665487654886548965490654916549265493654946549565496654976549865499655006550165502655036550465505655066550765508655096551065511655126551365514655156551665517655186551965520655216552265523655246552565526655276552865529655306553165532655336553465535655366553765538655396554065541655426554365544655456554665547655486554965550655516555265553655546555565556655576555865559655606556165562655636556465565655666556765568655696557065571655726557365574655756557665577655786557965580655816558265583655846558565586655876558865589655906559165592655936559465595655966559765598655996560065601656026560365604656056560665607656086560965610656116561265613656146561565616656176561865619656206562165622656236562465625656266562765628656296563065631656326563365634656356563665637656386563965640656416564265643656446564565646656476564865649656506565165652656536565465655656566565765658656596566065661656626566365664656656566665667656686566965670656716567265673656746567565676656776567865679656806568165682656836568465685656866568765688656896569065691656926569365694656956569665697656986569965700657016570265703657046570565706657076570865709657106571165712657136571465715657166571765718657196572065721657226572365724657256572665727657286572965730657316573265733657346573565736657376573865739657406574165742657436574465745657466574765748657496575065751657526575365754657556575665757657586575965760657616576265763657646576565766657676576865769657706577165772657736577465775657766577765778657796578065781657826578365784657856578665787657886578965790657916579265793657946579565796657976579865799658006580165802658036580465805658066580765808658096581065811658126581365814658156581665817658186581965820658216582265823658246582565826658276582865829658306583165832658336583465835658366583765838658396584065841658426584365844658456584665847658486584965850658516585265853658546585565856658576585865859658606586165862658636586465865658666586765868658696587065871658726587365874658756587665877658786587965880658816588265883658846588565886658876588865889658906589165892658936589465895658966589765898658996590065901659026590365904659056590665907659086590965910659116591265913659146591565916659176591865919659206592165922659236592465925659266592765928659296593065931659326593365934659356593665937659386593965940659416594265943659446594565946659476594865949659506595165952659536595465955659566595765958659596596065961659626596365964659656596665967659686596965970659716597265973659746597565976659776597865979659806598165982659836598465985659866598765988659896599065991659926599365994659956599665997659986599966000660016600266003660046600566006660076600866009660106601166012660136601466015660166601766018660196602066021660226602366024660256602666027660286602966030660316603266033660346603566036660376603866039660406604166042660436604466045660466604766048660496605066051660526605366054660556605666057660586605966060660616606266063660646606566066660676606866069660706607166072660736607466075660766607766078660796608066081660826608366084660856608666087660886608966090660916609266093660946609566096660976609866099661006610166102661036610466105661066610766108661096611066111661126611366114661156611666117661186611966120661216612266123661246612566126661276612866129661306613166132661336613466135661366613766138661396614066141661426614366144661456614666147661486614966150661516615266153661546615566156661576615866159661606616166162661636616466165661666616766168661696617066171661726617366174661756617666177661786617966180661816618266183661846618566186661876618866189661906619166192661936619466195661966619766198661996620066201662026620366204662056620666207662086620966210662116621266213662146621566216662176621866219662206622166222662236622466225662266622766228662296623066231662326623366234662356623666237662386623966240662416624266243662446624566246662476624866249662506625166252662536625466255662566625766258662596626066261662626626366264662656626666267662686626966270662716627266273662746627566276662776627866279662806628166282662836628466285662866628766288662896629066291662926629366294662956629666297662986629966300663016630266303663046630566306663076630866309663106631166312663136631466315663166631766318663196632066321663226632366324663256632666327663286632966330663316633266333663346633566336663376633866339663406634166342663436634466345663466634766348663496635066351663526635366354663556635666357663586635966360663616636266363663646636566366663676636866369663706637166372663736637466375663766637766378663796638066381663826638366384663856638666387663886638966390663916639266393663946639566396663976639866399664006640166402664036640466405664066640766408664096641066411664126641366414664156641666417664186641966420664216642266423664246642566426664276642866429664306643166432664336643466435664366643766438664396644066441664426644366444664456644666447664486644966450664516645266453664546645566456664576645866459664606646166462664636646466465664666646766468664696647066471664726647366474664756647666477664786647966480664816648266483664846648566486664876648866489664906649166492664936649466495664966649766498664996650066501665026650366504665056650666507665086650966510665116651266513665146651566516665176651866519665206652166522665236652466525665266652766528665296653066531665326653366534665356653666537665386653966540665416654266543665446654566546665476654866549665506655166552665536655466555665566655766558665596656066561665626656366564665656656666567665686656966570665716657266573665746657566576665776657866579665806658166582665836658466585665866658766588665896659066591665926659366594665956659666597665986659966600666016660266603666046660566606666076660866609666106661166612666136661466615666166661766618666196662066621666226662366624666256662666627666286662966630666316663266633666346663566636666376663866639666406664166642666436664466645666466664766648666496665066651666526665366654666556665666657666586665966660666616666266663666646666566666666676666866669666706667166672666736667466675666766667766678666796668066681666826668366684666856668666687666886668966690666916669266693666946669566696666976669866699667006670166702667036670466705667066670766708667096671066711667126671366714667156671666717667186671966720667216672266723667246672566726667276672866729667306673166732667336673466735667366673766738667396674066741667426674366744667456674666747667486674966750667516675266753667546675566756667576675866759667606676166762667636676466765667666676766768667696677066771667726677366774667756677666777667786677966780667816678266783667846678566786667876678866789667906679166792667936679466795667966679766798667996680066801668026680366804668056680666807668086680966810668116681266813668146681566816668176681866819668206682166822668236682466825668266682766828668296683066831668326683366834668356683666837668386683966840668416684266843668446684566846668476684866849668506685166852668536685466855668566685766858668596686066861668626686366864668656686666867668686686966870668716687266873668746687566876668776687866879668806688166882668836688466885668866688766888668896689066891668926689366894668956689666897668986689966900669016690266903669046690566906669076690866909669106691166912669136691466915669166691766918669196692066921669226692366924669256692666927669286692966930669316693266933669346693566936669376693866939669406694166942669436694466945669466694766948669496695066951669526695366954669556695666957669586695966960669616696266963669646696566966669676696866969669706697166972669736697466975669766697766978669796698066981669826698366984669856698666987669886698966990669916699266993669946699566996669976699866999670006700167002670036700467005670066700767008670096701067011670126701367014670156701667017670186701967020670216702267023670246702567026670276702867029670306703167032670336703467035670366703767038670396704067041670426704367044670456704667047670486704967050670516705267053670546705567056670576705867059670606706167062670636706467065670666706767068670696707067071670726707367074670756707667077670786707967080670816708267083670846708567086670876708867089670906709167092670936709467095670966709767098670996710067101671026710367104671056710667107671086710967110671116711267113671146711567116671176711867119671206712167122671236712467125671266712767128671296713067131671326713367134671356713667137671386713967140671416714267143671446714567146671476714867149671506715167152671536715467155671566715767158671596716067161671626716367164671656716667167671686716967170671716717267173671746717567176671776717867179671806718167182671836718467185671866718767188671896719067191671926719367194671956719667197671986719967200672016720267203672046720567206672076720867209672106721167212672136721467215672166721767218672196722067221672226722367224672256722667227672286722967230672316723267233672346723567236672376723867239672406724167242672436724467245672466724767248672496725067251672526725367254672556725667257672586725967260672616726267263672646726567266672676726867269672706727167272672736727467275672766727767278672796728067281672826728367284672856728667287672886728967290672916729267293672946729567296672976729867299673006730167302673036730467305673066730767308673096731067311673126731367314673156731667317673186731967320673216732267323673246732567326673276732867329673306733167332673336733467335673366733767338673396734067341673426734367344673456734667347673486734967350673516735267353673546735567356673576735867359673606736167362673636736467365673666736767368673696737067371673726737367374673756737667377673786737967380673816738267383673846738567386673876738867389673906739167392673936739467395673966739767398673996740067401674026740367404674056740667407674086740967410674116741267413674146741567416674176741867419674206742167422674236742467425674266742767428674296743067431674326743367434674356743667437674386743967440674416744267443674446744567446674476744867449674506745167452674536745467455674566745767458674596746067461674626746367464674656746667467674686746967470674716747267473674746747567476674776747867479674806748167482674836748467485674866748767488674896749067491674926749367494674956749667497674986749967500675016750267503675046750567506675076750867509675106751167512675136751467515675166751767518675196752067521675226752367524675256752667527675286752967530675316753267533675346753567536675376753867539675406754167542675436754467545675466754767548675496755067551675526755367554675556755667557675586755967560675616756267563675646756567566675676756867569675706757167572675736757467575675766757767578675796758067581675826758367584675856758667587675886758967590675916759267593675946759567596675976759867599676006760167602676036760467605676066760767608676096761067611676126761367614676156761667617676186761967620676216762267623676246762567626676276762867629676306763167632676336763467635676366763767638676396764067641676426764367644676456764667647676486764967650676516765267653676546765567656676576765867659676606766167662676636766467665676666766767668676696767067671676726767367674676756767667677676786767967680676816768267683676846768567686676876768867689676906769167692676936769467695676966769767698676996770067701677026770367704677056770667707677086770967710677116771267713677146771567716677176771867719677206772167722677236772467725677266772767728677296773067731677326773367734677356773667737677386773967740677416774267743677446774567746677476774867749677506775167752677536775467755677566775767758677596776067761677626776367764677656776667767677686776967770677716777267773677746777567776677776777867779677806778167782677836778467785677866778767788677896779067791677926779367794677956779667797677986779967800678016780267803678046780567806678076780867809678106781167812678136781467815678166781767818678196782067821678226782367824678256782667827678286782967830678316783267833678346783567836678376783867839678406784167842678436784467845678466784767848678496785067851678526785367854678556785667857678586785967860678616786267863678646786567866678676786867869678706787167872678736787467875678766787767878678796788067881678826788367884678856788667887678886788967890678916789267893678946789567896678976789867899679006790167902679036790467905679066790767908679096791067911679126791367914679156791667917679186791967920679216792267923679246792567926679276792867929679306793167932679336793467935679366793767938679396794067941679426794367944679456794667947679486794967950679516795267953679546795567956679576795867959679606796167962679636796467965679666796767968679696797067971679726797367974679756797667977679786797967980679816798267983679846798567986679876798867989679906799167992679936799467995679966799767998679996800068001680026800368004680056800668007680086800968010680116801268013680146801568016680176801868019680206802168022680236802468025680266802768028680296803068031680326803368034680356803668037680386803968040680416804268043680446804568046680476804868049680506805168052680536805468055680566805768058680596806068061680626806368064680656806668067680686806968070680716807268073680746807568076680776807868079680806808168082680836808468085680866808768088680896809068091680926809368094680956809668097680986809968100681016810268103681046810568106681076810868109681106811168112681136811468115681166811768118681196812068121681226812368124681256812668127681286812968130681316813268133681346813568136681376813868139681406814168142681436814468145681466814768148681496815068151681526815368154681556815668157681586815968160681616816268163681646816568166681676816868169681706817168172681736817468175681766817768178681796818068181681826818368184681856818668187681886818968190681916819268193681946819568196681976819868199682006820168202682036820468205682066820768208682096821068211682126821368214682156821668217682186821968220682216822268223682246822568226682276822868229682306823168232682336823468235682366823768238682396824068241682426824368244682456824668247682486824968250682516825268253682546825568256682576825868259682606826168262682636826468265682666826768268682696827068271682726827368274682756827668277682786827968280682816828268283682846828568286682876828868289682906829168292682936829468295682966829768298682996830068301683026830368304683056830668307683086830968310683116831268313683146831568316683176831868319683206832168322683236832468325683266832768328683296833068331683326833368334683356833668337683386833968340683416834268343683446834568346683476834868349683506835168352683536835468355683566835768358683596836068361683626836368364683656836668367683686836968370683716837268373683746837568376683776837868379683806838168382683836838468385683866838768388683896839068391683926839368394683956839668397683986839968400684016840268403684046840568406684076840868409684106841168412684136841468415684166841768418684196842068421684226842368424684256842668427684286842968430684316843268433684346843568436684376843868439684406844168442684436844468445684466844768448684496845068451684526845368454684556845668457684586845968460684616846268463684646846568466684676846868469684706847168472684736847468475684766847768478684796848068481684826848368484684856848668487684886848968490684916849268493684946849568496684976849868499685006850168502685036850468505685066850768508685096851068511685126851368514685156851668517685186851968520685216852268523685246852568526685276852868529685306853168532685336853468535685366853768538685396854068541685426854368544685456854668547685486854968550685516855268553685546855568556685576855868559685606856168562685636856468565685666856768568685696857068571685726857368574685756857668577685786857968580685816858268583685846858568586685876858868589685906859168592685936859468595685966859768598685996860068601686026860368604686056860668607686086860968610686116861268613686146861568616686176861868619686206862168622686236862468625686266862768628686296863068631686326863368634686356863668637686386863968640686416864268643686446864568646686476864868649686506865168652686536865468655686566865768658686596866068661686626866368664686656866668667686686866968670686716867268673686746867568676686776867868679686806868168682686836868468685686866868768688686896869068691686926869368694686956869668697686986869968700687016870268703687046870568706687076870868709687106871168712687136871468715687166871768718687196872068721687226872368724687256872668727687286872968730687316873268733687346873568736687376873868739687406874168742687436874468745687466874768748687496875068751687526875368754687556875668757687586875968760687616876268763687646876568766687676876868769687706877168772687736877468775687766877768778687796878068781687826878368784687856878668787687886878968790687916879268793687946879568796687976879868799688006880168802688036880468805688066880768808688096881068811688126881368814688156881668817688186881968820688216882268823688246882568826688276882868829688306883168832688336883468835688366883768838688396884068841688426884368844688456884668847688486884968850688516885268853688546885568856688576885868859688606886168862688636886468865688666886768868688696887068871688726887368874688756887668877688786887968880688816888268883688846888568886688876888868889688906889168892688936889468895688966889768898688996890068901689026890368904689056890668907689086890968910689116891268913689146891568916689176891868919689206892168922689236892468925689266892768928689296893068931689326893368934689356893668937689386893968940689416894268943689446894568946689476894868949689506895168952689536895468955689566895768958689596896068961689626896368964689656896668967689686896968970689716897268973689746897568976689776897868979689806898168982689836898468985689866898768988689896899068991689926899368994689956899668997689986899969000690016900269003690046900569006690076900869009690106901169012690136901469015690166901769018690196902069021690226902369024690256902669027690286902969030690316903269033690346903569036690376903869039690406904169042690436904469045690466904769048690496905069051690526905369054690556905669057690586905969060690616906269063690646906569066690676906869069690706907169072690736907469075690766907769078690796908069081690826908369084690856908669087690886908969090690916909269093690946909569096690976909869099691006910169102691036910469105691066910769108691096911069111691126911369114691156911669117691186911969120691216912269123691246912569126691276912869129691306913169132691336913469135691366913769138691396914069141691426914369144691456914669147691486914969150691516915269153691546915569156691576915869159691606916169162691636916469165691666916769168691696917069171691726917369174691756917669177691786917969180691816918269183691846918569186691876918869189691906919169192691936919469195691966919769198691996920069201692026920369204692056920669207692086920969210692116921269213692146921569216692176921869219692206922169222692236922469225692266922769228692296923069231692326923369234692356923669237692386923969240692416924269243692446924569246692476924869249692506925169252692536925469255692566925769258692596926069261692626926369264692656926669267692686926969270692716927269273692746927569276692776927869279692806928169282692836928469285692866928769288692896929069291692926929369294692956929669297692986929969300693016930269303693046930569306693076930869309693106931169312693136931469315693166931769318693196932069321693226932369324693256932669327693286932969330693316933269333693346933569336693376933869339693406934169342693436934469345693466934769348693496935069351693526935369354693556935669357693586935969360693616936269363693646936569366693676936869369693706937169372693736937469375693766937769378693796938069381693826938369384693856938669387693886938969390693916939269393693946939569396693976939869399694006940169402694036940469405694066940769408694096941069411694126941369414694156941669417694186941969420694216942269423694246942569426694276942869429694306943169432694336943469435694366943769438694396944069441694426944369444694456944669447694486944969450694516945269453694546945569456694576945869459694606946169462694636946469465694666946769468694696947069471694726947369474694756947669477694786947969480694816948269483694846948569486694876948869489694906949169492694936949469495694966949769498694996950069501695026950369504695056950669507695086950969510695116951269513695146951569516695176951869519695206952169522695236952469525695266952769528695296953069531695326953369534695356953669537695386953969540695416954269543695446954569546695476954869549695506955169552695536955469555695566955769558695596956069561695626956369564695656956669567695686956969570695716957269573695746957569576695776957869579695806958169582695836958469585695866958769588695896959069591695926959369594695956959669597695986959969600696016960269603696046960569606696076960869609696106961169612696136961469615696166961769618696196962069621696226962369624696256962669627696286962969630696316963269633696346963569636696376963869639696406964169642696436964469645696466964769648696496965069651696526965369654696556965669657696586965969660696616966269663696646966569666696676966869669696706967169672696736967469675696766967769678696796968069681696826968369684696856968669687696886968969690696916969269693696946969569696696976969869699697006970169702697036970469705697066970769708697096971069711697126971369714697156971669717697186971969720697216972269723697246972569726697276972869729697306973169732697336973469735697366973769738697396974069741697426974369744697456974669747697486974969750697516975269753697546975569756697576975869759697606976169762697636976469765697666976769768697696977069771697726977369774697756977669777697786977969780697816978269783697846978569786697876978869789697906979169792697936979469795697966979769798697996980069801698026980369804698056980669807698086980969810698116981269813698146981569816698176981869819698206982169822698236982469825698266982769828698296983069831698326983369834698356983669837698386983969840698416984269843698446984569846698476984869849698506985169852698536985469855698566985769858698596986069861698626986369864698656986669867698686986969870698716987269873698746987569876698776987869879698806988169882698836988469885698866988769888698896989069891698926989369894698956989669897698986989969900699016990269903699046990569906699076990869909699106991169912699136991469915699166991769918699196992069921699226992369924699256992669927699286992969930699316993269933699346993569936699376993869939699406994169942699436994469945699466994769948699496995069951699526995369954699556995669957699586995969960699616996269963699646996569966699676996869969699706997169972699736997469975699766997769978699796998069981699826998369984699856998669987699886998969990699916999269993699946999569996699976999869999700007000170002700037000470005700067000770008700097001070011700127001370014700157001670017700187001970020700217002270023700247002570026700277002870029700307003170032700337003470035700367003770038700397004070041700427004370044700457004670047700487004970050700517005270053700547005570056700577005870059700607006170062700637006470065700667006770068700697007070071700727007370074700757007670077700787007970080700817008270083700847008570086700877008870089700907009170092700937009470095700967009770098700997010070101701027010370104701057010670107701087010970110701117011270113701147011570116701177011870119701207012170122701237012470125701267012770128701297013070131701327013370134701357013670137701387013970140701417014270143701447014570146701477014870149701507015170152701537015470155701567015770158701597016070161701627016370164701657016670167701687016970170701717017270173701747017570176701777017870179701807018170182701837018470185701867018770188701897019070191701927019370194701957019670197701987019970200702017020270203702047020570206702077020870209702107021170212702137021470215702167021770218702197022070221702227022370224702257022670227702287022970230702317023270233702347023570236702377023870239702407024170242702437024470245702467024770248702497025070251702527025370254702557025670257702587025970260702617026270263702647026570266702677026870269702707027170272702737027470275702767027770278702797028070281702827028370284702857028670287702887028970290702917029270293702947029570296702977029870299703007030170302703037030470305703067030770308703097031070311703127031370314703157031670317703187031970320703217032270323703247032570326703277032870329703307033170332703337033470335703367033770338703397034070341703427034370344703457034670347703487034970350703517035270353703547035570356703577035870359703607036170362703637036470365703667036770368703697037070371703727037370374703757037670377703787037970380703817038270383703847038570386703877038870389703907039170392703937039470395703967039770398703997040070401704027040370404704057040670407704087040970410704117041270413704147041570416704177041870419704207042170422704237042470425704267042770428704297043070431704327043370434704357043670437704387043970440704417044270443704447044570446704477044870449704507045170452704537045470455704567045770458704597046070461704627046370464704657046670467704687046970470704717047270473704747047570476704777047870479704807048170482704837048470485704867048770488704897049070491704927049370494704957049670497704987049970500705017050270503705047050570506705077050870509705107051170512705137051470515705167051770518705197052070521705227052370524705257052670527705287052970530705317053270533705347053570536705377053870539705407054170542705437054470545705467054770548705497055070551705527055370554705557055670557705587055970560705617056270563705647056570566705677056870569705707057170572705737057470575705767057770578705797058070581705827058370584705857058670587705887058970590705917059270593705947059570596705977059870599706007060170602706037060470605706067060770608706097061070611706127061370614706157061670617706187061970620706217062270623706247062570626706277062870629706307063170632706337063470635706367063770638706397064070641706427064370644706457064670647706487064970650706517065270653706547065570656706577065870659706607066170662706637066470665706667066770668706697067070671706727067370674706757067670677706787067970680706817068270683706847068570686706877068870689706907069170692706937069470695706967069770698706997070070701707027070370704707057070670707707087070970710707117071270713707147071570716707177071870719707207072170722707237072470725707267072770728707297073070731707327073370734707357073670737707387073970740707417074270743707447074570746707477074870749707507075170752707537075470755707567075770758707597076070761707627076370764707657076670767707687076970770707717077270773707747077570776707777077870779707807078170782707837078470785707867078770788707897079070791707927079370794707957079670797707987079970800708017080270803708047080570806708077080870809708107081170812708137081470815708167081770818708197082070821708227082370824708257082670827708287082970830708317083270833708347083570836708377083870839708407084170842708437084470845708467084770848708497085070851708527085370854708557085670857708587085970860708617086270863708647086570866708677086870869708707087170872708737087470875708767087770878708797088070881708827088370884708857088670887708887088970890708917089270893708947089570896708977089870899709007090170902709037090470905709067090770908709097091070911709127091370914709157091670917709187091970920709217092270923709247092570926709277092870929709307093170932709337093470935709367093770938709397094070941709427094370944709457094670947709487094970950709517095270953709547095570956709577095870959709607096170962709637096470965709667096770968709697097070971709727097370974709757097670977709787097970980709817098270983709847098570986709877098870989709907099170992709937099470995709967099770998709997100071001710027100371004710057100671007710087100971010710117101271013710147101571016710177101871019710207102171022710237102471025710267102771028710297103071031710327103371034710357103671037710387103971040710417104271043710447104571046710477104871049710507105171052710537105471055710567105771058710597106071061710627106371064710657106671067710687106971070710717107271073710747107571076710777107871079710807108171082710837108471085710867108771088710897109071091710927109371094710957109671097710987109971100711017110271103711047110571106711077110871109711107111171112711137111471115711167111771118711197112071121711227112371124711257112671127711287112971130711317113271133711347113571136711377113871139711407114171142711437114471145711467114771148711497115071151711527115371154711557115671157711587115971160711617116271163711647116571166711677116871169711707117171172711737117471175711767117771178711797118071181711827118371184711857118671187711887118971190711917119271193711947119571196711977119871199712007120171202712037120471205712067120771208712097121071211712127121371214712157121671217712187121971220712217122271223712247122571226712277122871229712307123171232712337123471235712367123771238712397124071241712427124371244712457124671247712487124971250712517125271253712547125571256712577125871259712607126171262712637126471265712667126771268712697127071271712727127371274712757127671277712787127971280712817128271283712847128571286712877128871289712907129171292712937129471295712967129771298712997130071301713027130371304713057130671307713087130971310713117131271313713147131571316713177131871319713207132171322713237132471325713267132771328713297133071331713327133371334713357133671337713387133971340713417134271343713447134571346713477134871349713507135171352713537135471355713567135771358713597136071361713627136371364713657136671367713687136971370713717137271373713747137571376713777137871379713807138171382713837138471385713867138771388713897139071391713927139371394713957139671397713987139971400714017140271403714047140571406714077140871409714107141171412714137141471415714167141771418714197142071421714227142371424714257142671427714287142971430714317143271433714347143571436714377143871439714407144171442714437144471445714467144771448714497145071451714527145371454714557145671457714587145971460714617146271463714647146571466714677146871469714707147171472714737147471475714767147771478714797148071481714827148371484714857148671487714887148971490714917149271493714947149571496714977149871499715007150171502715037150471505715067150771508715097151071511715127151371514715157151671517715187151971520715217152271523715247152571526715277152871529715307153171532715337153471535715367153771538715397154071541715427154371544715457154671547715487154971550715517155271553715547155571556715577155871559715607156171562715637156471565715667156771568715697157071571715727157371574715757157671577715787157971580715817158271583715847158571586715877158871589715907159171592715937159471595715967159771598715997160071601716027160371604716057160671607716087160971610716117161271613716147161571616716177161871619716207162171622716237162471625716267162771628716297163071631716327163371634716357163671637716387163971640716417164271643716447164571646716477164871649716507165171652716537165471655716567165771658716597166071661716627166371664716657166671667716687166971670716717167271673716747167571676716777167871679716807168171682716837168471685716867168771688716897169071691716927169371694716957169671697716987169971700717017170271703717047170571706717077170871709717107171171712717137171471715717167171771718717197172071721717227172371724717257172671727717287172971730717317173271733717347173571736717377173871739717407174171742717437174471745717467174771748717497175071751717527175371754717557175671757717587175971760717617176271763717647176571766717677176871769717707177171772717737177471775717767177771778717797178071781717827178371784717857178671787717887178971790717917179271793717947179571796717977179871799718007180171802718037180471805718067180771808718097181071811718127181371814718157181671817718187181971820718217182271823718247182571826718277182871829718307183171832718337183471835718367183771838718397184071841718427184371844718457184671847718487184971850718517185271853718547185571856718577185871859718607186171862718637186471865718667186771868718697187071871718727187371874718757187671877718787187971880718817188271883718847188571886718877188871889718907189171892718937189471895718967189771898718997190071901719027190371904719057190671907719087190971910719117191271913719147191571916719177191871919719207192171922719237192471925719267192771928719297193071931719327193371934719357193671937719387193971940719417194271943719447194571946719477194871949719507195171952719537195471955719567195771958719597196071961719627196371964719657196671967719687196971970719717197271973719747197571976719777197871979719807198171982719837198471985719867198771988719897199071991719927199371994719957199671997719987199972000720017200272003720047200572006720077200872009720107201172012720137201472015720167201772018720197202072021720227202372024720257202672027720287202972030720317203272033720347203572036720377203872039720407204172042720437204472045720467204772048720497205072051720527205372054720557205672057720587205972060720617206272063720647206572066720677206872069720707207172072720737207472075720767207772078720797208072081720827208372084720857208672087720887208972090720917209272093720947209572096720977209872099721007210172102721037210472105721067210772108721097211072111721127211372114721157211672117721187211972120721217212272123721247212572126721277212872129721307213172132721337213472135721367213772138721397214072141721427214372144721457214672147721487214972150721517215272153721547215572156721577215872159721607216172162721637216472165721667216772168721697217072171721727217372174721757217672177721787217972180721817218272183721847218572186721877218872189721907219172192721937219472195721967219772198721997220072201722027220372204722057220672207722087220972210722117221272213722147221572216722177221872219722207222172222722237222472225722267222772228722297223072231722327223372234722357223672237722387223972240722417224272243722447224572246722477224872249722507225172252722537225472255722567225772258722597226072261722627226372264722657226672267722687226972270722717227272273722747227572276722777227872279722807228172282722837228472285722867228772288722897229072291722927229372294722957229672297722987229972300723017230272303723047230572306723077230872309723107231172312723137231472315723167231772318723197232072321723227232372324723257232672327723287232972330723317233272333723347233572336723377233872339723407234172342723437234472345723467234772348723497235072351723527235372354723557235672357723587235972360723617236272363723647236572366723677236872369723707237172372723737237472375723767237772378723797238072381723827238372384723857238672387723887238972390723917239272393723947239572396723977239872399724007240172402724037240472405724067240772408724097241072411724127241372414724157241672417724187241972420724217242272423724247242572426724277242872429724307243172432724337243472435724367243772438724397244072441724427244372444724457244672447724487244972450724517245272453724547245572456724577245872459724607246172462724637246472465724667246772468724697247072471724727247372474724757247672477724787247972480724817248272483724847248572486724877248872489724907249172492724937249472495724967249772498724997250072501725027250372504725057250672507725087250972510725117251272513725147251572516725177251872519725207252172522725237252472525725267252772528725297253072531725327253372534725357253672537725387253972540725417254272543725447254572546725477254872549725507255172552725537255472555725567255772558725597256072561725627256372564725657256672567725687256972570725717257272573725747257572576725777257872579725807258172582725837258472585725867258772588725897259072591725927259372594725957259672597725987259972600726017260272603726047260572606726077260872609726107261172612726137261472615726167261772618726197262072621726227262372624726257262672627726287262972630726317263272633726347263572636726377263872639726407264172642726437264472645726467264772648726497265072651726527265372654726557265672657726587265972660726617266272663726647266572666726677266872669726707267172672726737267472675726767267772678726797268072681726827268372684726857268672687726887268972690726917269272693726947269572696726977269872699727007270172702727037270472705727067270772708727097271072711727127271372714727157271672717727187271972720727217272272723727247272572726727277272872729727307273172732727337273472735727367273772738727397274072741727427274372744727457274672747727487274972750727517275272753727547275572756727577275872759727607276172762727637276472765727667276772768727697277072771727727277372774727757277672777727787277972780727817278272783727847278572786727877278872789727907279172792727937279472795727967279772798727997280072801728027280372804728057280672807728087280972810728117281272813728147281572816728177281872819728207282172822728237282472825728267282772828728297283072831728327283372834728357283672837728387283972840728417284272843728447284572846728477284872849728507285172852728537285472855728567285772858728597286072861728627286372864728657286672867728687286972870728717287272873728747287572876728777287872879728807288172882728837288472885728867288772888728897289072891728927289372894728957289672897728987289972900729017290272903729047290572906729077290872909729107291172912729137291472915729167291772918729197292072921729227292372924729257292672927729287292972930729317293272933729347293572936729377293872939729407294172942729437294472945729467294772948729497295072951729527295372954729557295672957729587295972960729617296272963729647296572966729677296872969729707297172972729737297472975729767297772978729797298072981729827298372984729857298672987729887298972990729917299272993729947299572996729977299872999730007300173002730037300473005730067300773008730097301073011730127301373014730157301673017730187301973020730217302273023730247302573026730277302873029730307303173032730337303473035730367303773038730397304073041730427304373044730457304673047730487304973050730517305273053730547305573056730577305873059730607306173062730637306473065730667306773068730697307073071730727307373074730757307673077730787307973080730817308273083730847308573086730877308873089730907309173092730937309473095730967309773098730997310073101731027310373104731057310673107731087310973110731117311273113731147311573116731177311873119731207312173122731237312473125731267312773128731297313073131731327313373134731357313673137731387313973140731417314273143731447314573146731477314873149731507315173152731537315473155731567315773158731597316073161731627316373164731657316673167731687316973170731717317273173731747317573176731777317873179731807318173182731837318473185731867318773188731897319073191731927319373194731957319673197731987319973200732017320273203732047320573206732077320873209732107321173212732137321473215732167321773218732197322073221732227322373224732257322673227732287322973230732317323273233732347323573236732377323873239732407324173242732437324473245732467324773248732497325073251732527325373254732557325673257732587325973260732617326273263732647326573266732677326873269732707327173272732737327473275732767327773278732797328073281732827328373284732857328673287732887328973290732917329273293732947329573296732977329873299733007330173302733037330473305733067330773308733097331073311733127331373314733157331673317733187331973320733217332273323733247332573326733277332873329733307333173332733337333473335733367333773338733397334073341733427334373344733457334673347733487334973350733517335273353733547335573356733577335873359733607336173362733637336473365733667336773368733697337073371733727337373374733757337673377733787337973380733817338273383733847338573386733877338873389733907339173392733937339473395733967339773398733997340073401734027340373404734057340673407734087340973410734117341273413734147341573416734177341873419734207342173422734237342473425734267342773428734297343073431734327343373434734357343673437734387343973440734417344273443734447344573446734477344873449734507345173452734537345473455734567345773458734597346073461734627346373464734657346673467734687346973470734717347273473734747347573476734777347873479734807348173482734837348473485734867348773488734897349073491734927349373494734957349673497734987349973500735017350273503735047350573506735077350873509735107351173512735137351473515735167351773518735197352073521735227352373524735257352673527735287352973530735317353273533735347353573536735377353873539735407354173542735437354473545735467354773548735497355073551735527355373554735557355673557735587355973560735617356273563735647356573566735677356873569735707357173572735737357473575735767357773578735797358073581735827358373584735857358673587735887358973590735917359273593735947359573596735977359873599736007360173602736037360473605736067360773608736097361073611736127361373614736157361673617736187361973620736217362273623736247362573626736277362873629736307363173632736337363473635736367363773638736397364073641736427364373644736457364673647736487364973650736517365273653736547365573656736577365873659736607366173662736637366473665736667366773668736697367073671736727367373674736757367673677736787367973680736817368273683736847368573686736877368873689736907369173692736937369473695736967369773698736997370073701737027370373704737057370673707737087370973710737117371273713737147371573716737177371873719737207372173722737237372473725737267372773728737297373073731737327373373734737357373673737737387373973740737417374273743737447374573746737477374873749737507375173752737537375473755737567375773758737597376073761737627376373764737657376673767737687376973770737717377273773737747377573776737777377873779737807378173782737837378473785737867378773788737897379073791737927379373794737957379673797737987379973800738017380273803738047380573806738077380873809738107381173812738137381473815738167381773818738197382073821738227382373824738257382673827738287382973830738317383273833738347383573836738377383873839738407384173842738437384473845738467384773848738497385073851738527385373854738557385673857738587385973860738617386273863738647386573866738677386873869738707387173872738737387473875738767387773878738797388073881738827388373884738857388673887738887388973890738917389273893738947389573896738977389873899739007390173902739037390473905739067390773908739097391073911739127391373914739157391673917739187391973920739217392273923739247392573926739277392873929739307393173932739337393473935739367393773938739397394073941739427394373944739457394673947739487394973950739517395273953739547395573956739577395873959739607396173962739637396473965739667396773968739697397073971739727397373974739757397673977739787397973980739817398273983739847398573986739877398873989739907399173992739937399473995739967399773998739997400074001740027400374004740057400674007740087400974010740117401274013740147401574016740177401874019740207402174022740237402474025740267402774028740297403074031740327403374034740357403674037740387403974040740417404274043740447404574046740477404874049740507405174052740537405474055740567405774058740597406074061740627406374064740657406674067740687406974070740717407274073740747407574076740777407874079740807408174082740837408474085740867408774088740897409074091740927409374094740957409674097740987409974100741017410274103741047410574106741077410874109741107411174112741137411474115741167411774118741197412074121741227412374124741257412674127741287412974130741317413274133741347413574136741377413874139741407414174142741437414474145741467414774148741497415074151741527415374154741557415674157741587415974160741617416274163741647416574166741677416874169741707417174172741737417474175741767417774178741797418074181741827418374184741857418674187741887418974190741917419274193741947419574196741977419874199742007420174202742037420474205742067420774208742097421074211742127421374214742157421674217742187421974220742217422274223742247422574226742277422874229742307423174232742337423474235742367423774238742397424074241742427424374244742457424674247742487424974250742517425274253742547425574256742577425874259742607426174262742637426474265742667426774268742697427074271742727427374274742757427674277742787427974280742817428274283742847428574286742877428874289742907429174292742937429474295742967429774298742997430074301743027430374304743057430674307743087430974310743117431274313743147431574316743177431874319743207432174322743237432474325743267432774328743297433074331743327433374334743357433674337743387433974340743417434274343743447434574346743477434874349743507435174352743537435474355743567435774358743597436074361743627436374364743657436674367743687436974370743717437274373743747437574376743777437874379743807438174382743837438474385743867438774388743897439074391743927439374394743957439674397743987439974400744017440274403744047440574406744077440874409744107441174412744137441474415744167441774418744197442074421744227442374424744257442674427744287442974430744317443274433744347443574436744377443874439744407444174442744437444474445744467444774448744497445074451744527445374454744557445674457744587445974460744617446274463744647446574466744677446874469744707447174472744737447474475744767447774478744797448074481744827448374484744857448674487744887448974490744917449274493744947449574496744977449874499745007450174502745037450474505745067450774508745097451074511745127451374514745157451674517745187451974520745217452274523745247452574526745277452874529745307453174532745337453474535745367453774538745397454074541745427454374544745457454674547745487454974550745517455274553745547455574556745577455874559745607456174562745637456474565745667456774568745697457074571745727457374574745757457674577745787457974580745817458274583745847458574586745877458874589745907459174592745937459474595745967459774598745997460074601746027460374604746057460674607746087460974610746117461274613746147461574616746177461874619746207462174622746237462474625746267462774628746297463074631746327463374634746357463674637746387463974640746417464274643746447464574646746477464874649746507465174652746537465474655746567465774658746597466074661746627466374664746657466674667746687466974670746717467274673746747467574676746777467874679746807468174682746837468474685746867468774688746897469074691746927469374694746957469674697746987469974700747017470274703747047470574706747077470874709747107471174712747137471474715747167471774718747197472074721747227472374724747257472674727747287472974730747317473274733747347473574736747377473874739747407474174742747437474474745747467474774748747497475074751747527475374754747557475674757747587475974760747617476274763747647476574766747677476874769747707477174772747737477474775747767477774778747797478074781747827478374784747857478674787747887478974790747917479274793747947479574796747977479874799748007480174802748037480474805748067480774808748097481074811748127481374814748157481674817748187481974820748217482274823748247482574826748277482874829748307483174832748337483474835748367483774838748397484074841748427484374844748457484674847748487484974850748517485274853748547485574856748577485874859748607486174862748637486474865748667486774868748697487074871748727487374874748757487674877748787487974880748817488274883748847488574886748877488874889748907489174892748937489474895748967489774898748997490074901749027490374904749057490674907749087490974910749117491274913749147491574916749177491874919749207492174922749237492474925749267492774928749297493074931749327493374934749357493674937749387493974940749417494274943749447494574946749477494874949749507495174952749537495474955749567495774958749597496074961749627496374964749657496674967749687496974970749717497274973749747497574976749777497874979749807498174982749837498474985749867498774988749897499074991749927499374994749957499674997749987499975000750017500275003750047500575006750077500875009750107501175012750137501475015750167501775018750197502075021750227502375024750257502675027750287502975030750317503275033750347503575036750377503875039750407504175042750437504475045750467504775048750497505075051750527505375054750557505675057750587505975060750617506275063750647506575066750677506875069750707507175072750737507475075750767507775078750797508075081750827508375084750857508675087750887508975090750917509275093750947509575096750977509875099751007510175102751037510475105751067510775108751097511075111751127511375114751157511675117751187511975120751217512275123751247512575126751277512875129751307513175132751337513475135751367513775138751397514075141751427514375144751457514675147751487514975150751517515275153751547515575156751577515875159751607516175162751637516475165751667516775168751697517075171751727517375174751757517675177751787517975180751817518275183751847518575186751877518875189751907519175192751937519475195751967519775198751997520075201752027520375204752057520675207752087520975210752117521275213752147521575216752177521875219752207522175222752237522475225752267522775228752297523075231752327523375234752357523675237752387523975240752417524275243752447524575246752477524875249752507525175252752537525475255752567525775258752597526075261752627526375264752657526675267752687526975270752717527275273752747527575276752777527875279752807528175282752837528475285752867528775288752897529075291752927529375294752957529675297752987529975300753017530275303753047530575306753077530875309753107531175312753137531475315753167531775318753197532075321753227532375324753257532675327753287532975330753317533275333753347533575336753377533875339753407534175342753437534475345753467534775348753497535075351753527535375354753557535675357753587535975360753617536275363753647536575366753677536875369753707537175372753737537475375753767537775378753797538075381753827538375384753857538675387753887538975390753917539275393753947539575396753977539875399754007540175402754037540475405754067540775408754097541075411754127541375414754157541675417754187541975420754217542275423754247542575426754277542875429754307543175432754337543475435754367543775438754397544075441754427544375444754457544675447754487544975450754517545275453754547545575456754577545875459754607546175462754637546475465754667546775468754697547075471754727547375474754757547675477754787547975480754817548275483754847548575486754877548875489754907549175492754937549475495754967549775498754997550075501755027550375504755057550675507755087550975510755117551275513755147551575516755177551875519755207552175522755237552475525755267552775528755297553075531755327553375534755357553675537755387553975540755417554275543755447554575546755477554875549755507555175552755537555475555755567555775558755597556075561755627556375564755657556675567755687556975570755717557275573755747557575576755777557875579755807558175582755837558475585755867558775588755897559075591755927559375594755957559675597755987559975600756017560275603756047560575606756077560875609756107561175612756137561475615756167561775618756197562075621756227562375624756257562675627756287562975630756317563275633756347563575636756377563875639756407564175642756437564475645756467564775648756497565075651756527565375654756557565675657756587565975660756617566275663756647566575666756677566875669756707567175672756737567475675756767567775678756797568075681756827568375684756857568675687756887568975690756917569275693756947569575696756977569875699757007570175702757037570475705757067570775708757097571075711757127571375714757157571675717757187571975720757217572275723757247572575726757277572875729757307573175732757337573475735757367573775738757397574075741757427574375744757457574675747757487574975750757517575275753757547575575756757577575875759757607576175762757637576475765757667576775768757697577075771757727577375774757757577675777757787577975780757817578275783757847578575786757877578875789757907579175792757937579475795757967579775798757997580075801758027580375804758057580675807758087580975810758117581275813758147581575816758177581875819758207582175822758237582475825758267582775828758297583075831758327583375834758357583675837758387583975840758417584275843758447584575846758477584875849758507585175852758537585475855758567585775858758597586075861758627586375864758657586675867758687586975870758717587275873758747587575876758777587875879758807588175882758837588475885758867588775888758897589075891758927589375894758957589675897758987589975900759017590275903759047590575906759077590875909759107591175912759137591475915759167591775918759197592075921759227592375924759257592675927759287592975930759317593275933759347593575936759377593875939759407594175942759437594475945759467594775948759497595075951759527595375954759557595675957759587595975960759617596275963759647596575966759677596875969759707597175972759737597475975759767597775978759797598075981759827598375984759857598675987759887598975990759917599275993759947599575996759977599875999760007600176002760037600476005760067600776008760097601076011760127601376014760157601676017760187601976020760217602276023760247602576026760277602876029760307603176032760337603476035760367603776038760397604076041760427604376044760457604676047760487604976050760517605276053760547605576056760577605876059760607606176062760637606476065760667606776068760697607076071760727607376074760757607676077760787607976080760817608276083760847608576086760877608876089760907609176092760937609476095760967609776098760997610076101761027610376104761057610676107761087610976110761117611276113761147611576116761177611876119761207612176122761237612476125761267612776128761297613076131761327613376134761357613676137761387613976140761417614276143761447614576146761477614876149761507615176152761537615476155761567615776158761597616076161761627616376164761657616676167761687616976170761717617276173761747617576176761777617876179761807618176182761837618476185761867618776188761897619076191761927619376194761957619676197761987619976200762017620276203762047620576206762077620876209762107621176212762137621476215762167621776218762197622076221762227622376224762257622676227762287622976230762317623276233762347623576236762377623876239762407624176242762437624476245762467624776248762497625076251762527625376254762557625676257762587625976260762617626276263762647626576266762677626876269762707627176272762737627476275762767627776278762797628076281762827628376284762857628676287762887628976290762917629276293762947629576296762977629876299763007630176302763037630476305763067630776308763097631076311763127631376314763157631676317763187631976320763217632276323763247632576326763277632876329763307633176332763337633476335763367633776338763397634076341763427634376344763457634676347763487634976350763517635276353763547635576356763577635876359763607636176362763637636476365763667636776368763697637076371763727637376374763757637676377763787637976380763817638276383763847638576386763877638876389763907639176392763937639476395763967639776398763997640076401764027640376404764057640676407764087640976410764117641276413764147641576416764177641876419764207642176422764237642476425764267642776428764297643076431764327643376434764357643676437764387643976440764417644276443764447644576446764477644876449764507645176452764537645476455764567645776458764597646076461764627646376464764657646676467764687646976470764717647276473764747647576476764777647876479764807648176482764837648476485764867648776488764897649076491764927649376494764957649676497764987649976500765017650276503765047650576506765077650876509765107651176512765137651476515765167651776518765197652076521765227652376524765257652676527765287652976530765317653276533765347653576536765377653876539765407654176542765437654476545765467654776548765497655076551765527655376554765557655676557765587655976560765617656276563765647656576566765677656876569765707657176572765737657476575765767657776578765797658076581765827658376584765857658676587765887658976590765917659276593765947659576596765977659876599766007660176602766037660476605766067660776608766097661076611766127661376614766157661676617766187661976620766217662276623766247662576626766277662876629766307663176632766337663476635766367663776638766397664076641766427664376644766457664676647766487664976650766517665276653766547665576656766577665876659766607666176662766637666476665766667666776668766697667076671766727667376674766757667676677766787667976680766817668276683766847668576686766877668876689766907669176692766937669476695766967669776698766997670076701767027670376704767057670676707767087670976710767117671276713767147671576716767177671876719767207672176722767237672476725767267672776728767297673076731767327673376734767357673676737767387673976740767417674276743767447674576746767477674876749767507675176752767537675476755767567675776758767597676076761767627676376764767657676676767767687676976770767717677276773767747677576776767777677876779767807678176782767837678476785767867678776788767897679076791767927679376794767957679676797767987679976800768017680276803768047680576806768077680876809768107681176812768137681476815768167681776818768197682076821768227682376824768257682676827768287682976830768317683276833768347683576836768377683876839768407684176842768437684476845768467684776848768497685076851768527685376854768557685676857768587685976860768617686276863768647686576866768677686876869768707687176872768737687476875768767687776878768797688076881768827688376884768857688676887768887688976890768917689276893768947689576896768977689876899769007690176902769037690476905769067690776908769097691076911769127691376914769157691676917769187691976920769217692276923769247692576926769277692876929769307693176932769337693476935769367693776938769397694076941769427694376944769457694676947769487694976950769517695276953769547695576956769577695876959769607696176962769637696476965769667696776968769697697076971769727697376974769757697676977769787697976980769817698276983769847698576986769877698876989769907699176992769937699476995769967699776998769997700077001770027700377004770057700677007770087700977010770117701277013770147701577016770177701877019770207702177022770237702477025770267702777028770297703077031770327703377034770357703677037770387703977040770417704277043770447704577046770477704877049770507705177052770537705477055770567705777058770597706077061770627706377064770657706677067770687706977070770717707277073770747707577076770777707877079770807708177082770837708477085770867708777088770897709077091770927709377094770957709677097770987709977100771017710277103771047710577106771077710877109771107711177112771137711477115771167711777118771197712077121771227712377124771257712677127771287712977130771317713277133771347713577136771377713877139771407714177142771437714477145771467714777148771497715077151771527715377154771557715677157771587715977160771617716277163771647716577166771677716877169771707717177172771737717477175771767717777178771797718077181771827718377184771857718677187771887718977190771917719277193771947719577196771977719877199772007720177202772037720477205772067720777208772097721077211772127721377214772157721677217772187721977220772217722277223772247722577226772277722877229772307723177232772337723477235772367723777238772397724077241772427724377244772457724677247772487724977250772517725277253772547725577256772577725877259772607726177262772637726477265772667726777268772697727077271772727727377274772757727677277772787727977280772817728277283772847728577286772877728877289772907729177292772937729477295772967729777298772997730077301773027730377304773057730677307773087730977310773117731277313773147731577316773177731877319773207732177322773237732477325773267732777328773297733077331773327733377334773357733677337773387733977340773417734277343773447734577346773477734877349773507735177352773537735477355773567735777358773597736077361773627736377364773657736677367773687736977370773717737277373773747737577376773777737877379773807738177382773837738477385773867738777388773897739077391773927739377394773957739677397773987739977400774017740277403774047740577406774077740877409774107741177412774137741477415774167741777418774197742077421774227742377424774257742677427774287742977430774317743277433774347743577436774377743877439774407744177442774437744477445774467744777448774497745077451774527745377454774557745677457774587745977460774617746277463774647746577466774677746877469774707747177472774737747477475774767747777478774797748077481774827748377484774857748677487774887748977490774917749277493774947749577496774977749877499775007750177502775037750477505775067750777508775097751077511775127751377514775157751677517775187751977520775217752277523775247752577526775277752877529775307753177532775337753477535775367753777538775397754077541775427754377544775457754677547775487754977550775517755277553775547755577556775577755877559775607756177562775637756477565775667756777568775697757077571775727757377574775757757677577775787757977580775817758277583775847758577586775877758877589775907759177592775937759477595775967759777598775997760077601776027760377604776057760677607776087760977610776117761277613776147761577616776177761877619776207762177622776237762477625776267762777628776297763077631776327763377634776357763677637776387763977640776417764277643776447764577646776477764877649776507765177652776537765477655776567765777658776597766077661776627766377664776657766677667776687766977670776717767277673776747767577676776777767877679776807768177682776837768477685776867768777688776897769077691776927769377694776957769677697776987769977700777017770277703777047770577706777077770877709777107771177712777137771477715777167771777718777197772077721777227772377724777257772677727777287772977730777317773277733777347773577736777377773877739777407774177742777437774477745777467774777748777497775077751777527775377754777557775677757777587775977760777617776277763777647776577766777677776877769777707777177772777737777477775777767777777778777797778077781777827778377784777857778677787777887778977790777917779277793777947779577796777977779877799778007780177802778037780477805778067780777808778097781077811778127781377814778157781677817778187781977820778217782277823778247782577826778277782877829778307783177832778337783477835778367783777838778397784077841778427784377844778457784677847778487784977850778517785277853778547785577856778577785877859778607786177862778637786477865778667786777868778697787077871778727787377874778757787677877778787787977880778817788277883778847788577886778877788877889778907789177892778937789477895778967789777898778997790077901779027790377904779057790677907779087790977910779117791277913779147791577916779177791877919779207792177922779237792477925779267792777928779297793077931779327793377934779357793677937779387793977940779417794277943779447794577946779477794877949779507795177952779537795477955779567795777958779597796077961779627796377964779657796677967779687796977970779717797277973779747797577976779777797877979779807798177982779837798477985779867798777988779897799077991779927799377994779957799677997779987799978000780017800278003780047800578006780077800878009780107801178012780137801478015780167801778018780197802078021780227802378024780257802678027780287802978030780317803278033780347803578036780377803878039780407804178042780437804478045780467804778048780497805078051780527805378054780557805678057780587805978060780617806278063780647806578066780677806878069780707807178072780737807478075780767807778078780797808078081780827808378084780857808678087780887808978090780917809278093780947809578096780977809878099781007810178102781037810478105781067810778108781097811078111781127811378114781157811678117781187811978120781217812278123781247812578126781277812878129781307813178132781337813478135781367813778138781397814078141781427814378144781457814678147781487814978150781517815278153781547815578156781577815878159781607816178162781637816478165781667816778168781697817078171781727817378174781757817678177781787817978180781817818278183781847818578186781877818878189781907819178192781937819478195781967819778198781997820078201782027820378204782057820678207782087820978210782117821278213782147821578216782177821878219782207822178222782237822478225782267822778228782297823078231782327823378234782357823678237782387823978240782417824278243782447824578246782477824878249782507825178252782537825478255782567825778258782597826078261782627826378264782657826678267782687826978270782717827278273782747827578276782777827878279782807828178282782837828478285782867828778288782897829078291782927829378294782957829678297782987829978300783017830278303783047830578306783077830878309783107831178312783137831478315783167831778318783197832078321783227832378324783257832678327783287832978330783317833278333783347833578336783377833878339783407834178342783437834478345783467834778348783497835078351783527835378354783557835678357783587835978360783617836278363783647836578366783677836878369783707837178372783737837478375783767837778378783797838078381783827838378384783857838678387783887838978390783917839278393783947839578396783977839878399784007840178402784037840478405784067840778408784097841078411784127841378414784157841678417784187841978420784217842278423784247842578426784277842878429784307843178432784337843478435784367843778438784397844078441784427844378444784457844678447784487844978450784517845278453784547845578456784577845878459784607846178462784637846478465784667846778468784697847078471784727847378474784757847678477784787847978480784817848278483784847848578486784877848878489784907849178492784937849478495784967849778498784997850078501785027850378504785057850678507785087850978510785117851278513785147851578516785177851878519785207852178522785237852478525785267852778528785297853078531785327853378534785357853678537785387853978540785417854278543785447854578546785477854878549785507855178552785537855478555785567855778558785597856078561785627856378564785657856678567785687856978570785717857278573785747857578576785777857878579785807858178582785837858478585785867858778588785897859078591785927859378594785957859678597785987859978600786017860278603786047860578606786077860878609786107861178612786137861478615786167861778618786197862078621786227862378624786257862678627786287862978630786317863278633786347863578636786377863878639786407864178642786437864478645786467864778648786497865078651786527865378654786557865678657786587865978660786617866278663786647866578666786677866878669786707867178672786737867478675786767867778678786797868078681786827868378684786857868678687786887868978690786917869278693786947869578696786977869878699787007870178702787037870478705787067870778708787097871078711787127871378714787157871678717787187871978720787217872278723787247872578726787277872878729787307873178732787337873478735787367873778738787397874078741787427874378744787457874678747787487874978750787517875278753787547875578756787577875878759787607876178762787637876478765787667876778768787697877078771787727877378774787757877678777787787877978780787817878278783787847878578786787877878878789787907879178792787937879478795787967879778798787997880078801788027880378804788057880678807788087880978810788117881278813788147881578816788177881878819788207882178822788237882478825788267882778828788297883078831788327883378834788357883678837788387883978840788417884278843788447884578846788477884878849788507885178852788537885478855788567885778858788597886078861788627886378864788657886678867788687886978870788717887278873788747887578876788777887878879788807888178882788837888478885788867888778888788897889078891788927889378894788957889678897788987889978900789017890278903789047890578906789077890878909789107891178912789137891478915789167891778918789197892078921789227892378924789257892678927789287892978930789317893278933789347893578936789377893878939789407894178942789437894478945789467894778948789497895078951789527895378954789557895678957789587895978960789617896278963789647896578966789677896878969789707897178972789737897478975789767897778978789797898078981789827898378984789857898678987789887898978990789917899278993789947899578996789977899878999790007900179002790037900479005790067900779008790097901079011790127901379014790157901679017790187901979020790217902279023790247902579026790277902879029790307903179032790337903479035790367903779038790397904079041790427904379044790457904679047790487904979050790517905279053790547905579056790577905879059790607906179062790637906479065790667906779068790697907079071790727907379074790757907679077790787907979080790817908279083790847908579086790877908879089790907909179092790937909479095790967909779098790997910079101791027910379104791057910679107791087910979110791117911279113791147911579116791177911879119791207912179122791237912479125791267912779128791297913079131791327913379134791357913679137791387913979140791417914279143791447914579146791477914879149791507915179152791537915479155791567915779158791597916079161791627916379164791657916679167791687916979170791717917279173791747917579176791777917879179791807918179182791837918479185791867918779188791897919079191791927919379194791957919679197791987919979200792017920279203792047920579206792077920879209792107921179212792137921479215792167921779218792197922079221792227922379224792257922679227792287922979230792317923279233792347923579236792377923879239792407924179242792437924479245792467924779248792497925079251792527925379254792557925679257792587925979260792617926279263792647926579266792677926879269792707927179272792737927479275792767927779278792797928079281792827928379284792857928679287792887928979290792917929279293792947929579296792977929879299793007930179302793037930479305793067930779308793097931079311793127931379314793157931679317793187931979320793217932279323793247932579326793277932879329793307933179332793337933479335793367933779338793397934079341793427934379344793457934679347793487934979350793517935279353793547935579356793577935879359793607936179362793637936479365793667936779368793697937079371793727937379374793757937679377793787937979380793817938279383793847938579386793877938879389793907939179392793937939479395793967939779398793997940079401794027940379404794057940679407794087940979410794117941279413794147941579416794177941879419794207942179422794237942479425794267942779428794297943079431794327943379434794357943679437794387943979440794417944279443794447944579446794477944879449794507945179452794537945479455794567945779458794597946079461794627946379464794657946679467794687946979470794717947279473794747947579476794777947879479794807948179482794837948479485794867948779488794897949079491794927949379494794957949679497794987949979500795017950279503795047950579506795077950879509795107951179512795137951479515795167951779518795197952079521795227952379524795257952679527795287952979530795317953279533795347953579536795377953879539795407954179542795437954479545795467954779548795497955079551795527955379554795557955679557795587955979560795617956279563795647956579566795677956879569795707957179572795737957479575795767957779578795797958079581795827958379584795857958679587795887958979590795917959279593795947959579596795977959879599796007960179602796037960479605796067960779608796097961079611796127961379614796157961679617796187961979620796217962279623796247962579626796277962879629796307963179632796337963479635796367963779638796397964079641796427964379644796457964679647796487964979650796517965279653796547965579656796577965879659796607966179662796637966479665796667966779668796697967079671796727967379674796757967679677796787967979680796817968279683796847968579686796877968879689796907969179692796937969479695796967969779698796997970079701797027970379704797057970679707797087970979710797117971279713797147971579716797177971879719797207972179722797237972479725797267972779728797297973079731797327973379734797357973679737797387973979740797417974279743797447974579746797477974879749797507975179752797537975479755797567975779758797597976079761797627976379764797657976679767797687976979770797717977279773797747977579776797777977879779797807978179782797837978479785797867978779788797897979079791797927979379794797957979679797797987979979800798017980279803798047980579806798077980879809798107981179812798137981479815798167981779818798197982079821798227982379824798257982679827798287982979830798317983279833798347983579836798377983879839798407984179842798437984479845798467984779848798497985079851798527985379854798557985679857798587985979860798617986279863798647986579866798677986879869798707987179872798737987479875798767987779878798797988079881798827988379884798857988679887798887988979890798917989279893798947989579896798977989879899799007990179902799037990479905799067990779908799097991079911799127991379914799157991679917799187991979920799217992279923799247992579926799277992879929799307993179932799337993479935799367993779938799397994079941799427994379944799457994679947799487994979950799517995279953799547995579956799577995879959799607996179962799637996479965799667996779968799697997079971799727997379974799757997679977799787997979980799817998279983799847998579986799877998879989799907999179992799937999479995799967999779998799998000080001800028000380004800058000680007800088000980010800118001280013800148001580016800178001880019800208002180022800238002480025800268002780028800298003080031800328003380034800358003680037800388003980040800418004280043800448004580046800478004880049800508005180052800538005480055800568005780058800598006080061800628006380064800658006680067800688006980070800718007280073800748007580076800778007880079800808008180082800838008480085800868008780088800898009080091800928009380094800958009680097800988009980100801018010280103801048010580106801078010880109801108011180112801138011480115801168011780118801198012080121801228012380124801258012680127801288012980130801318013280133801348013580136801378013880139801408014180142801438014480145801468014780148801498015080151801528015380154801558015680157801588015980160801618016280163801648016580166801678016880169801708017180172801738017480175801768017780178801798018080181801828018380184801858018680187801888018980190801918019280193801948019580196801978019880199802008020180202802038020480205802068020780208802098021080211802128021380214802158021680217802188021980220802218022280223802248022580226802278022880229802308023180232802338023480235802368023780238802398024080241802428024380244802458024680247802488024980250802518025280253802548025580256802578025880259802608026180262802638026480265802668026780268802698027080271802728027380274802758027680277802788027980280802818028280283802848028580286802878028880289802908029180292802938029480295802968029780298802998030080301803028030380304803058030680307803088030980310803118031280313803148031580316803178031880319803208032180322803238032480325803268032780328803298033080331803328033380334803358033680337803388033980340803418034280343803448034580346803478034880349803508035180352803538035480355803568035780358803598036080361803628036380364803658036680367803688036980370803718037280373803748037580376803778037880379803808038180382803838038480385803868038780388803898039080391803928039380394803958039680397803988039980400804018040280403804048040580406804078040880409804108041180412804138041480415804168041780418804198042080421804228042380424804258042680427804288042980430804318043280433804348043580436804378043880439804408044180442804438044480445804468044780448804498045080451804528045380454804558045680457804588045980460804618046280463804648046580466804678046880469804708047180472804738047480475804768047780478804798048080481804828048380484804858048680487804888048980490804918049280493804948049580496804978049880499805008050180502805038050480505805068050780508805098051080511805128051380514805158051680517805188051980520805218052280523805248052580526805278052880529805308053180532805338053480535805368053780538805398054080541805428054380544805458054680547805488054980550805518055280553805548055580556805578055880559805608056180562805638056480565805668056780568805698057080571805728057380574805758057680577805788057980580805818058280583805848058580586805878058880589805908059180592805938059480595805968059780598805998060080601806028060380604806058060680607806088060980610806118061280613806148061580616806178061880619806208062180622806238062480625806268062780628806298063080631806328063380634806358063680637806388063980640806418064280643806448064580646806478064880649806508065180652806538065480655806568065780658806598066080661806628066380664806658066680667806688066980670806718067280673806748067580676806778067880679806808068180682806838068480685806868068780688806898069080691806928069380694806958069680697806988069980700807018070280703807048070580706807078070880709807108071180712807138071480715807168071780718807198072080721807228072380724807258072680727807288072980730807318073280733807348073580736807378073880739807408074180742807438074480745807468074780748807498075080751807528075380754807558075680757807588075980760807618076280763807648076580766807678076880769807708077180772807738077480775807768077780778807798078080781807828078380784807858078680787807888078980790807918079280793807948079580796807978079880799808008080180802808038080480805808068080780808808098081080811808128081380814808158081680817808188081980820808218082280823808248082580826808278082880829808308083180832808338083480835808368083780838808398084080841808428084380844808458084680847808488084980850808518085280853808548085580856808578085880859808608086180862808638086480865808668086780868808698087080871808728087380874808758087680877808788087980880808818088280883808848088580886808878088880889808908089180892808938089480895808968089780898808998090080901809028090380904809058090680907809088090980910809118091280913809148091580916809178091880919809208092180922809238092480925809268092780928809298093080931809328093380934809358093680937809388093980940809418094280943809448094580946809478094880949809508095180952809538095480955809568095780958809598096080961809628096380964809658096680967809688096980970809718097280973809748097580976809778097880979809808098180982809838098480985809868098780988809898099080991809928099380994809958099680997809988099981000810018100281003810048100581006810078100881009810108101181012810138101481015810168101781018810198102081021810228102381024810258102681027810288102981030810318103281033810348103581036810378103881039810408104181042810438104481045810468104781048810498105081051810528105381054810558105681057810588105981060810618106281063810648106581066810678106881069810708107181072810738107481075810768107781078810798108081081810828108381084810858108681087810888108981090810918109281093810948109581096810978109881099811008110181102811038110481105811068110781108811098111081111811128111381114811158111681117811188111981120811218112281123811248112581126811278112881129811308113181132811338113481135811368113781138811398114081141811428114381144811458114681147811488114981150811518115281153811548115581156811578115881159811608116181162811638116481165811668116781168811698117081171811728117381174811758117681177811788117981180811818118281183811848118581186811878118881189811908119181192811938119481195811968119781198811998120081201812028120381204812058120681207812088120981210812118121281213812148121581216812178121881219812208122181222812238122481225812268122781228812298123081231812328123381234812358123681237812388123981240812418124281243812448124581246812478124881249812508125181252812538125481255812568125781258812598126081261812628126381264812658126681267812688126981270812718127281273812748127581276812778127881279812808128181282812838128481285812868128781288812898129081291812928129381294812958129681297812988129981300813018130281303813048130581306813078130881309813108131181312813138131481315813168131781318813198132081321813228132381324813258132681327813288132981330813318133281333813348133581336813378133881339813408134181342813438134481345813468134781348813498135081351813528135381354813558135681357813588135981360813618136281363813648136581366813678136881369813708137181372813738137481375813768137781378813798138081381813828138381384813858138681387813888138981390813918139281393813948139581396813978139881399814008140181402814038140481405814068140781408814098141081411814128141381414814158141681417814188141981420814218142281423814248142581426814278142881429814308143181432814338143481435814368143781438814398144081441814428144381444814458144681447814488144981450814518145281453814548145581456814578145881459814608146181462814638146481465814668146781468814698147081471814728147381474814758147681477814788147981480814818148281483814848148581486814878148881489814908149181492814938149481495814968149781498814998150081501815028150381504815058150681507815088150981510815118151281513815148151581516815178151881519815208152181522815238152481525815268152781528815298153081531815328153381534815358153681537815388153981540815418154281543815448154581546815478154881549815508155181552815538155481555815568155781558815598156081561815628156381564815658156681567815688156981570815718157281573815748157581576815778157881579815808158181582815838158481585815868158781588815898159081591815928159381594815958159681597815988159981600816018160281603816048160581606816078160881609816108161181612816138161481615816168161781618816198162081621816228162381624816258162681627816288162981630816318163281633816348163581636816378163881639816408164181642816438164481645816468164781648816498165081651816528165381654816558165681657816588165981660816618166281663816648166581666816678166881669816708167181672816738167481675816768167781678816798168081681816828168381684816858168681687816888168981690816918169281693816948169581696816978169881699817008170181702817038170481705817068170781708817098171081711817128171381714817158171681717817188171981720817218172281723817248172581726817278172881729817308173181732817338173481735817368173781738817398174081741817428174381744817458174681747817488174981750817518175281753817548175581756817578175881759817608176181762817638176481765817668176781768817698177081771817728177381774817758177681777817788177981780817818178281783817848178581786817878178881789817908179181792817938179481795817968179781798817998180081801818028180381804818058180681807818088180981810818118181281813818148181581816818178181881819818208182181822818238182481825818268182781828818298183081831818328183381834818358183681837818388183981840818418184281843818448184581846818478184881849818508185181852818538185481855818568185781858818598186081861818628186381864818658186681867818688186981870818718187281873818748187581876818778187881879818808188181882818838188481885818868188781888818898189081891818928189381894818958189681897818988189981900819018190281903819048190581906819078190881909819108191181912819138191481915819168191781918819198192081921819228192381924819258192681927819288192981930819318193281933819348193581936819378193881939819408194181942819438194481945819468194781948819498195081951819528195381954819558195681957819588195981960819618196281963819648196581966819678196881969819708197181972819738197481975819768197781978819798198081981819828198381984819858198681987819888198981990819918199281993819948199581996819978199881999820008200182002820038200482005820068200782008820098201082011820128201382014820158201682017820188201982020820218202282023820248202582026820278202882029820308203182032820338203482035820368203782038820398204082041820428204382044820458204682047820488204982050820518205282053820548205582056820578205882059820608206182062820638206482065820668206782068820698207082071820728207382074820758207682077820788207982080820818208282083820848208582086820878208882089820908209182092820938209482095820968209782098820998210082101821028210382104821058210682107821088210982110821118211282113821148211582116821178211882119821208212182122821238212482125821268212782128821298213082131821328213382134821358213682137821388213982140821418214282143821448214582146821478214882149821508215182152821538215482155821568215782158821598216082161821628216382164821658216682167821688216982170821718217282173821748217582176821778217882179821808218182182821838218482185821868218782188821898219082191821928219382194821958219682197821988219982200822018220282203822048220582206822078220882209822108221182212822138221482215822168221782218822198222082221822228222382224822258222682227822288222982230822318223282233822348223582236822378223882239822408224182242822438224482245822468224782248822498225082251822528225382254822558225682257822588225982260822618226282263822648226582266822678226882269822708227182272822738227482275822768227782278822798228082281822828228382284822858228682287822888228982290822918229282293822948229582296822978229882299823008230182302823038230482305823068230782308823098231082311823128231382314823158231682317823188231982320823218232282323823248232582326823278232882329823308233182332823338233482335823368233782338823398234082341823428234382344823458234682347823488234982350823518235282353823548235582356823578235882359823608236182362823638236482365823668236782368823698237082371823728237382374823758237682377823788237982380823818238282383823848238582386823878238882389823908239182392823938239482395823968239782398823998240082401824028240382404824058240682407824088240982410824118241282413824148241582416824178241882419824208242182422824238242482425824268242782428824298243082431824328243382434824358243682437824388243982440824418244282443824448244582446824478244882449824508245182452824538245482455824568245782458824598246082461824628246382464824658246682467824688246982470824718247282473824748247582476824778247882479824808248182482824838248482485824868248782488824898249082491824928249382494824958249682497824988249982500825018250282503825048250582506825078250882509825108251182512825138251482515825168251782518825198252082521825228252382524825258252682527825288252982530825318253282533825348253582536825378253882539825408254182542825438254482545825468254782548825498255082551825528255382554825558255682557825588255982560825618256282563825648256582566825678256882569825708257182572825738257482575825768257782578825798258082581825828258382584825858258682587825888258982590825918259282593825948259582596825978259882599826008260182602826038260482605826068260782608826098261082611826128261382614826158261682617826188261982620826218262282623826248262582626826278262882629826308263182632826338263482635826368263782638826398264082641826428264382644826458264682647826488264982650826518265282653826548265582656826578265882659826608266182662826638266482665826668266782668826698267082671826728267382674826758267682677826788267982680826818268282683826848268582686826878268882689826908269182692826938269482695826968269782698826998270082701827028270382704827058270682707827088270982710827118271282713827148271582716827178271882719827208272182722827238272482725827268272782728827298273082731827328273382734827358273682737827388273982740827418274282743827448274582746827478274882749827508275182752827538275482755827568275782758827598276082761827628276382764827658276682767827688276982770827718277282773827748277582776827778277882779827808278182782827838278482785827868278782788827898279082791827928279382794827958279682797827988279982800828018280282803828048280582806828078280882809828108281182812828138281482815828168281782818828198282082821828228282382824828258282682827828288282982830828318283282833828348283582836828378283882839828408284182842828438284482845828468284782848828498285082851828528285382854828558285682857828588285982860828618286282863828648286582866828678286882869828708287182872828738287482875828768287782878828798288082881828828288382884828858288682887828888288982890828918289282893828948289582896828978289882899829008290182902829038290482905829068290782908829098291082911829128291382914829158291682917829188291982920829218292282923829248292582926829278292882929829308293182932829338293482935829368293782938829398294082941829428294382944829458294682947829488294982950829518295282953829548295582956829578295882959829608296182962829638296482965829668296782968829698297082971829728297382974829758297682977829788297982980829818298282983829848298582986829878298882989829908299182992829938299482995829968299782998829998300083001830028300383004830058300683007830088300983010830118301283013830148301583016830178301883019830208302183022830238302483025830268302783028830298303083031830328303383034830358303683037830388303983040830418304283043830448304583046830478304883049830508305183052830538305483055830568305783058830598306083061830628306383064830658306683067830688306983070830718307283073830748307583076830778307883079830808308183082830838308483085830868308783088830898309083091830928309383094830958309683097830988309983100831018310283103831048310583106831078310883109831108311183112831138311483115831168311783118831198312083121831228312383124831258312683127831288312983130831318313283133831348313583136831378313883139831408314183142831438314483145831468314783148831498315083151831528315383154831558315683157831588315983160831618316283163831648316583166831678316883169831708317183172831738317483175831768317783178831798318083181831828318383184831858318683187831888318983190831918319283193831948319583196831978319883199832008320183202832038320483205832068320783208832098321083211832128321383214832158321683217832188321983220832218322283223832248322583226832278322883229832308323183232832338323483235832368323783238832398324083241832428324383244832458324683247832488324983250832518325283253832548325583256832578325883259832608326183262832638326483265832668326783268832698327083271832728327383274832758327683277832788327983280832818328283283832848328583286832878328883289832908329183292832938329483295832968329783298832998330083301833028330383304833058330683307833088330983310833118331283313833148331583316833178331883319833208332183322833238332483325833268332783328833298333083331833328333383334833358333683337833388333983340833418334283343833448334583346833478334883349833508335183352833538335483355833568335783358833598336083361833628336383364833658336683367833688336983370833718337283373833748337583376833778337883379833808338183382833838338483385833868338783388833898339083391833928339383394833958339683397833988339983400834018340283403834048340583406834078340883409834108341183412834138341483415834168341783418834198342083421834228342383424834258342683427834288342983430834318343283433834348343583436834378343883439834408344183442834438344483445834468344783448834498345083451834528345383454834558345683457834588345983460834618346283463834648346583466834678346883469834708347183472834738347483475834768347783478834798348083481834828348383484834858348683487834888348983490834918349283493834948349583496834978349883499835008350183502835038350483505835068350783508835098351083511835128351383514835158351683517835188351983520835218352283523835248352583526835278352883529835308353183532835338353483535835368353783538835398354083541835428354383544835458354683547835488354983550835518355283553835548355583556835578355883559835608356183562835638356483565835668356783568835698357083571835728357383574835758357683577835788357983580835818358283583835848358583586835878358883589835908359183592835938359483595835968359783598835998360083601836028360383604836058360683607836088360983610836118361283613836148361583616836178361883619836208362183622836238362483625836268362783628836298363083631836328363383634836358363683637836388363983640836418364283643836448364583646836478364883649836508365183652836538365483655836568365783658836598366083661836628366383664836658366683667836688366983670836718367283673836748367583676836778367883679836808368183682836838368483685836868368783688836898369083691836928369383694836958369683697836988369983700837018370283703837048370583706837078370883709837108371183712837138371483715837168371783718837198372083721837228372383724837258372683727837288372983730837318373283733837348373583736837378373883739837408374183742837438374483745837468374783748837498375083751837528375383754837558375683757837588375983760837618376283763837648376583766837678376883769837708377183772837738377483775837768377783778837798378083781837828378383784837858378683787837888378983790837918379283793837948379583796837978379883799838008380183802838038380483805838068380783808838098381083811838128381383814838158381683817838188381983820838218382283823838248382583826838278382883829838308383183832838338383483835838368383783838838398384083841838428384383844838458384683847838488384983850838518385283853838548385583856838578385883859838608386183862838638386483865838668386783868838698387083871838728387383874838758387683877838788387983880838818388283883838848388583886838878388883889838908389183892838938389483895838968389783898838998390083901839028390383904839058390683907839088390983910839118391283913839148391583916839178391883919839208392183922839238392483925839268392783928839298393083931839328393383934839358393683937839388393983940839418394283943839448394583946839478394883949839508395183952839538395483955839568395783958839598396083961839628396383964839658396683967839688396983970839718397283973839748397583976839778397883979839808398183982839838398483985839868398783988839898399083991839928399383994839958399683997839988399984000840018400284003840048400584006840078400884009840108401184012840138401484015840168401784018840198402084021840228402384024840258402684027840288402984030840318403284033840348403584036840378403884039840408404184042840438404484045840468404784048840498405084051840528405384054840558405684057840588405984060840618406284063840648406584066840678406884069840708407184072840738407484075840768407784078840798408084081840828408384084840858408684087840888408984090840918409284093840948409584096840978409884099841008410184102841038410484105841068410784108841098411084111841128411384114841158411684117841188411984120841218412284123841248412584126841278412884129841308413184132841338413484135841368413784138841398414084141841428414384144841458414684147841488414984150841518415284153841548415584156841578415884159841608416184162841638416484165841668416784168841698417084171841728417384174841758417684177841788417984180841818418284183841848418584186841878418884189841908419184192841938419484195841968419784198841998420084201842028420384204842058420684207842088420984210842118421284213842148421584216842178421884219842208422184222842238422484225842268422784228842298423084231842328423384234842358423684237842388423984240842418424284243842448424584246842478424884249842508425184252842538425484255842568425784258842598426084261842628426384264842658426684267842688426984270842718427284273842748427584276842778427884279842808428184282842838428484285842868428784288842898429084291842928429384294842958429684297842988429984300843018430284303843048430584306843078430884309843108431184312843138431484315843168431784318843198432084321843228432384324843258432684327843288432984330843318433284333843348433584336843378433884339843408434184342843438434484345843468434784348843498435084351843528435384354843558435684357843588435984360843618436284363843648436584366843678436884369843708437184372843738437484375843768437784378843798438084381843828438384384843858438684387843888438984390843918439284393843948439584396843978439884399844008440184402844038440484405844068440784408844098441084411844128441384414844158441684417844188441984420844218442284423844248442584426844278442884429844308443184432844338443484435844368443784438844398444084441844428444384444844458444684447844488444984450844518445284453844548445584456844578445884459844608446184462844638446484465844668446784468844698447084471844728447384474844758447684477844788447984480844818448284483844848448584486844878448884489844908449184492844938449484495844968449784498844998450084501845028450384504845058450684507845088450984510845118451284513845148451584516845178451884519845208452184522845238452484525845268452784528845298453084531845328453384534845358453684537845388453984540845418454284543845448454584546845478454884549845508455184552845538455484555845568455784558845598456084561845628456384564845658456684567845688456984570845718457284573845748457584576845778457884579845808458184582845838458484585845868458784588845898459084591845928459384594845958459684597845988459984600846018460284603846048460584606846078460884609846108461184612846138461484615846168461784618846198462084621846228462384624846258462684627846288462984630846318463284633846348463584636846378463884639846408464184642846438464484645846468464784648846498465084651846528465384654846558465684657846588465984660846618466284663846648466584666846678466884669846708467184672846738467484675846768467784678846798468084681846828468384684846858468684687846888468984690846918469284693846948469584696846978469884699847008470184702847038470484705847068470784708847098471084711847128471384714847158471684717847188471984720847218472284723847248472584726847278472884729847308473184732847338473484735847368473784738847398474084741847428474384744847458474684747847488474984750847518475284753847548475584756847578475884759847608476184762847638476484765847668476784768847698477084771847728477384774847758477684777847788477984780847818478284783847848478584786847878478884789847908479184792847938479484795847968479784798847998480084801848028480384804848058480684807848088480984810848118481284813848148481584816848178481884819848208482184822848238482484825848268482784828848298483084831848328483384834848358483684837848388483984840848418484284843848448484584846848478484884849848508485184852848538485484855848568485784858848598486084861848628486384864848658486684867848688486984870848718487284873848748487584876848778487884879848808488184882848838488484885848868488784888848898489084891848928489384894848958489684897848988489984900849018490284903849048490584906849078490884909849108491184912849138491484915849168491784918849198492084921849228492384924849258492684927849288492984930849318493284933849348493584936849378493884939849408494184942849438494484945849468494784948849498495084951849528495384954849558495684957849588495984960849618496284963849648496584966849678496884969849708497184972849738497484975849768497784978849798498084981849828498384984849858498684987849888498984990849918499284993849948499584996849978499884999850008500185002850038500485005850068500785008850098501085011850128501385014850158501685017850188501985020850218502285023850248502585026850278502885029850308503185032850338503485035850368503785038850398504085041850428504385044850458504685047850488504985050850518505285053850548505585056850578505885059850608506185062850638506485065850668506785068850698507085071850728507385074850758507685077850788507985080850818508285083850848508585086850878508885089850908509185092850938509485095850968509785098850998510085101851028510385104851058510685107851088510985110851118511285113851148511585116851178511885119851208512185122851238512485125851268512785128851298513085131851328513385134851358513685137851388513985140851418514285143851448514585146851478514885149851508515185152851538515485155851568515785158851598516085161851628516385164851658516685167851688516985170851718517285173851748517585176851778517885179851808518185182851838518485185851868518785188851898519085191851928519385194851958519685197851988519985200852018520285203852048520585206852078520885209852108521185212852138521485215852168521785218852198522085221852228522385224852258522685227852288522985230852318523285233852348523585236852378523885239852408524185242852438524485245852468524785248852498525085251852528525385254852558525685257852588525985260852618526285263852648526585266852678526885269852708527185272852738527485275852768527785278852798528085281852828528385284852858528685287852888528985290852918529285293852948529585296852978529885299853008530185302853038530485305853068530785308853098531085311853128531385314853158531685317853188531985320853218532285323853248532585326853278532885329853308533185332853338533485335853368533785338853398534085341853428534385344853458534685347853488534985350853518535285353853548535585356853578535885359853608536185362853638536485365853668536785368853698537085371853728537385374853758537685377853788537985380853818538285383853848538585386853878538885389853908539185392853938539485395853968539785398853998540085401854028540385404854058540685407854088540985410854118541285413854148541585416854178541885419854208542185422854238542485425854268542785428854298543085431854328543385434854358543685437854388543985440854418544285443854448544585446854478544885449854508545185452854538545485455854568545785458854598546085461854628546385464854658546685467854688546985470854718547285473854748547585476854778547885479854808548185482854838548485485854868548785488854898549085491854928549385494854958549685497854988549985500855018550285503855048550585506855078550885509855108551185512855138551485515855168551785518855198552085521855228552385524855258552685527855288552985530855318553285533855348553585536855378553885539855408554185542855438554485545855468554785548855498555085551855528555385554855558555685557855588555985560855618556285563855648556585566855678556885569855708557185572855738557485575855768557785578855798558085581855828558385584855858558685587855888558985590855918559285593855948559585596855978559885599856008560185602856038560485605856068560785608856098561085611856128561385614856158561685617856188561985620856218562285623856248562585626856278562885629856308563185632856338563485635856368563785638856398564085641856428564385644856458564685647856488564985650856518565285653856548565585656856578565885659856608566185662856638566485665856668566785668856698567085671856728567385674856758567685677856788567985680856818568285683856848568585686856878568885689856908569185692856938569485695856968569785698856998570085701857028570385704857058570685707857088570985710857118571285713857148571585716857178571885719857208572185722857238572485725857268572785728857298573085731857328573385734857358573685737857388573985740857418574285743857448574585746857478574885749857508575185752857538575485755857568575785758857598576085761857628576385764857658576685767857688576985770857718577285773857748577585776857778577885779857808578185782857838578485785857868578785788857898579085791857928579385794857958579685797857988579985800858018580285803858048580585806858078580885809858108581185812858138581485815858168581785818858198582085821858228582385824858258582685827858288582985830858318583285833858348583585836858378583885839858408584185842858438584485845858468584785848858498585085851858528585385854858558585685857858588585985860858618586285863858648586585866858678586885869858708587185872858738587485875858768587785878858798588085881858828588385884858858588685887858888588985890858918589285893858948589585896858978589885899859008590185902859038590485905859068590785908859098591085911859128591385914859158591685917859188591985920859218592285923859248592585926859278592885929859308593185932859338593485935859368593785938
  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) { console.log("Skipping dependency: " + id); }), requirejs = define.require;
  244. define("amber/browser-compatibility", [], {});
  245. /* ====================================================================
  246. |
  247. | Amber Smalltalk
  248. | http://amber-lang.net
  249. |
  250. ======================================================================
  251. ======================================================================
  252. |
  253. | Copyright (c) 2010-2014
  254. | Nicolas Petton <petton.nicolas@gmail.com>
  255. |
  256. | Copyright (c) 2012-2014
  257. | The Amber team https://github.com/amber-smalltalk?tab=members
  258. | Amber contributors https://github.com/amber-smalltalk/amber/graphs/contributors
  259. |
  260. | Amber is released under the MIT license
  261. |
  262. | Permission is hereby granted, free of charge, to any person obtaining
  263. | a copy of this software and associated documentation files (the
  264. | 'Software'), to deal in the Software without restriction, including
  265. | without limitation the rights to use, copy, modify, merge, publish,
  266. | distribute, sublicense, and/or sell copies of the Software, and to
  267. | permit persons to whom the Software is furnished to do so, subject to
  268. | the following conditions:
  269. |
  270. | The above copyright notice and this permission notice shall be
  271. | included in all copies or substantial portions of the Software.
  272. |
  273. | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
  274. | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  275. | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  276. | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  277. | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  278. | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  279. | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  280. |
  281. ==================================================================== */
  282. //jshint eqnull:true
  283. define("amber/boot", [ 'require', './browser-compatibility' ], function (require) {
  284. /* Reconfigurable micro composition system, https://github.com/amber-smalltalk/brikz */
  285. function Brikz(api, apiKey, initKey) {
  286. var brikz = this, backup = {};
  287. apiKey = apiKey || 'exports';
  288. initKey = initKey || '__init__';
  289. function mixin(src, target, what) {
  290. for (var keys = Object.keys(what||src), l=keys.length, i=0; i<l; ++i) {
  291. if (src == null) { target[keys[i]] = undefined; } else {
  292. var value = src[keys[i]];
  293. if (typeof value !== "undefined") { target[keys[i]] = value; }
  294. }
  295. }
  296. return target;
  297. }
  298. var d={value: null, enumerable: false, configurable: true, writable: true};
  299. Object.defineProperties(this, { ensure: d, rebuild: d });
  300. var exclude = mixin(this, {});
  301. this.rebuild = function () {
  302. Object.keys(backup).forEach(function (key) {
  303. mixin(null, api, (backup[key]||0)[apiKey]||{});
  304. });
  305. var oapi = mixin(api, {}), order = [], chk = {};
  306. brikz.ensure = function(key) {
  307. if (key in exclude) { return null; }
  308. var b = brikz[key], bak = backup[key];
  309. mixin(null, api, api);
  310. while (typeof b === "function") { b = new b(brikz, api, bak); }
  311. if (b && !chk[key]) { chk[key]=true; order.push(b); }
  312. if (b && !b[apiKey]) { b[apiKey] = mixin(api, {}); }
  313. brikz[key] = b;
  314. return b;
  315. };
  316. Object.keys(brikz).forEach(function (key) { brikz.ensure(key); });
  317. brikz.ensure = null;
  318. mixin(oapi, mixin(null, api, api));
  319. order.forEach(function(brik) { mixin(brik[apiKey] || {}, api); });
  320. order.forEach(function(brik) { if (brik[initKey]) brik[initKey](); });
  321. backup = mixin(brikz, {});
  322. };
  323. }
  324. /* Brikz end */
  325. function inherits(child, parent) {
  326. child.prototype = Object.create(parent.prototype, {
  327. constructor: { value: child,
  328. enumerable: false, configurable: true, writable: true }
  329. });
  330. return child;
  331. }
  332. var globals = {};
  333. globals.SmalltalkSettings = {};
  334. var api = {};
  335. var brikz = new Brikz(api);
  336. function RootBrik(brikz, st) {
  337. /* Smalltalk foundational objects */
  338. /* SmalltalkRoot is the hidden root of the Amber hierarchy.
  339. All objects including `Object` inherit from SmalltalkRoot */
  340. function SmalltalkRoot() {}
  341. function SmalltalkProtoObject() {}
  342. inherits(SmalltalkProtoObject, SmalltalkRoot);
  343. function SmalltalkObject() {}
  344. inherits(SmalltalkObject, SmalltalkProtoObject);
  345. function SmalltalkNil() {}
  346. inherits(SmalltalkNil, SmalltalkObject);
  347. this.Object = SmalltalkObject;
  348. this.nil = new SmalltalkNil();
  349. // Adds an `isNil` property to the `nil` object. When sending
  350. // nil objects from one environment to another, doing
  351. // `anObject == nil` (in JavaScript) does not always answer
  352. // true as the referenced nil object might come from the other
  353. // environment.
  354. Object.defineProperty(this.nil, 'isNil', {
  355. value: true,
  356. enumerable: false, configurable: false, writable: false
  357. });
  358. // Hidden root class of the system.
  359. this.rootAsClass = {fn: SmalltalkRoot};
  360. this.__init__ = function () {
  361. st.addPackage("Kernel-Objects");
  362. st.wrapClassName("ProtoObject", "Kernel-Objects", SmalltalkProtoObject, undefined, false);
  363. st.wrapClassName("Object", "Kernel-Objects", SmalltalkObject, globals.ProtoObject, false);
  364. st.wrapClassName("UndefinedObject", "Kernel-Objects", SmalltalkNil, globals.Object, false);
  365. };
  366. }
  367. function OrganizeBrik(brikz, st) {
  368. brikz.ensure("augments");
  369. var SmalltalkObject = brikz.ensure("root").Object;
  370. function SmalltalkOrganizer () {}
  371. function SmalltalkPackageOrganizer () {
  372. this.elements = [];
  373. }
  374. function SmalltalkClassOrganizer () {
  375. this.elements = [];
  376. }
  377. inherits(SmalltalkOrganizer, SmalltalkObject);
  378. inherits(SmalltalkPackageOrganizer, SmalltalkOrganizer);
  379. inherits(SmalltalkClassOrganizer, SmalltalkOrganizer);
  380. this.__init__ = function () {
  381. st.addPackage("Kernel-Infrastructure");
  382. st.wrapClassName("Organizer", "Kernel-Infrastructure", SmalltalkOrganizer, globals.Object, false);
  383. st.wrapClassName("PackageOrganizer", "Kernel-Infrastructure", SmalltalkPackageOrganizer, globals.Organizer, false);
  384. st.wrapClassName("ClassOrganizer", "Kernel-Infrastructure", SmalltalkClassOrganizer, globals.Organizer, false);
  385. };
  386. this.setupClassOrganization = function (klass) {
  387. klass.organization = new SmalltalkClassOrganizer();
  388. klass.organization.theClass = klass;
  389. };
  390. this.setupPackageOrganization = function (pkg) {
  391. pkg.organization = new SmalltalkPackageOrganizer();
  392. };
  393. this.addOrganizationElement = function (owner, element) {
  394. owner.organization.elements.addElement(element);
  395. };
  396. this.removeOrganizationElement = function (owner, element) {
  397. owner.organization.elements.removeElement(element);
  398. };
  399. }
  400. function DNUBrik(brikz, st) {
  401. brikz.ensure("selectorConversion");
  402. brikz.ensure("messageSend");
  403. var manip = brikz.ensure("manipulation");
  404. var rootAsClass = brikz.ensure("root").rootAsClass;
  405. /* Method not implemented handlers */
  406. var methods = [], methodDict = Object.create(null);
  407. this.selectors = [];
  408. this.jsSelectors = [];
  409. this.make = function (stSelector, targetClasses) {
  410. var method = methodDict[stSelector];
  411. if(method) return;
  412. var jsSelector = st.st2js(stSelector);
  413. this.selectors.push(stSelector);
  414. this.jsSelectors.push(jsSelector);
  415. method = {jsSelector: jsSelector, fn: createHandler(stSelector)};
  416. methodDict[stSelector] = method;
  417. methods.push(method);
  418. manip.installMethod(method, rootAsClass);
  419. targetClasses.forEach(function (target) {
  420. manip.installMethod(method, target);
  421. });
  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.installMethod = function (method, klass) {
  468. Object.defineProperty(klass.fn.prototype, method.jsSelector, {
  469. value: method.fn,
  470. enumerable: false, configurable: true, writable: true
  471. });
  472. };
  473. }
  474. function PackagesBrik(brikz, st) {
  475. var org = brikz.ensure("organize");
  476. var root = brikz.ensure("root");
  477. var nil = root.nil;
  478. var SmalltalkObject = root.Object;
  479. function SmalltalkPackage() {}
  480. inherits(SmalltalkPackage, SmalltalkObject);
  481. this.__init__ = function () {
  482. st.addPackage("Kernel-Infrastructure");
  483. st.wrapClassName("Package", "Kernel-Infrastructure", SmalltalkPackage, globals.Object, false);
  484. };
  485. st.packages = {};
  486. /* Smalltalk package creation. To add a Package, use smalltalk.addPackage() */
  487. function pkg(spec) {
  488. var that = new SmalltalkPackage();
  489. that.pkgName = spec.pkgName;
  490. org.setupPackageOrganization(that);
  491. that.properties = spec.properties || {};
  492. return that;
  493. }
  494. /* Add a package to the smalltalk.packages object, creating a new one if needed.
  495. If pkgName is null or empty we return nil, which is an allowed package for a class.
  496. If package already exists we still update the properties of it. */
  497. st.addPackage = function(pkgName, properties) {
  498. if(!pkgName) {return nil;}
  499. if(!(st.packages[pkgName])) {
  500. st.packages[pkgName] = pkg({
  501. pkgName: pkgName,
  502. properties: properties
  503. });
  504. } else {
  505. if(properties) {
  506. st.packages[pkgName].properties = properties;
  507. }
  508. }
  509. return st.packages[pkgName];
  510. };
  511. }
  512. function ClassesBrik(brikz, st) {
  513. var org = brikz.ensure("organize");
  514. var root = brikz.ensure("root");
  515. var classInit = brikz.ensure("classInit");
  516. var nil = root.nil;
  517. var rootAsClass = root.rootAsClass;
  518. var SmalltalkObject = root.Object;
  519. rootAsClass.klass = {fn: SmalltalkClass};
  520. function SmalltalkBehavior() {}
  521. function SmalltalkClass() {}
  522. function SmalltalkMetaclass() {}
  523. inherits(SmalltalkBehavior, SmalltalkObject);
  524. inherits(SmalltalkClass, SmalltalkBehavior);
  525. inherits(SmalltalkMetaclass, SmalltalkBehavior);
  526. SmalltalkMetaclass.prototype.meta = true;
  527. this.__init__ = function () {
  528. st.addPackage("Kernel-Classes");
  529. st.wrapClassName("Behavior", "Kernel-Classes", SmalltalkBehavior, globals.Object, false);
  530. st.wrapClassName("Metaclass", "Kernel-Classes", SmalltalkMetaclass, globals.Behavior, false);
  531. st.wrapClassName("Class", "Kernel-Classes", SmalltalkClass, globals.Behavior, false);
  532. // Manually bootstrap the metaclass hierarchy
  533. globals.ProtoObject.klass.superclass = rootAsClass.klass = globals.Class;
  534. addSubclass(globals.ProtoObject.klass);
  535. };
  536. /* Smalltalk classes */
  537. var classes = [];
  538. var wrappedClasses = [];
  539. /* Smalltalk class creation. A class is an instance of an automatically
  540. created metaclass object. Newly created classes (not their metaclass)
  541. should be added to the smalltalk object, see smalltalk.addClass().
  542. Superclass linking is *not* handled here, see smalltalk.init() */
  543. function klass(spec) {
  544. spec = spec || {};
  545. var setSuperClass = spec.superclass;
  546. if(!spec.superclass) {
  547. spec.superclass = rootAsClass;
  548. }
  549. var meta = metaclass(spec);
  550. var that = meta.instanceClass;
  551. that.superclass = setSuperClass;
  552. that.fn = spec.fn || inherits(function () {}, spec.superclass.fn);
  553. that.subclasses = [];
  554. setupClass(that, spec);
  555. that.className = spec.className;
  556. that.wrapped = spec.wrapped || false;
  557. meta.className = spec.className + ' class';
  558. meta.superclass = spec.superclass.klass;
  559. return that;
  560. }
  561. function metaclass(spec) {
  562. spec = spec || {};
  563. var that = new SmalltalkMetaclass();
  564. that.fn = inherits(function () {}, spec.superclass.klass.fn);
  565. that.instanceClass = new that.fn();
  566. setupClass(that);
  567. return that;
  568. }
  569. SmalltalkBehavior.prototype.toString = function () {
  570. return 'Smalltalk ' + this.className;
  571. };
  572. function wireKlass(klass) {
  573. Object.defineProperty(klass.fn.prototype, "klass", {
  574. value: klass,
  575. enumerable: false, configurable: true, writable: true
  576. });
  577. }
  578. function setupClass(klass, spec) {
  579. spec = spec || {};
  580. klass.iVarNames = spec.iVarNames || [];
  581. klass.pkg = spec.pkg;
  582. org.setupClassOrganization(klass);
  583. Object.defineProperty(klass, "methods", {
  584. value: Object.create(null),
  585. enumerable: false, configurable: true, writable: true
  586. });
  587. wireKlass(klass);
  588. }
  589. /* Add a class to the smalltalk object, creating a new one if needed.
  590. A Package is lazily created if it does not exist with given name. */
  591. st.addClass = function(className, superclass, iVarNames, pkgName) {
  592. // While subclassing nil is allowed, it might be an error, so
  593. // warn about it.
  594. if (typeof superclass == 'undefined' || superclass == nil) {
  595. console.warn('Compiling ' + className + ' as a subclass of `nil`. A dependency might be missing.');
  596. }
  597. rawAddClass(pkgName, className, superclass, iVarNames, false, null);
  598. };
  599. function rawAddClass(pkgName, className, superclass, iVarNames, wrapped, fn) {
  600. var pkg = st.packages[pkgName];
  601. if (!pkg) {
  602. throw new Error("Missing package "+pkgName);
  603. }
  604. if (!superclass || superclass == nil) { superclass = null; }
  605. if(globals[className] && globals[className].superclass == superclass) {
  606. // globals[className].superclass = superclass;
  607. globals[className].iVarNames = iVarNames || [];
  608. if (pkg) globals[className].pkg = pkg;
  609. if (fn) {
  610. fn.prototype = globals[className].fn.prototype;
  611. globals[className].fn = fn;
  612. fn.prototype.constructor = fn;
  613. }
  614. } else {
  615. if(globals[className]) {
  616. st.removeClass(globals[className]);
  617. }
  618. globals[className] = klass({
  619. className: className,
  620. superclass: superclass,
  621. pkg: pkg,
  622. iVarNames: iVarNames,
  623. fn: fn,
  624. wrapped: wrapped
  625. });
  626. addSubclass(globals[className]);
  627. }
  628. classes.addElement(globals[className]);
  629. org.addOrganizationElement(pkg, globals[className]);
  630. }
  631. st.removeClass = function(klass) {
  632. org.removeOrganizationElement(klass.pkg, klass);
  633. classes.removeElement(klass);
  634. removeSubclass(klass);
  635. delete globals[klass.className];
  636. };
  637. function addSubclass(klass) {
  638. if(klass.superclass) {
  639. klass.superclass.subclasses.addElement(klass);
  640. }
  641. }
  642. function removeSubclass(klass) {
  643. if(klass.superclass) {
  644. klass.superclass.subclasses.removeElement(klass);
  645. }
  646. }
  647. /* Create a new class wrapping a JavaScript constructor, and add it to the
  648. global smalltalk object. Package is lazily created if it does not exist with given name. */
  649. st.wrapClassName = function(className, pkgName, fn, superclass, wrapped) {
  650. wrapped = wrapped !== false;
  651. rawAddClass(pkgName, className, superclass, globals[className] && globals[className].iVarNames, wrapped, fn);
  652. if(wrapped) {
  653. wrappedClasses.addElement(globals[className]);
  654. }
  655. };
  656. /* Manually set the constructor of an existing Smalltalk klass, making it a wrapped class. */
  657. st.setClassConstructor = function(klass, constructor) {
  658. wrappedClasses.addElement(klass);
  659. klass.wrapped = true;
  660. klass.fn = constructor;
  661. // The fn property changed. We need to add back the klass property to the prototype
  662. wireKlass(klass);
  663. classInit.initClass(klass);
  664. };
  665. /* Create an alias for an existing class */
  666. st.alias = function(klass, alias) {
  667. globals[alias] = klass;
  668. };
  669. /* Answer all registered Smalltalk classes */
  670. //TODO: remove the function and make smalltalk.classes an array
  671. st.classes = function() {
  672. return classes;
  673. };
  674. st.wrappedClasses = function() {
  675. return wrappedClasses;
  676. };
  677. // Still used, but could go away now that subclasses are stored
  678. // into classes directly.
  679. st.allSubclasses = function(klass) {
  680. return klass._allSubclasses();
  681. };
  682. }
  683. function MethodsBrik(brikz, st) {
  684. var manip = brikz.ensure("manipulation");
  685. var org = brikz.ensure("organize");
  686. var stInit = brikz.ensure("stInit");
  687. var dnu = brikz.ensure("dnu");
  688. var SmalltalkObject = brikz.ensure("root").Object;
  689. brikz.ensure("selectorConversion");
  690. brikz.ensure("classes");
  691. function SmalltalkMethod() {}
  692. inherits(SmalltalkMethod, SmalltalkObject);
  693. this.__init__ = function () {
  694. st.addPackage("Kernel-Methods");
  695. st.wrapClassName("CompiledMethod", "Kernel-Methods", SmalltalkMethod, globals.Object, false);
  696. };
  697. /* Smalltalk method object. To add a method to a class,
  698. use smalltalk.addMethod() */
  699. st.method = function(spec) {
  700. var that = new SmalltalkMethod();
  701. that.selector = spec.selector;
  702. that.jsSelector = spec.jsSelector;
  703. that.args = spec.args || {};
  704. that.protocol = spec.protocol;
  705. that.source = spec.source;
  706. that.messageSends = spec.messageSends || [];
  707. that.referencedClasses = spec.referencedClasses || [];
  708. that.fn = spec.fn;
  709. return that;
  710. };
  711. function ensureJsSelector(method) {
  712. if (!(method.jsSelector)) {
  713. method.jsSelector = st.st2js(method.selector);
  714. }
  715. }
  716. /* Add/remove a method to/from a class */
  717. st.addMethod = function (method, klass) {
  718. ensureJsSelector(method);
  719. manip.installMethod(method, klass);
  720. klass.methods[method.selector] = method;
  721. method.methodClass = klass;
  722. // During the bootstrap, #addCompiledMethod is not used.
  723. // Therefore we populate the organizer here too
  724. org.addOrganizationElement(klass, method.protocol);
  725. propagateMethodChange(klass, method);
  726. var usedSelectors = method.messageSends,
  727. targetClasses = stInit.initialized() ? st.wrappedClasses() : [];
  728. dnu.make(method.selector, targetClasses);
  729. for(var i=0; i<usedSelectors.length; i++) {
  730. dnu.make(usedSelectors[i], targetClasses);
  731. }
  732. };
  733. function propagateMethodChange(klass, method) {
  734. // If already initialized (else it will be done later anyway),
  735. // re-initialize all subclasses to ensure the method change
  736. // propagation (for wrapped classes, not using the prototype
  737. // chain).
  738. if (stInit.initialized()) {
  739. st.allSubclasses(klass).forEach(function (subclass) {
  740. initMethodInClass(subclass, method);
  741. });
  742. }
  743. }
  744. function initMethodInClass (klass, method) {
  745. if (klass.wrapped && !klass.methods[method.selector]) {
  746. var jsSelector = method.jsSelector;
  747. manip.installMethod({
  748. jsSelector: jsSelector,
  749. fn: klass.superclass.fn.prototype[jsSelector]
  750. }, klass);
  751. }
  752. }
  753. st.removeMethod = function(method, klass) {
  754. if (klass !== method.methodClass) {
  755. throw new Error(
  756. "Refusing to remove method " +
  757. method.methodClass.className + ">>" + method.selector +
  758. " from different class " +
  759. klass.className);
  760. }
  761. ensureJsSelector(method);
  762. delete klass.fn.prototype[method.jsSelector];
  763. delete klass.methods[method.selector];
  764. initMethodInClass(klass, method);
  765. propagateMethodChange(klass, method);
  766. // Do *not* delete protocols from here.
  767. // This is handled by #removeCompiledMethod
  768. };
  769. /* Answer all method selectors based on dnu handlers */
  770. st.allSelectors = function() {
  771. return dnu.selectors;
  772. };
  773. }
  774. function AugmentsBrik(brikz, st) {
  775. /* Array extensions */
  776. Array.prototype.addElement = function(el) {
  777. if(typeof el === 'undefined') { return; }
  778. if(this.indexOf(el) == -1) {
  779. this.push(el);
  780. }
  781. };
  782. Array.prototype.removeElement = function(el) {
  783. var i = this.indexOf(el);
  784. if (i !== -1) { this.splice(i, 1); }
  785. };
  786. }
  787. function SmalltalkInitBrik(brikz, st) {
  788. brikz.ensure("classInit");
  789. brikz.ensure("classes");
  790. var initialized = false;
  791. /* Smalltalk initialization. Called on page load */
  792. st.initialize = function() {
  793. if(initialized) { return; }
  794. st.classes().forEach(function(klass) {
  795. st.init(klass);
  796. });
  797. runnable();
  798. st.classes().forEach(function(klass) {
  799. klass._initialize();
  800. });
  801. initialized = true;
  802. };
  803. this.initialized = function () {
  804. return initialized;
  805. };
  806. this.__init__ = function () {
  807. st.addPackage("Kernel-Methods");
  808. st.wrapClassName("Number", "Kernel-Objects", Number, globals.Object);
  809. st.wrapClassName("BlockClosure", "Kernel-Methods", Function, globals.Object);
  810. st.wrapClassName("Boolean", "Kernel-Objects", Boolean, globals.Object);
  811. st.wrapClassName("Date", "Kernel-Objects", Date, globals.Object);
  812. st.addPackage("Kernel-Collections");
  813. st.addClass("Collection", globals.Object, null, "Kernel-Collections");
  814. st.addClass("IndexableCollection", globals.Collection, null, "Kernel-Collections");
  815. st.addClass("SequenceableCollection", globals.IndexableCollection, null, "Kernel-Collections");
  816. st.addClass("CharacterArray", globals.SequenceableCollection, null, "Kernel-Collections");
  817. st.wrapClassName("String", "Kernel-Collections", String, globals.CharacterArray);
  818. st.wrapClassName("Array", "Kernel-Collections", Array, globals.SequenceableCollection);
  819. st.wrapClassName("RegularExpression", "Kernel-Collections", RegExp, globals.Object);
  820. st.addPackage("Kernel-Exceptions");
  821. st.wrapClassName("Error", "Kernel-Exceptions", Error, globals.Object);
  822. /* Alias definitions */
  823. st.alias(globals.Array, "OrderedCollection");
  824. st.alias(globals.Date, "Time");
  825. };
  826. }
  827. function PrimitivesBrik(brikz, st) {
  828. /* Unique ID number generator */
  829. var oid = 0;
  830. st.nextId = function() {
  831. oid += 1;
  832. return oid;
  833. };
  834. /* Converts a JavaScript object to valid Smalltalk Object */
  835. st.readJSObject = function(js) {
  836. var readObject = js.constructor === Object;
  837. var readArray = js.constructor === Array;
  838. var object = readObject ? globals.Dictionary._new() : readArray ? [] : js;
  839. for(var i in js) {
  840. if(readObject) {
  841. object._at_put_(i, st.readJSObject(js[i]));
  842. }
  843. if(readArray) {
  844. object[i] = st.readJSObject(js[i]);
  845. }
  846. }
  847. return object;
  848. };
  849. /* Boolean assertion */
  850. st.assert = function(shouldBeBoolean) {
  851. if (typeof shouldBeBoolean === "boolean") return shouldBeBoolean;
  852. else if (shouldBeBoolean != null && typeof shouldBeBoolean === "object") {
  853. shouldBeBoolean = shouldBeBoolean.valueOf();
  854. if (typeof shouldBeBoolean === "boolean") return shouldBeBoolean;
  855. }
  856. globals.NonBooleanReceiver._new()._object_(shouldBeBoolean)._signal();
  857. };
  858. /* List of all reserved words in JavaScript. They may not be used as variables
  859. in Smalltalk. */
  860. // list of reserved JavaScript keywords as of
  861. // http://es5.github.com/#x7.6.1.1
  862. // and
  863. // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.6.1
  864. st.reservedWords = ['break', 'case', 'catch', 'continue', 'debugger',
  865. 'default', 'delete', 'do', 'else', 'finally', 'for', 'function',
  866. 'if', 'in', 'instanceof', 'new', 'return', 'switch', 'this', 'throw',
  867. 'try', 'typeof', 'var', 'void', 'while', 'with',
  868. // Amber protected words: these should not be compiled as-is when in code
  869. 'arguments',
  870. // ES5: future use: http://es5.github.com/#x7.6.1.2
  871. 'class', 'const', 'enum', 'export', 'extends', 'import', 'super',
  872. // ES5: future use in strict mode
  873. 'implements', 'interface', 'let', 'package', 'private', 'protected',
  874. 'public', 'static', 'yield'];
  875. st.globalJsVariables = ['window', 'document', 'process', 'global'];
  876. }
  877. function RuntimeBrik(brikz, st) {
  878. brikz.ensure("selectorConversion");
  879. var root = brikz.ensure("root");
  880. var nil = root.nil;
  881. var SmalltalkObject = root.Object;
  882. function SmalltalkMethodContext(home, setup) {
  883. this.sendIdx = {};
  884. this.homeContext = home;
  885. this.setup = setup || function() {};
  886. this.supercall = false;
  887. }
  888. inherits(SmalltalkMethodContext, SmalltalkObject);
  889. this.__init__ = function () {
  890. st.addPackage("Kernel-Methods");
  891. st.wrapClassName("MethodContext", "Kernel-Methods", SmalltalkMethodContext, globals.Object, false);
  892. // Fallbacks
  893. SmalltalkMethodContext.prototype.locals = {};
  894. SmalltalkMethodContext.prototype.receiver = null;
  895. SmalltalkMethodContext.prototype.selector = null;
  896. SmalltalkMethodContext.prototype.lookupClass = null;
  897. SmalltalkMethodContext.prototype.fill = function(receiver, selector, locals, lookupClass) {
  898. this.receiver = receiver;
  899. this.selector = selector;
  900. this.locals = locals || {};
  901. this.lookupClass = lookupClass;
  902. if(this.homeContext) {
  903. this.homeContext.evaluatedSelector = selector;
  904. }
  905. };
  906. SmalltalkMethodContext.prototype.fillBlock = function(locals, ctx, index) {
  907. this.locals = locals || {};
  908. this.outerContext = ctx;
  909. this.index = index || 0;
  910. };
  911. SmalltalkMethodContext.prototype.init = function() {
  912. var home = this.homeContext;
  913. if(home) {
  914. home.init();
  915. }
  916. this.setup(this);
  917. };
  918. SmalltalkMethodContext.prototype.method = function() {
  919. var method;
  920. var lookup = this.lookupClass || this.receiver.klass;
  921. while(!method && lookup) {
  922. method = lookup.methods[st.js2st(this.selector)];
  923. lookup = lookup.superclass;
  924. }
  925. return method;
  926. };
  927. };
  928. /* This is the current call context object. While it is publicly available,
  929. Use smalltalk.getThisContext() instead which will answer a safe copy of
  930. the current context */
  931. var thisContext = null;
  932. st.withContext = function(worker, setup) {
  933. if(thisContext) {
  934. return inContext(worker, setup);
  935. } else {
  936. return inContextWithErrorHandling(worker, setup);
  937. }
  938. };
  939. function inContextWithErrorHandling(worker, setup) {
  940. try {
  941. return inContext(worker, setup);
  942. } catch (error) {
  943. handleError(error);
  944. thisContext = null;
  945. // Rethrow the error in any case.
  946. error.amberHandled = true;
  947. throw error;
  948. }
  949. }
  950. function inContext(worker, setup) {
  951. var oldContext = thisContext;
  952. thisContext = new SmalltalkMethodContext(thisContext, setup);
  953. var result = worker(thisContext);
  954. thisContext = oldContext;
  955. return result;
  956. }
  957. /* Wrap a JavaScript exception in a Smalltalk Exception.
  958. In case of a RangeError, stub the stack after 100 contexts to
  959. avoid another RangeError later when the stack is manipulated. */
  960. function wrappedError(error) {
  961. var errorWrapper = globals.JavaScriptException._on_(error);
  962. // Add the error to the context, so it is visible in the stack
  963. try { errorWrapper._signal(); } catch (ex) {}
  964. var context = st.getThisContext();
  965. if(isRangeError(error)) {
  966. stubContextStack(context);
  967. }
  968. errorWrapper._context_(context);
  969. return errorWrapper;
  970. }
  971. /* Stub the context stack after 100 contexts */
  972. function stubContextStack(context) {
  973. var currentContext = context;
  974. var contexts = 0;
  975. while(contexts < 100) {
  976. if(currentContext) {
  977. currentContext = currentContext.homeContext;
  978. }
  979. contexts++;
  980. }
  981. if(currentContext) {
  982. currentContext.homeContext = undefined;
  983. }
  984. }
  985. function isRangeError(error) {
  986. return error instanceof RangeError;
  987. }
  988. /* Handles Smalltalk errors. Triggers the registered ErrorHandler
  989. (See the Smalltalk class ErrorHandler and its subclasses */
  990. function handleError(error) {
  991. if (!error.smalltalkError) {
  992. error = wrappedError(error);
  993. }
  994. globals.ErrorHandler._handleError_(error);
  995. }
  996. /* Handle thisContext pseudo variable */
  997. st.getThisContext = function() {
  998. if(thisContext) {
  999. thisContext.init();
  1000. return thisContext;
  1001. } else {
  1002. return nil;
  1003. }
  1004. };
  1005. }
  1006. function MessageSendBrik(brikz, st) {
  1007. brikz.ensure("selectorConversion");
  1008. var nil = brikz.ensure("root").nil;
  1009. /* Handles unhandled errors during message sends */
  1010. // simply send the message and handle #dnu:
  1011. st.send = function(receiver, jsSelector, args, klass) {
  1012. var method;
  1013. if(receiver == null) {
  1014. receiver = nil;
  1015. }
  1016. method = klass ? klass.fn.prototype[jsSelector] : receiver.klass && receiver[jsSelector];
  1017. if(method) {
  1018. return method.apply(receiver, args || []);
  1019. } else {
  1020. return messageNotUnderstood(receiver, st.js2st(jsSelector), args);
  1021. }
  1022. };
  1023. function invokeDnuMethod(receiver, stSelector, args) {
  1024. return receiver._doesNotUnderstand_(
  1025. globals.Message._new()
  1026. ._selector_(stSelector)
  1027. ._arguments_([].slice.call(args))
  1028. );
  1029. }
  1030. /* Handles #dnu: *and* JavaScript method calls.
  1031. if the receiver has no klass, we consider it a JS object (outside of the
  1032. Amber system). Else assume that the receiver understands #doesNotUnderstand: */
  1033. function messageNotUnderstood(receiver, stSelector, args) {
  1034. if (receiver.klass != null && !receiver.allowJavaScriptCalls) {
  1035. return invokeDnuMethod(receiver, stSelector, args);
  1036. }
  1037. /* Call a method of a JS object, or answer a property if it exists.
  1038. Else try wrapping a JSObjectProxy around the receiver. */
  1039. var propertyName = st.st2prop(stSelector);
  1040. if (!(propertyName in receiver)) {
  1041. return invokeDnuMethod(globals.JSObjectProxy._on_(receiver), stSelector, args);
  1042. }
  1043. return accessJavaScript(receiver, propertyName, args);
  1044. }
  1045. /* If the object property is a function, then call it, except if it starts with
  1046. an uppercase character (we probably want to answer the function itself in this
  1047. case and send it #new from Amber).
  1048. Converts keyword-based selectors by using the first
  1049. keyword only, but keeping all message arguments.
  1050. Example:
  1051. "self do: aBlock with: anObject" -> "self.do(aBlock, anObject)" */
  1052. function accessJavaScript(receiver, propertyName, args) {
  1053. var propertyValue = receiver[propertyName];
  1054. if (typeof propertyValue === "function" && !/^[A-Z]/.test(propertyName)) {
  1055. return propertyValue.apply(receiver, args || []);
  1056. } else if (args.length > 0) {
  1057. receiver[propertyName] = args[0];
  1058. return nil;
  1059. } else {
  1060. return propertyValue;
  1061. }
  1062. }
  1063. st.accessJavaScript = accessJavaScript;
  1064. this.messageNotUnderstood = messageNotUnderstood;
  1065. }
  1066. function SelectorConversionBrik(brikz, st) {
  1067. /* Convert a Smalltalk selector into a JS selector */
  1068. st.st2js = function(string) {
  1069. var selector = '_' + string;
  1070. selector = selector.replace(/:/g, '_');
  1071. selector = selector.replace(/[\&]/g, '_and');
  1072. selector = selector.replace(/[\|]/g, '_or');
  1073. selector = selector.replace(/[+]/g, '_plus');
  1074. selector = selector.replace(/-/g, '_minus');
  1075. selector = selector.replace(/[*]/g ,'_star');
  1076. selector = selector.replace(/[\/]/g ,'_slash');
  1077. selector = selector.replace(/[\\]/g ,'_backslash');
  1078. selector = selector.replace(/[\~]/g ,'_tild');
  1079. selector = selector.replace(/>/g ,'_gt');
  1080. selector = selector.replace(/</g ,'_lt');
  1081. selector = selector.replace(/=/g ,'_eq');
  1082. selector = selector.replace(/,/g ,'_comma');
  1083. selector = selector.replace(/[@]/g ,'_at');
  1084. return selector;
  1085. };
  1086. /* Convert a string to a valid smalltalk selector.
  1087. if you modify the following functions, also change st2js
  1088. accordingly */
  1089. st.js2st = function(selector) {
  1090. if(selector.match(/__/)) {
  1091. return binaryJsToSt(selector);
  1092. } else {
  1093. return keywordJsToSt(selector);
  1094. }
  1095. };
  1096. function keywordJsToSt(selector) {
  1097. return selector.replace(/^_/, '').replace(/_/g, ':');
  1098. }
  1099. function binaryJsToSt(selector) {
  1100. return selector
  1101. .replace(/^_/, '')
  1102. .replace(/_and/g, '&')
  1103. .replace(/_or/g, '|')
  1104. .replace(/_plus/g, '+')
  1105. .replace(/_minus/g, '-')
  1106. .replace(/_star/g, '*')
  1107. .replace(/_slash/g, '/')
  1108. .replace(/_backslash/g, '\\')
  1109. .replace(/_tild/g, '~')
  1110. .replace(/_gt/g, '>')
  1111. .replace(/_lt/g, '<')
  1112. .replace(/_eq/g, '=')
  1113. .replace(/_comma/g, ',')
  1114. .replace(/_at/g, '@');
  1115. }
  1116. st.st2prop = function (stSelector) {
  1117. var colonPosition = stSelector.indexOf(':');
  1118. return colonPosition === -1 ? stSelector : stSelector.slice(0, colonPosition);
  1119. };
  1120. }
  1121. /* Adds AMD and requirejs related methods to the smalltalk object */
  1122. function AMDBrik(brikz, st) {
  1123. this.__init__ = function () {
  1124. st.amdRequire = require;
  1125. st.defaultTransportType = st.defaultTransportType || "amd";
  1126. st.defaultAmdNamespace = st.defaultAmdNamespace || "amber_core";
  1127. };
  1128. }
  1129. /* Defines asReceiver to be present at load time */
  1130. /* (logically it belongs more to PrimitiveBrik) */
  1131. function AsReceiverBrik(brikz, st) {
  1132. var nil = brikz.ensure("root").nil;
  1133. /**
  1134. * This function is used all over the compiled amber code.
  1135. * It takes any value (JavaScript or Smalltalk)
  1136. * and returns a proper Amber Smalltalk receiver.
  1137. *
  1138. * null or undefined -> nil,
  1139. * plain JS object -> wrapped JS object,
  1140. * otherwise unchanged
  1141. */
  1142. this.asReceiver = function (o) {
  1143. if (o == null) return nil;
  1144. if (typeof o === "object" || typeof o === "function") {
  1145. return o.klass != null ? o : globals.JSObjectProxy._on_(o);
  1146. }
  1147. // IMPORTANT: This optimization (return o if typeof !== "object")
  1148. // assumes all primitive types are wrapped by some Smalltalk class
  1149. // so they can be returned as-is, without boxing and looking for .klass.
  1150. // KEEP THE primitives-are-wrapped INVARIANT!
  1151. return o;
  1152. };
  1153. }
  1154. /* Making smalltalk that can load */
  1155. brikz.root = RootBrik;
  1156. brikz.dnu = DNUBrik;
  1157. brikz.organize = OrganizeBrik;
  1158. brikz.selectorConversion = SelectorConversionBrik;
  1159. brikz.classInit = ClassInitBrik;
  1160. brikz.manipulation = ManipulationBrik;
  1161. brikz.packages = PackagesBrik;
  1162. brikz.classes = ClassesBrik;
  1163. brikz.methods = MethodsBrik;
  1164. brikz.stInit = SmalltalkInitBrik;
  1165. brikz.augments = AugmentsBrik;
  1166. brikz.asReceiver = AsReceiverBrik;
  1167. brikz.amd = AMDBrik;
  1168. brikz.rebuild();
  1169. /* Making smalltalk that can run */
  1170. function runnable () {
  1171. brikz.messageSend = MessageSendBrik;
  1172. brikz.runtime = RuntimeBrik;
  1173. brikz.primitives = PrimitivesBrik;
  1174. brikz.rebuild();
  1175. }
  1176. return { api: api, nil: brikz.root.nil, globals: globals, asReceiver: brikz.asReceiver.asReceiver };
  1177. });
  1178. define("amber_core/Kernel-Objects", ["amber/boot"], function($boot){
  1179. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  1180. $core.addPackage('Kernel-Objects');
  1181. $core.packages["Kernel-Objects"].innerEval = function (expr) { return eval(expr); };
  1182. $core.packages["Kernel-Objects"].transport = {"type":"amd","amdNamespace":"amber_core"};
  1183. $core.addClass('ProtoObject', null, [], 'Kernel-Objects');
  1184. //>>excludeStart("ide", pragmas.excludeIdeData);
  1185. $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.";
  1186. //>>excludeEnd("ide");
  1187. $core.addMethod(
  1188. $core.method({
  1189. selector: "=",
  1190. protocol: 'comparing',
  1191. fn: function (anObject){
  1192. var self=this;
  1193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1194. return $core.withContext(function($ctx1) {
  1195. //>>excludeEnd("ctx");
  1196. var $1;
  1197. $1=self.__eq_eq(anObject);
  1198. return $1;
  1199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1200. }, function($ctx1) {$ctx1.fill(self,"=",{anObject:anObject},$globals.ProtoObject)});
  1201. //>>excludeEnd("ctx");
  1202. },
  1203. //>>excludeStart("ide", pragmas.excludeIdeData);
  1204. args: ["anObject"],
  1205. source: "= anObject\x0a\x09^ self == anObject",
  1206. referencedClasses: [],
  1207. //>>excludeEnd("ide");
  1208. messageSends: ["=="]
  1209. }),
  1210. $globals.ProtoObject);
  1211. $core.addMethod(
  1212. $core.method({
  1213. selector: "==",
  1214. protocol: 'comparing',
  1215. fn: function (anObject){
  1216. var self=this;
  1217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1218. return $core.withContext(function($ctx1) {
  1219. //>>excludeEnd("ctx");
  1220. var $2,$1;
  1221. $2=self._identityHash();
  1222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1223. $ctx1.sendIdx["identityHash"]=1;
  1224. //>>excludeEnd("ctx");
  1225. $1=$recv($2).__eq($recv(anObject)._identityHash());
  1226. return $1;
  1227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1228. }, function($ctx1) {$ctx1.fill(self,"==",{anObject:anObject},$globals.ProtoObject)});
  1229. //>>excludeEnd("ctx");
  1230. },
  1231. //>>excludeStart("ide", pragmas.excludeIdeData);
  1232. args: ["anObject"],
  1233. source: "== anObject\x0a\x09^ self identityHash = anObject identityHash",
  1234. referencedClasses: [],
  1235. //>>excludeEnd("ide");
  1236. messageSends: ["=", "identityHash"]
  1237. }),
  1238. $globals.ProtoObject);
  1239. $core.addMethod(
  1240. $core.method({
  1241. selector: "asString",
  1242. protocol: 'converting',
  1243. fn: function (){
  1244. var self=this;
  1245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1246. return $core.withContext(function($ctx1) {
  1247. //>>excludeEnd("ctx");
  1248. var $1;
  1249. $1=self._printString();
  1250. return $1;
  1251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1252. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.ProtoObject)});
  1253. //>>excludeEnd("ctx");
  1254. },
  1255. //>>excludeStart("ide", pragmas.excludeIdeData);
  1256. args: [],
  1257. source: "asString\x0a\x09^ self printString",
  1258. referencedClasses: [],
  1259. //>>excludeEnd("ide");
  1260. messageSends: ["printString"]
  1261. }),
  1262. $globals.ProtoObject);
  1263. $core.addMethod(
  1264. $core.method({
  1265. selector: "class",
  1266. protocol: 'accessing',
  1267. fn: function (){
  1268. var self=this;
  1269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1270. return $core.withContext(function($ctx1) {
  1271. //>>excludeEnd("ctx");
  1272. return self.klass;
  1273. return self;
  1274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1275. }, function($ctx1) {$ctx1.fill(self,"class",{},$globals.ProtoObject)});
  1276. //>>excludeEnd("ctx");
  1277. },
  1278. //>>excludeStart("ide", pragmas.excludeIdeData);
  1279. args: [],
  1280. source: "class\x0a\x09<return self.klass>",
  1281. referencedClasses: [],
  1282. //>>excludeEnd("ide");
  1283. messageSends: []
  1284. }),
  1285. $globals.ProtoObject);
  1286. $core.addMethod(
  1287. $core.method({
  1288. selector: "doesNotUnderstand:",
  1289. protocol: 'error handling',
  1290. fn: function (aMessage){
  1291. var self=this;
  1292. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  1293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1294. return $core.withContext(function($ctx1) {
  1295. //>>excludeEnd("ctx");
  1296. var $1,$2;
  1297. $1=$recv($MessageNotUnderstood())._new();
  1298. $recv($1)._receiver_(self);
  1299. $recv($1)._message_(aMessage);
  1300. $2=$recv($1)._signal();
  1301. return self;
  1302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1303. }, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage},$globals.ProtoObject)});
  1304. //>>excludeEnd("ctx");
  1305. },
  1306. //>>excludeStart("ide", pragmas.excludeIdeData);
  1307. args: ["aMessage"],
  1308. source: "doesNotUnderstand: aMessage\x0a\x09MessageNotUnderstood new\x0a\x09\x09receiver: self;\x0a\x09\x09message: aMessage;\x0a\x09\x09signal",
  1309. referencedClasses: ["MessageNotUnderstood"],
  1310. //>>excludeEnd("ide");
  1311. messageSends: ["receiver:", "new", "message:", "signal"]
  1312. }),
  1313. $globals.ProtoObject);
  1314. $core.addMethod(
  1315. $core.method({
  1316. selector: "evaluate:on:",
  1317. protocol: 'evaluating',
  1318. fn: function (aString,anEvaluator){
  1319. var self=this;
  1320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1321. return $core.withContext(function($ctx1) {
  1322. //>>excludeEnd("ctx");
  1323. var $1;
  1324. $1=$recv(anEvaluator)._evaluate_receiver_(aString,self);
  1325. return $1;
  1326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1327. }, function($ctx1) {$ctx1.fill(self,"evaluate:on:",{aString:aString,anEvaluator:anEvaluator},$globals.ProtoObject)});
  1328. //>>excludeEnd("ctx");
  1329. },
  1330. //>>excludeStart("ide", pragmas.excludeIdeData);
  1331. args: ["aString", "anEvaluator"],
  1332. source: "evaluate: aString on: anEvaluator\x0a\x09^ anEvaluator evaluate: aString receiver: self",
  1333. referencedClasses: [],
  1334. //>>excludeEnd("ide");
  1335. messageSends: ["evaluate:receiver:"]
  1336. }),
  1337. $globals.ProtoObject);
  1338. $core.addMethod(
  1339. $core.method({
  1340. selector: "identityHash",
  1341. protocol: 'accessing',
  1342. fn: function (){
  1343. var self=this;
  1344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1345. return $core.withContext(function($ctx1) {
  1346. //>>excludeEnd("ctx");
  1347. var hash=self.identityHash;
  1348. if (hash) return hash;
  1349. hash=$core.nextId();
  1350. Object.defineProperty(self, 'identityHash', {value:hash});
  1351. return hash;
  1352. ;
  1353. return self;
  1354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1355. }, function($ctx1) {$ctx1.fill(self,"identityHash",{},$globals.ProtoObject)});
  1356. //>>excludeEnd("ctx");
  1357. },
  1358. //>>excludeStart("ide", pragmas.excludeIdeData);
  1359. args: [],
  1360. 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>",
  1361. referencedClasses: [],
  1362. //>>excludeEnd("ide");
  1363. messageSends: []
  1364. }),
  1365. $globals.ProtoObject);
  1366. $core.addMethod(
  1367. $core.method({
  1368. selector: "ifNil:",
  1369. protocol: 'testing',
  1370. fn: function (aBlock){
  1371. var self=this;
  1372. return self;
  1373. },
  1374. //>>excludeStart("ide", pragmas.excludeIdeData);
  1375. args: ["aBlock"],
  1376. source: "ifNil: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self",
  1377. referencedClasses: [],
  1378. //>>excludeEnd("ide");
  1379. messageSends: []
  1380. }),
  1381. $globals.ProtoObject);
  1382. $core.addMethod(
  1383. $core.method({
  1384. selector: "ifNil:ifNotNil:",
  1385. protocol: 'testing',
  1386. fn: function (aBlock,anotherBlock){
  1387. var self=this;
  1388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1389. return $core.withContext(function($ctx1) {
  1390. //>>excludeEnd("ctx");
  1391. var $1;
  1392. $1=$recv(anotherBlock)._value_(self);
  1393. return $1;
  1394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1395. }, function($ctx1) {$ctx1.fill(self,"ifNil:ifNotNil:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.ProtoObject)});
  1396. //>>excludeEnd("ctx");
  1397. },
  1398. //>>excludeStart("ide", pragmas.excludeIdeData);
  1399. args: ["aBlock", "anotherBlock"],
  1400. source: "ifNil: aBlock ifNotNil: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ anotherBlock value: self",
  1401. referencedClasses: [],
  1402. //>>excludeEnd("ide");
  1403. messageSends: ["value:"]
  1404. }),
  1405. $globals.ProtoObject);
  1406. $core.addMethod(
  1407. $core.method({
  1408. selector: "ifNotNil:",
  1409. protocol: 'testing',
  1410. fn: function (aBlock){
  1411. var self=this;
  1412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1413. return $core.withContext(function($ctx1) {
  1414. //>>excludeEnd("ctx");
  1415. var $1;
  1416. $1=$recv(aBlock)._value_(self);
  1417. return $1;
  1418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1419. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:",{aBlock:aBlock},$globals.ProtoObject)});
  1420. //>>excludeEnd("ctx");
  1421. },
  1422. //>>excludeStart("ide", pragmas.excludeIdeData);
  1423. args: ["aBlock"],
  1424. source: "ifNotNil: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ aBlock value: self",
  1425. referencedClasses: [],
  1426. //>>excludeEnd("ide");
  1427. messageSends: ["value:"]
  1428. }),
  1429. $globals.ProtoObject);
  1430. $core.addMethod(
  1431. $core.method({
  1432. selector: "ifNotNil:ifNil:",
  1433. protocol: 'testing',
  1434. fn: function (aBlock,anotherBlock){
  1435. var self=this;
  1436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1437. return $core.withContext(function($ctx1) {
  1438. //>>excludeEnd("ctx");
  1439. var $1;
  1440. $1=$recv(aBlock)._value_(self);
  1441. return $1;
  1442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1443. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:ifNil:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.ProtoObject)});
  1444. //>>excludeEnd("ctx");
  1445. },
  1446. //>>excludeStart("ide", pragmas.excludeIdeData);
  1447. args: ["aBlock", "anotherBlock"],
  1448. source: "ifNotNil: aBlock ifNil: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ aBlock value: self",
  1449. referencedClasses: [],
  1450. //>>excludeEnd("ide");
  1451. messageSends: ["value:"]
  1452. }),
  1453. $globals.ProtoObject);
  1454. $core.addMethod(
  1455. $core.method({
  1456. selector: "initialize",
  1457. protocol: 'initialization',
  1458. fn: function (){
  1459. var self=this;
  1460. return self;
  1461. },
  1462. //>>excludeStart("ide", pragmas.excludeIdeData);
  1463. args: [],
  1464. source: "initialize",
  1465. referencedClasses: [],
  1466. //>>excludeEnd("ide");
  1467. messageSends: []
  1468. }),
  1469. $globals.ProtoObject);
  1470. $core.addMethod(
  1471. $core.method({
  1472. selector: "inspect",
  1473. protocol: 'inspecting',
  1474. fn: function (){
  1475. var self=this;
  1476. function $Inspector(){return $globals.Inspector||(typeof Inspector=="undefined"?nil:Inspector)}
  1477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1478. return $core.withContext(function($ctx1) {
  1479. //>>excludeEnd("ctx");
  1480. $recv($Inspector())._inspect_(self);
  1481. return self;
  1482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1483. }, function($ctx1) {$ctx1.fill(self,"inspect",{},$globals.ProtoObject)});
  1484. //>>excludeEnd("ctx");
  1485. },
  1486. //>>excludeStart("ide", pragmas.excludeIdeData);
  1487. args: [],
  1488. source: "inspect\x0a\x09Inspector inspect: self",
  1489. referencedClasses: ["Inspector"],
  1490. //>>excludeEnd("ide");
  1491. messageSends: ["inspect:"]
  1492. }),
  1493. $globals.ProtoObject);
  1494. $core.addMethod(
  1495. $core.method({
  1496. selector: "inspectOn:",
  1497. protocol: 'inspecting',
  1498. fn: function (anInspector){
  1499. var self=this;
  1500. return self;
  1501. },
  1502. //>>excludeStart("ide", pragmas.excludeIdeData);
  1503. args: ["anInspector"],
  1504. source: "inspectOn: anInspector",
  1505. referencedClasses: [],
  1506. //>>excludeEnd("ide");
  1507. messageSends: []
  1508. }),
  1509. $globals.ProtoObject);
  1510. $core.addMethod(
  1511. $core.method({
  1512. selector: "instVarAt:",
  1513. protocol: 'accessing',
  1514. fn: function (aString){
  1515. var self=this;
  1516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1517. return $core.withContext(function($ctx1) {
  1518. //>>excludeEnd("ctx");
  1519. return self['@'+aString] ;
  1520. return self;
  1521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1522. }, function($ctx1) {$ctx1.fill(self,"instVarAt:",{aString:aString},$globals.ProtoObject)});
  1523. //>>excludeEnd("ctx");
  1524. },
  1525. //>>excludeStart("ide", pragmas.excludeIdeData);
  1526. args: ["aString"],
  1527. source: "instVarAt: aString\x0a\x09< return self['@'+aString] >",
  1528. referencedClasses: [],
  1529. //>>excludeEnd("ide");
  1530. messageSends: []
  1531. }),
  1532. $globals.ProtoObject);
  1533. $core.addMethod(
  1534. $core.method({
  1535. selector: "instVarAt:put:",
  1536. protocol: 'accessing',
  1537. fn: function (aString,anObject){
  1538. var self=this;
  1539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1540. return $core.withContext(function($ctx1) {
  1541. //>>excludeEnd("ctx");
  1542. self['@' + aString] = anObject ;
  1543. return self;
  1544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1545. }, function($ctx1) {$ctx1.fill(self,"instVarAt:put:",{aString:aString,anObject:anObject},$globals.ProtoObject)});
  1546. //>>excludeEnd("ctx");
  1547. },
  1548. //>>excludeStart("ide", pragmas.excludeIdeData);
  1549. args: ["aString", "anObject"],
  1550. source: "instVarAt: aString put: anObject\x0a\x09< self['@' + aString] = anObject >",
  1551. referencedClasses: [],
  1552. //>>excludeEnd("ide");
  1553. messageSends: []
  1554. }),
  1555. $globals.ProtoObject);
  1556. $core.addMethod(
  1557. $core.method({
  1558. selector: "isKindOf:",
  1559. protocol: 'testing',
  1560. fn: function (aClass){
  1561. var self=this;
  1562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1563. return $core.withContext(function($ctx1) {
  1564. //>>excludeEnd("ctx");
  1565. var $2,$1;
  1566. $2=self._isMemberOf_(aClass);
  1567. if($core.assert($2)){
  1568. $1=true;
  1569. } else {
  1570. $1=$recv(self._class())._inheritsFrom_(aClass);
  1571. };
  1572. return $1;
  1573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1574. }, function($ctx1) {$ctx1.fill(self,"isKindOf:",{aClass:aClass},$globals.ProtoObject)});
  1575. //>>excludeEnd("ctx");
  1576. },
  1577. //>>excludeStart("ide", pragmas.excludeIdeData);
  1578. args: ["aClass"],
  1579. source: "isKindOf: aClass\x0a\x09^ (self isMemberOf: aClass)\x0a\x09\x09ifTrue: [ true ]\x0a\x09\x09ifFalse: [ self class inheritsFrom: aClass ]",
  1580. referencedClasses: [],
  1581. //>>excludeEnd("ide");
  1582. messageSends: ["ifTrue:ifFalse:", "isMemberOf:", "inheritsFrom:", "class"]
  1583. }),
  1584. $globals.ProtoObject);
  1585. $core.addMethod(
  1586. $core.method({
  1587. selector: "isNil",
  1588. protocol: 'testing',
  1589. fn: function (){
  1590. var self=this;
  1591. return false;
  1592. },
  1593. //>>excludeStart("ide", pragmas.excludeIdeData);
  1594. args: [],
  1595. source: "isNil\x0a\x09^ false",
  1596. referencedClasses: [],
  1597. //>>excludeEnd("ide");
  1598. messageSends: []
  1599. }),
  1600. $globals.ProtoObject);
  1601. $core.addMethod(
  1602. $core.method({
  1603. selector: "notNil",
  1604. protocol: 'testing',
  1605. fn: function (){
  1606. var self=this;
  1607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1608. return $core.withContext(function($ctx1) {
  1609. //>>excludeEnd("ctx");
  1610. var $1;
  1611. $1=$recv(self._isNil())._not();
  1612. return $1;
  1613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1614. }, function($ctx1) {$ctx1.fill(self,"notNil",{},$globals.ProtoObject)});
  1615. //>>excludeEnd("ctx");
  1616. },
  1617. //>>excludeStart("ide", pragmas.excludeIdeData);
  1618. args: [],
  1619. source: "notNil\x0a\x09^ self isNil not",
  1620. referencedClasses: [],
  1621. //>>excludeEnd("ide");
  1622. messageSends: ["not", "isNil"]
  1623. }),
  1624. $globals.ProtoObject);
  1625. $core.addMethod(
  1626. $core.method({
  1627. selector: "perform:",
  1628. protocol: 'message handling',
  1629. fn: function (aString){
  1630. var self=this;
  1631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1632. return $core.withContext(function($ctx1) {
  1633. //>>excludeEnd("ctx");
  1634. var $1;
  1635. $1=self._perform_withArguments_(aString,[]);
  1636. return $1;
  1637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1638. }, function($ctx1) {$ctx1.fill(self,"perform:",{aString:aString},$globals.ProtoObject)});
  1639. //>>excludeEnd("ctx");
  1640. },
  1641. //>>excludeStart("ide", pragmas.excludeIdeData);
  1642. args: ["aString"],
  1643. source: "perform: aString\x0a\x09^ self perform: aString withArguments: #()",
  1644. referencedClasses: [],
  1645. //>>excludeEnd("ide");
  1646. messageSends: ["perform:withArguments:"]
  1647. }),
  1648. $globals.ProtoObject);
  1649. $core.addMethod(
  1650. $core.method({
  1651. selector: "perform:withArguments:",
  1652. protocol: 'message handling',
  1653. fn: function (aString,aCollection){
  1654. var self=this;
  1655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1656. return $core.withContext(function($ctx1) {
  1657. //>>excludeEnd("ctx");
  1658. return $core.send(self, aString._asJavaScriptMethodName(), aCollection);
  1659. return self;
  1660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1661. }, function($ctx1) {$ctx1.fill(self,"perform:withArguments:",{aString:aString,aCollection:aCollection},$globals.ProtoObject)});
  1662. //>>excludeEnd("ctx");
  1663. },
  1664. //>>excludeStart("ide", pragmas.excludeIdeData);
  1665. args: ["aString", "aCollection"],
  1666. source: "perform: aString withArguments: aCollection\x0a\x09<return $core.send(self, aString._asJavaScriptMethodName(), aCollection)>",
  1667. referencedClasses: [],
  1668. //>>excludeEnd("ide");
  1669. messageSends: []
  1670. }),
  1671. $globals.ProtoObject);
  1672. $core.addMethod(
  1673. $core.method({
  1674. selector: "printOn:",
  1675. protocol: 'printing',
  1676. fn: function (aStream){
  1677. var self=this;
  1678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1679. return $core.withContext(function($ctx1) {
  1680. //>>excludeEnd("ctx");
  1681. var $5,$4,$3,$2,$1;
  1682. $5=self._class();
  1683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1684. $ctx1.sendIdx["class"]=1;
  1685. //>>excludeEnd("ctx");
  1686. $4=$recv($5)._name();
  1687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1688. $ctx1.sendIdx["name"]=1;
  1689. //>>excludeEnd("ctx");
  1690. $3=$recv($4)._first();
  1691. $2=$recv($3)._isVowel();
  1692. if($core.assert($2)){
  1693. $1="an ";
  1694. } else {
  1695. $1="a ";
  1696. };
  1697. $recv(aStream)._nextPutAll_($1);
  1698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1699. $ctx1.sendIdx["nextPutAll:"]=1;
  1700. //>>excludeEnd("ctx");
  1701. $recv(aStream)._nextPutAll_($recv(self._class())._name());
  1702. return self;
  1703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1704. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.ProtoObject)});
  1705. //>>excludeEnd("ctx");
  1706. },
  1707. //>>excludeStart("ide", pragmas.excludeIdeData);
  1708. args: ["aStream"],
  1709. 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",
  1710. referencedClasses: [],
  1711. //>>excludeEnd("ide");
  1712. messageSends: ["nextPutAll:", "ifTrue:ifFalse:", "isVowel", "first", "name", "class"]
  1713. }),
  1714. $globals.ProtoObject);
  1715. $core.addMethod(
  1716. $core.method({
  1717. selector: "printString",
  1718. protocol: 'printing',
  1719. fn: function (){
  1720. var self=this;
  1721. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  1722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1723. return $core.withContext(function($ctx1) {
  1724. //>>excludeEnd("ctx");
  1725. var $1;
  1726. $1=$recv($String())._streamContents_((function(str){
  1727. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1728. return $core.withContext(function($ctx2) {
  1729. //>>excludeEnd("ctx");
  1730. return self._printOn_(str);
  1731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1732. }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)});
  1733. //>>excludeEnd("ctx");
  1734. }));
  1735. return $1;
  1736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1737. }, function($ctx1) {$ctx1.fill(self,"printString",{},$globals.ProtoObject)});
  1738. //>>excludeEnd("ctx");
  1739. },
  1740. //>>excludeStart("ide", pragmas.excludeIdeData);
  1741. args: [],
  1742. source: "printString\x0a\x09^ String streamContents: [ :str | \x0a\x09\x09self printOn: str ]",
  1743. referencedClasses: ["String"],
  1744. //>>excludeEnd("ide");
  1745. messageSends: ["streamContents:", "printOn:"]
  1746. }),
  1747. $globals.ProtoObject);
  1748. $core.addMethod(
  1749. $core.method({
  1750. selector: "yourself",
  1751. protocol: 'accessing',
  1752. fn: function (){
  1753. var self=this;
  1754. return self;
  1755. },
  1756. //>>excludeStart("ide", pragmas.excludeIdeData);
  1757. args: [],
  1758. source: "yourself\x0a\x09^ self",
  1759. referencedClasses: [],
  1760. //>>excludeEnd("ide");
  1761. messageSends: []
  1762. }),
  1763. $globals.ProtoObject);
  1764. $core.addMethod(
  1765. $core.method({
  1766. selector: "~=",
  1767. protocol: 'comparing',
  1768. fn: function (anObject){
  1769. var self=this;
  1770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1771. return $core.withContext(function($ctx1) {
  1772. //>>excludeEnd("ctx");
  1773. var $1;
  1774. $1=$recv(self.__eq(anObject)).__eq(false);
  1775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1776. $ctx1.sendIdx["="]=1;
  1777. //>>excludeEnd("ctx");
  1778. return $1;
  1779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1780. }, function($ctx1) {$ctx1.fill(self,"~=",{anObject:anObject},$globals.ProtoObject)});
  1781. //>>excludeEnd("ctx");
  1782. },
  1783. //>>excludeStart("ide", pragmas.excludeIdeData);
  1784. args: ["anObject"],
  1785. source: "~= anObject\x0a\x09^ (self = anObject) = false",
  1786. referencedClasses: [],
  1787. //>>excludeEnd("ide");
  1788. messageSends: ["="]
  1789. }),
  1790. $globals.ProtoObject);
  1791. $core.addMethod(
  1792. $core.method({
  1793. selector: "~~",
  1794. protocol: 'comparing',
  1795. fn: function (anObject){
  1796. var self=this;
  1797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1798. return $core.withContext(function($ctx1) {
  1799. //>>excludeEnd("ctx");
  1800. var $1;
  1801. $1=$recv(self.__eq_eq(anObject)).__eq(false);
  1802. return $1;
  1803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1804. }, function($ctx1) {$ctx1.fill(self,"~~",{anObject:anObject},$globals.ProtoObject)});
  1805. //>>excludeEnd("ctx");
  1806. },
  1807. //>>excludeStart("ide", pragmas.excludeIdeData);
  1808. args: ["anObject"],
  1809. source: "~~ anObject\x0a\x09^ (self == anObject) = false",
  1810. referencedClasses: [],
  1811. //>>excludeEnd("ide");
  1812. messageSends: ["=", "=="]
  1813. }),
  1814. $globals.ProtoObject);
  1815. $core.addMethod(
  1816. $core.method({
  1817. selector: "initialize",
  1818. protocol: 'initialization',
  1819. fn: function (){
  1820. var self=this;
  1821. return self;
  1822. },
  1823. //>>excludeStart("ide", pragmas.excludeIdeData);
  1824. args: [],
  1825. source: "initialize",
  1826. referencedClasses: [],
  1827. //>>excludeEnd("ide");
  1828. messageSends: []
  1829. }),
  1830. $globals.ProtoObject.klass);
  1831. $core.addClass('Object', $globals.ProtoObject, [], 'Kernel-Objects');
  1832. //>>excludeStart("ide", pragmas.excludeIdeData);
  1833. $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.";
  1834. //>>excludeEnd("ide");
  1835. $core.addMethod(
  1836. $core.method({
  1837. selector: "->",
  1838. protocol: 'converting',
  1839. fn: function (anObject){
  1840. var self=this;
  1841. function $Association(){return $globals.Association||(typeof Association=="undefined"?nil:Association)}
  1842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1843. return $core.withContext(function($ctx1) {
  1844. //>>excludeEnd("ctx");
  1845. var $1;
  1846. $1=$recv($Association())._key_value_(self,anObject);
  1847. return $1;
  1848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1849. }, function($ctx1) {$ctx1.fill(self,"->",{anObject:anObject},$globals.Object)});
  1850. //>>excludeEnd("ctx");
  1851. },
  1852. //>>excludeStart("ide", pragmas.excludeIdeData);
  1853. args: ["anObject"],
  1854. source: "-> anObject\x0a\x09^ Association key: self value: anObject",
  1855. referencedClasses: ["Association"],
  1856. //>>excludeEnd("ide");
  1857. messageSends: ["key:value:"]
  1858. }),
  1859. $globals.Object);
  1860. $core.addMethod(
  1861. $core.method({
  1862. selector: "asJSON",
  1863. protocol: 'converting',
  1864. fn: function (){
  1865. var self=this;
  1866. var variables;
  1867. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  1868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1869. return $core.withContext(function($ctx1) {
  1870. //>>excludeEnd("ctx");
  1871. var $1;
  1872. variables=$recv($HashedCollection())._new();
  1873. $recv($recv(self._class())._allInstanceVariableNames())._do_((function(each){
  1874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1875. return $core.withContext(function($ctx2) {
  1876. //>>excludeEnd("ctx");
  1877. return $recv(variables)._at_put_(each,$recv(self._instVarAt_(each))._asJSON());
  1878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1879. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  1880. //>>excludeEnd("ctx");
  1881. }));
  1882. $1=variables;
  1883. return $1;
  1884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1885. }, function($ctx1) {$ctx1.fill(self,"asJSON",{variables:variables},$globals.Object)});
  1886. //>>excludeEnd("ctx");
  1887. },
  1888. //>>excludeStart("ide", pragmas.excludeIdeData);
  1889. args: [],
  1890. 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",
  1891. referencedClasses: ["HashedCollection"],
  1892. //>>excludeEnd("ide");
  1893. messageSends: ["new", "do:", "allInstanceVariableNames", "class", "at:put:", "asJSON", "instVarAt:"]
  1894. }),
  1895. $globals.Object);
  1896. $core.addMethod(
  1897. $core.method({
  1898. selector: "asJSONString",
  1899. protocol: 'converting',
  1900. fn: function (){
  1901. var self=this;
  1902. function $JSON(){return $globals.JSON||(typeof JSON=="undefined"?nil:JSON)}
  1903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1904. return $core.withContext(function($ctx1) {
  1905. //>>excludeEnd("ctx");
  1906. var $1;
  1907. $1=$recv($JSON())._stringify_(self._asJSON());
  1908. return $1;
  1909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1910. }, function($ctx1) {$ctx1.fill(self,"asJSONString",{},$globals.Object)});
  1911. //>>excludeEnd("ctx");
  1912. },
  1913. //>>excludeStart("ide", pragmas.excludeIdeData);
  1914. args: [],
  1915. source: "asJSONString\x0a\x09^ JSON stringify: self asJSON",
  1916. referencedClasses: ["JSON"],
  1917. //>>excludeEnd("ide");
  1918. messageSends: ["stringify:", "asJSON"]
  1919. }),
  1920. $globals.Object);
  1921. $core.addMethod(
  1922. $core.method({
  1923. selector: "asJavascript",
  1924. protocol: 'converting',
  1925. fn: function (){
  1926. var self=this;
  1927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1928. return $core.withContext(function($ctx1) {
  1929. //>>excludeEnd("ctx");
  1930. var $1;
  1931. $1=self._asString();
  1932. return $1;
  1933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1934. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Object)});
  1935. //>>excludeEnd("ctx");
  1936. },
  1937. //>>excludeStart("ide", pragmas.excludeIdeData);
  1938. args: [],
  1939. source: "asJavascript\x0a\x09^ self asString",
  1940. referencedClasses: [],
  1941. //>>excludeEnd("ide");
  1942. messageSends: ["asString"]
  1943. }),
  1944. $globals.Object);
  1945. $core.addMethod(
  1946. $core.method({
  1947. selector: "basicAt:",
  1948. protocol: 'accessing',
  1949. fn: function (aString){
  1950. var self=this;
  1951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1952. return $core.withContext(function($ctx1) {
  1953. //>>excludeEnd("ctx");
  1954. return self[aString];
  1955. return self;
  1956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1957. }, function($ctx1) {$ctx1.fill(self,"basicAt:",{aString:aString},$globals.Object)});
  1958. //>>excludeEnd("ctx");
  1959. },
  1960. //>>excludeStart("ide", pragmas.excludeIdeData);
  1961. args: ["aString"],
  1962. source: "basicAt: aString\x0a\x09<return self[aString]>",
  1963. referencedClasses: [],
  1964. //>>excludeEnd("ide");
  1965. messageSends: []
  1966. }),
  1967. $globals.Object);
  1968. $core.addMethod(
  1969. $core.method({
  1970. selector: "basicAt:put:",
  1971. protocol: 'accessing',
  1972. fn: function (aString,anObject){
  1973. var self=this;
  1974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1975. return $core.withContext(function($ctx1) {
  1976. //>>excludeEnd("ctx");
  1977. return self[aString] = anObject;
  1978. return self;
  1979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1980. }, function($ctx1) {$ctx1.fill(self,"basicAt:put:",{aString:aString,anObject:anObject},$globals.Object)});
  1981. //>>excludeEnd("ctx");
  1982. },
  1983. //>>excludeStart("ide", pragmas.excludeIdeData);
  1984. args: ["aString", "anObject"],
  1985. source: "basicAt: aString put: anObject\x0a\x09<return self[aString] = anObject>",
  1986. referencedClasses: [],
  1987. //>>excludeEnd("ide");
  1988. messageSends: []
  1989. }),
  1990. $globals.Object);
  1991. $core.addMethod(
  1992. $core.method({
  1993. selector: "basicDelete:",
  1994. protocol: 'accessing',
  1995. fn: function (aString){
  1996. var self=this;
  1997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1998. return $core.withContext(function($ctx1) {
  1999. //>>excludeEnd("ctx");
  2000. delete self[aString]; return aString;
  2001. return self;
  2002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2003. }, function($ctx1) {$ctx1.fill(self,"basicDelete:",{aString:aString},$globals.Object)});
  2004. //>>excludeEnd("ctx");
  2005. },
  2006. //>>excludeStart("ide", pragmas.excludeIdeData);
  2007. args: ["aString"],
  2008. source: "basicDelete: aString\x0a\x09<delete self[aString]; return aString>",
  2009. referencedClasses: [],
  2010. //>>excludeEnd("ide");
  2011. messageSends: []
  2012. }),
  2013. $globals.Object);
  2014. $core.addMethod(
  2015. $core.method({
  2016. selector: "basicPerform:",
  2017. protocol: 'message handling',
  2018. fn: function (aString){
  2019. var self=this;
  2020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2021. return $core.withContext(function($ctx1) {
  2022. //>>excludeEnd("ctx");
  2023. var $1;
  2024. $1=self._basicPerform_withArguments_(aString,[]);
  2025. return $1;
  2026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2027. }, function($ctx1) {$ctx1.fill(self,"basicPerform:",{aString:aString},$globals.Object)});
  2028. //>>excludeEnd("ctx");
  2029. },
  2030. //>>excludeStart("ide", pragmas.excludeIdeData);
  2031. args: ["aString"],
  2032. source: "basicPerform: aString\x0a\x09^ self basicPerform: aString withArguments: #()",
  2033. referencedClasses: [],
  2034. //>>excludeEnd("ide");
  2035. messageSends: ["basicPerform:withArguments:"]
  2036. }),
  2037. $globals.Object);
  2038. $core.addMethod(
  2039. $core.method({
  2040. selector: "basicPerform:withArguments:",
  2041. protocol: 'message handling',
  2042. fn: function (aString,aCollection){
  2043. var self=this;
  2044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2045. return $core.withContext(function($ctx1) {
  2046. //>>excludeEnd("ctx");
  2047. return self[aString].apply(self, aCollection);;
  2048. return self;
  2049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2050. }, function($ctx1) {$ctx1.fill(self,"basicPerform:withArguments:",{aString:aString,aCollection:aCollection},$globals.Object)});
  2051. //>>excludeEnd("ctx");
  2052. },
  2053. //>>excludeStart("ide", pragmas.excludeIdeData);
  2054. args: ["aString", "aCollection"],
  2055. source: "basicPerform: aString withArguments: aCollection\x0a\x09<return self[aString].apply(self, aCollection);>",
  2056. referencedClasses: [],
  2057. //>>excludeEnd("ide");
  2058. messageSends: []
  2059. }),
  2060. $globals.Object);
  2061. $core.addMethod(
  2062. $core.method({
  2063. selector: "browse",
  2064. protocol: 'browsing',
  2065. fn: function (){
  2066. var self=this;
  2067. function $Finder(){return $globals.Finder||(typeof Finder=="undefined"?nil:Finder)}
  2068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2069. return $core.withContext(function($ctx1) {
  2070. //>>excludeEnd("ctx");
  2071. $recv($Finder())._findClass_(self._class());
  2072. return self;
  2073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2074. }, function($ctx1) {$ctx1.fill(self,"browse",{},$globals.Object)});
  2075. //>>excludeEnd("ctx");
  2076. },
  2077. //>>excludeStart("ide", pragmas.excludeIdeData);
  2078. args: [],
  2079. source: "browse\x0a\x09Finder findClass: self class",
  2080. referencedClasses: ["Finder"],
  2081. //>>excludeEnd("ide");
  2082. messageSends: ["findClass:", "class"]
  2083. }),
  2084. $globals.Object);
  2085. $core.addMethod(
  2086. $core.method({
  2087. selector: "copy",
  2088. protocol: 'copying',
  2089. fn: function (){
  2090. var self=this;
  2091. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2092. return $core.withContext(function($ctx1) {
  2093. //>>excludeEnd("ctx");
  2094. var $1;
  2095. $1=$recv(self._shallowCopy())._postCopy();
  2096. return $1;
  2097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2098. }, function($ctx1) {$ctx1.fill(self,"copy",{},$globals.Object)});
  2099. //>>excludeEnd("ctx");
  2100. },
  2101. //>>excludeStart("ide", pragmas.excludeIdeData);
  2102. args: [],
  2103. source: "copy\x0a\x09^ self shallowCopy postCopy",
  2104. referencedClasses: [],
  2105. //>>excludeEnd("ide");
  2106. messageSends: ["postCopy", "shallowCopy"]
  2107. }),
  2108. $globals.Object);
  2109. $core.addMethod(
  2110. $core.method({
  2111. selector: "deepCopy",
  2112. protocol: 'copying',
  2113. fn: function (){
  2114. var self=this;
  2115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2116. return $core.withContext(function($ctx1) {
  2117. //>>excludeEnd("ctx");
  2118. var copy = self.klass._new();
  2119. Object.keys(self).forEach(function (i) {
  2120. if(/^@.+/.test(i)) {
  2121. copy[i] = self[i]._deepCopy();
  2122. }
  2123. });
  2124. return copy;
  2125. ;
  2126. return self;
  2127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2128. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{},$globals.Object)});
  2129. //>>excludeEnd("ctx");
  2130. },
  2131. //>>excludeStart("ide", pragmas.excludeIdeData);
  2132. args: [],
  2133. 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>",
  2134. referencedClasses: [],
  2135. //>>excludeEnd("ide");
  2136. messageSends: []
  2137. }),
  2138. $globals.Object);
  2139. $core.addMethod(
  2140. $core.method({
  2141. selector: "deprecatedAPI",
  2142. protocol: 'error handling',
  2143. fn: function (){
  2144. var self=this;
  2145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2146. return $core.withContext(function($ctx1) {
  2147. //>>excludeEnd("ctx");
  2148. var $1,$6,$5,$4,$8,$7,$3,$2;
  2149. $1=console;
  2150. $6=$core.getThisContext()._home();
  2151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2152. $ctx1.sendIdx["home"]=1;
  2153. //>>excludeEnd("ctx");
  2154. $5=$recv($6)._asString();
  2155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2156. $ctx1.sendIdx["asString"]=1;
  2157. //>>excludeEnd("ctx");
  2158. $4=$recv($5).__comma(" is deprecated! (in ");
  2159. $8=$recv($core.getThisContext()._home())._home();
  2160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2161. $ctx1.sendIdx["home"]=2;
  2162. //>>excludeEnd("ctx");
  2163. $7=$recv($8)._asString();
  2164. $3=$recv($4).__comma($7);
  2165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2166. $ctx1.sendIdx[","]=2;
  2167. //>>excludeEnd("ctx");
  2168. $2=$recv($3).__comma(")");
  2169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2170. $ctx1.sendIdx[","]=1;
  2171. //>>excludeEnd("ctx");
  2172. $recv($1)._warn_($2);
  2173. return self;
  2174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2175. }, function($ctx1) {$ctx1.fill(self,"deprecatedAPI",{},$globals.Object)});
  2176. //>>excludeEnd("ctx");
  2177. },
  2178. //>>excludeStart("ide", pragmas.excludeIdeData);
  2179. args: [],
  2180. 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, ')'.",
  2181. referencedClasses: [],
  2182. //>>excludeEnd("ide");
  2183. messageSends: ["warn:", ",", "asString", "home"]
  2184. }),
  2185. $globals.Object);
  2186. $core.addMethod(
  2187. $core.method({
  2188. selector: "deprecatedAPI:",
  2189. protocol: 'error handling',
  2190. fn: function (aString){
  2191. var self=this;
  2192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2193. return $core.withContext(function($ctx1) {
  2194. //>>excludeEnd("ctx");
  2195. var $1,$6,$5,$4,$8,$7,$3,$2;
  2196. $1=console;
  2197. $6=$core.getThisContext()._home();
  2198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2199. $ctx1.sendIdx["home"]=1;
  2200. //>>excludeEnd("ctx");
  2201. $5=$recv($6)._asString();
  2202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2203. $ctx1.sendIdx["asString"]=1;
  2204. //>>excludeEnd("ctx");
  2205. $4=$recv($5).__comma(" is deprecated! (in ");
  2206. $8=$recv($core.getThisContext()._home())._home();
  2207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2208. $ctx1.sendIdx["home"]=2;
  2209. //>>excludeEnd("ctx");
  2210. $7=$recv($8)._asString();
  2211. $3=$recv($4).__comma($7);
  2212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2213. $ctx1.sendIdx[","]=2;
  2214. //>>excludeEnd("ctx");
  2215. $2=$recv($3).__comma(")");
  2216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2217. $ctx1.sendIdx[","]=1;
  2218. //>>excludeEnd("ctx");
  2219. $recv($1)._warn_($2);
  2220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2221. $ctx1.sendIdx["warn:"]=1;
  2222. //>>excludeEnd("ctx");
  2223. $recv(console)._warn_(aString);
  2224. return self;
  2225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2226. }, function($ctx1) {$ctx1.fill(self,"deprecatedAPI:",{aString:aString},$globals.Object)});
  2227. //>>excludeEnd("ctx");
  2228. },
  2229. //>>excludeStart("ide", pragmas.excludeIdeData);
  2230. args: ["aString"],
  2231. 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",
  2232. referencedClasses: [],
  2233. //>>excludeEnd("ide");
  2234. messageSends: ["warn:", ",", "asString", "home"]
  2235. }),
  2236. $globals.Object);
  2237. $core.addMethod(
  2238. $core.method({
  2239. selector: "error:",
  2240. protocol: 'error handling',
  2241. fn: function (aString){
  2242. var self=this;
  2243. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  2244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2245. return $core.withContext(function($ctx1) {
  2246. //>>excludeEnd("ctx");
  2247. $recv($Error())._signal_(aString);
  2248. return self;
  2249. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2250. }, function($ctx1) {$ctx1.fill(self,"error:",{aString:aString},$globals.Object)});
  2251. //>>excludeEnd("ctx");
  2252. },
  2253. //>>excludeStart("ide", pragmas.excludeIdeData);
  2254. args: ["aString"],
  2255. source: "error: aString\x0a\x09Error signal: aString",
  2256. referencedClasses: ["Error"],
  2257. //>>excludeEnd("ide");
  2258. messageSends: ["signal:"]
  2259. }),
  2260. $globals.Object);
  2261. $core.addMethod(
  2262. $core.method({
  2263. selector: "halt",
  2264. protocol: 'error handling',
  2265. fn: function (){
  2266. var self=this;
  2267. function $Halt(){return $globals.Halt||(typeof Halt=="undefined"?nil:Halt)}
  2268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2269. return $core.withContext(function($ctx1) {
  2270. //>>excludeEnd("ctx");
  2271. $recv($Halt())._signal();
  2272. return self;
  2273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2274. }, function($ctx1) {$ctx1.fill(self,"halt",{},$globals.Object)});
  2275. //>>excludeEnd("ctx");
  2276. },
  2277. //>>excludeStart("ide", pragmas.excludeIdeData);
  2278. args: [],
  2279. source: "halt\x0a\x09Halt signal",
  2280. referencedClasses: ["Halt"],
  2281. //>>excludeEnd("ide");
  2282. messageSends: ["signal"]
  2283. }),
  2284. $globals.Object);
  2285. $core.addMethod(
  2286. $core.method({
  2287. selector: "inspectOn:",
  2288. protocol: 'inspecting',
  2289. fn: function (anInspector){
  2290. var self=this;
  2291. var variables;
  2292. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  2293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2294. return $core.withContext(function($ctx1) {
  2295. //>>excludeEnd("ctx");
  2296. var $1;
  2297. variables=$recv($Dictionary())._new();
  2298. $recv(variables)._at_put_("#self",self);
  2299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2300. $ctx1.sendIdx["at:put:"]=1;
  2301. //>>excludeEnd("ctx");
  2302. $recv($recv(self._class())._allInstanceVariableNames())._do_((function(each){
  2303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2304. return $core.withContext(function($ctx2) {
  2305. //>>excludeEnd("ctx");
  2306. return $recv(variables)._at_put_(each,self._instVarAt_(each));
  2307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2308. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  2309. //>>excludeEnd("ctx");
  2310. }));
  2311. $recv(anInspector)._setLabel_(self._printString());
  2312. $1=$recv(anInspector)._setVariables_(variables);
  2313. return self;
  2314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2315. }, function($ctx1) {$ctx1.fill(self,"inspectOn:",{anInspector:anInspector,variables:variables},$globals.Object)});
  2316. //>>excludeEnd("ctx");
  2317. },
  2318. //>>excludeStart("ide", pragmas.excludeIdeData);
  2319. args: ["anInspector"],
  2320. 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",
  2321. referencedClasses: ["Dictionary"],
  2322. //>>excludeEnd("ide");
  2323. messageSends: ["new", "at:put:", "do:", "allInstanceVariableNames", "class", "instVarAt:", "setLabel:", "printString", "setVariables:"]
  2324. }),
  2325. $globals.Object);
  2326. $core.addMethod(
  2327. $core.method({
  2328. selector: "isBehavior",
  2329. protocol: 'testing',
  2330. fn: function (){
  2331. var self=this;
  2332. return false;
  2333. },
  2334. //>>excludeStart("ide", pragmas.excludeIdeData);
  2335. args: [],
  2336. source: "isBehavior\x0a\x09^ false",
  2337. referencedClasses: [],
  2338. //>>excludeEnd("ide");
  2339. messageSends: []
  2340. }),
  2341. $globals.Object);
  2342. $core.addMethod(
  2343. $core.method({
  2344. selector: "isBoolean",
  2345. protocol: 'testing',
  2346. fn: function (){
  2347. var self=this;
  2348. return false;
  2349. },
  2350. //>>excludeStart("ide", pragmas.excludeIdeData);
  2351. args: [],
  2352. source: "isBoolean\x0a\x09^ false",
  2353. referencedClasses: [],
  2354. //>>excludeEnd("ide");
  2355. messageSends: []
  2356. }),
  2357. $globals.Object);
  2358. $core.addMethod(
  2359. $core.method({
  2360. selector: "isClass",
  2361. protocol: 'testing',
  2362. fn: function (){
  2363. var self=this;
  2364. return false;
  2365. },
  2366. //>>excludeStart("ide", pragmas.excludeIdeData);
  2367. args: [],
  2368. source: "isClass\x0a\x09^ false",
  2369. referencedClasses: [],
  2370. //>>excludeEnd("ide");
  2371. messageSends: []
  2372. }),
  2373. $globals.Object);
  2374. $core.addMethod(
  2375. $core.method({
  2376. selector: "isCompiledMethod",
  2377. protocol: 'testing',
  2378. fn: function (){
  2379. var self=this;
  2380. return false;
  2381. },
  2382. //>>excludeStart("ide", pragmas.excludeIdeData);
  2383. args: [],
  2384. source: "isCompiledMethod\x0a\x09^ false",
  2385. referencedClasses: [],
  2386. //>>excludeEnd("ide");
  2387. messageSends: []
  2388. }),
  2389. $globals.Object);
  2390. $core.addMethod(
  2391. $core.method({
  2392. selector: "isImmutable",
  2393. protocol: 'testing',
  2394. fn: function (){
  2395. var self=this;
  2396. return false;
  2397. },
  2398. //>>excludeStart("ide", pragmas.excludeIdeData);
  2399. args: [],
  2400. source: "isImmutable\x0a\x09^ false",
  2401. referencedClasses: [],
  2402. //>>excludeEnd("ide");
  2403. messageSends: []
  2404. }),
  2405. $globals.Object);
  2406. $core.addMethod(
  2407. $core.method({
  2408. selector: "isMemberOf:",
  2409. protocol: 'testing',
  2410. fn: function (aClass){
  2411. var self=this;
  2412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2413. return $core.withContext(function($ctx1) {
  2414. //>>excludeEnd("ctx");
  2415. var $1;
  2416. $1=$recv(self._class()).__eq(aClass);
  2417. return $1;
  2418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2419. }, function($ctx1) {$ctx1.fill(self,"isMemberOf:",{aClass:aClass},$globals.Object)});
  2420. //>>excludeEnd("ctx");
  2421. },
  2422. //>>excludeStart("ide", pragmas.excludeIdeData);
  2423. args: ["aClass"],
  2424. source: "isMemberOf: aClass\x0a\x09^ self class = aClass",
  2425. referencedClasses: [],
  2426. //>>excludeEnd("ide");
  2427. messageSends: ["=", "class"]
  2428. }),
  2429. $globals.Object);
  2430. $core.addMethod(
  2431. $core.method({
  2432. selector: "isMetaclass",
  2433. protocol: 'testing',
  2434. fn: function (){
  2435. var self=this;
  2436. return false;
  2437. },
  2438. //>>excludeStart("ide", pragmas.excludeIdeData);
  2439. args: [],
  2440. source: "isMetaclass\x0a\x09^ false",
  2441. referencedClasses: [],
  2442. //>>excludeEnd("ide");
  2443. messageSends: []
  2444. }),
  2445. $globals.Object);
  2446. $core.addMethod(
  2447. $core.method({
  2448. selector: "isNumber",
  2449. protocol: 'testing',
  2450. fn: function (){
  2451. var self=this;
  2452. return false;
  2453. },
  2454. //>>excludeStart("ide", pragmas.excludeIdeData);
  2455. args: [],
  2456. source: "isNumber\x0a\x09^ false",
  2457. referencedClasses: [],
  2458. //>>excludeEnd("ide");
  2459. messageSends: []
  2460. }),
  2461. $globals.Object);
  2462. $core.addMethod(
  2463. $core.method({
  2464. selector: "isPackage",
  2465. protocol: 'testing',
  2466. fn: function (){
  2467. var self=this;
  2468. return false;
  2469. },
  2470. //>>excludeStart("ide", pragmas.excludeIdeData);
  2471. args: [],
  2472. source: "isPackage\x0a\x09^ false",
  2473. referencedClasses: [],
  2474. //>>excludeEnd("ide");
  2475. messageSends: []
  2476. }),
  2477. $globals.Object);
  2478. $core.addMethod(
  2479. $core.method({
  2480. selector: "isParseFailure",
  2481. protocol: 'testing',
  2482. fn: function (){
  2483. var self=this;
  2484. return false;
  2485. },
  2486. //>>excludeStart("ide", pragmas.excludeIdeData);
  2487. args: [],
  2488. source: "isParseFailure\x0a\x09^ false",
  2489. referencedClasses: [],
  2490. //>>excludeEnd("ide");
  2491. messageSends: []
  2492. }),
  2493. $globals.Object);
  2494. $core.addMethod(
  2495. $core.method({
  2496. selector: "isString",
  2497. protocol: 'testing',
  2498. fn: function (){
  2499. var self=this;
  2500. return false;
  2501. },
  2502. //>>excludeStart("ide", pragmas.excludeIdeData);
  2503. args: [],
  2504. source: "isString\x0a\x09^ false",
  2505. referencedClasses: [],
  2506. //>>excludeEnd("ide");
  2507. messageSends: []
  2508. }),
  2509. $globals.Object);
  2510. $core.addMethod(
  2511. $core.method({
  2512. selector: "isSymbol",
  2513. protocol: 'testing',
  2514. fn: function (){
  2515. var self=this;
  2516. return false;
  2517. },
  2518. //>>excludeStart("ide", pragmas.excludeIdeData);
  2519. args: [],
  2520. source: "isSymbol\x0a\x09^ false",
  2521. referencedClasses: [],
  2522. //>>excludeEnd("ide");
  2523. messageSends: []
  2524. }),
  2525. $globals.Object);
  2526. $core.addMethod(
  2527. $core.method({
  2528. selector: "postCopy",
  2529. protocol: 'copying',
  2530. fn: function (){
  2531. var self=this;
  2532. return self;
  2533. },
  2534. //>>excludeStart("ide", pragmas.excludeIdeData);
  2535. args: [],
  2536. source: "postCopy",
  2537. referencedClasses: [],
  2538. //>>excludeEnd("ide");
  2539. messageSends: []
  2540. }),
  2541. $globals.Object);
  2542. $core.addMethod(
  2543. $core.method({
  2544. selector: "putOn:",
  2545. protocol: 'streaming',
  2546. fn: function (aStream){
  2547. var self=this;
  2548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2549. return $core.withContext(function($ctx1) {
  2550. //>>excludeEnd("ctx");
  2551. $recv(aStream)._nextPut_(self);
  2552. return self;
  2553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2554. }, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},$globals.Object)});
  2555. //>>excludeEnd("ctx");
  2556. },
  2557. //>>excludeStart("ide", pragmas.excludeIdeData);
  2558. args: ["aStream"],
  2559. source: "putOn: aStream\x0a\x09aStream nextPut: self",
  2560. referencedClasses: [],
  2561. //>>excludeEnd("ide");
  2562. messageSends: ["nextPut:"]
  2563. }),
  2564. $globals.Object);
  2565. $core.addMethod(
  2566. $core.method({
  2567. selector: "respondsTo:",
  2568. protocol: 'testing',
  2569. fn: function (aSelector){
  2570. var self=this;
  2571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2572. return $core.withContext(function($ctx1) {
  2573. //>>excludeEnd("ctx");
  2574. var $1;
  2575. $1=$recv(self._class())._canUnderstand_(aSelector);
  2576. return $1;
  2577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2578. }, function($ctx1) {$ctx1.fill(self,"respondsTo:",{aSelector:aSelector},$globals.Object)});
  2579. //>>excludeEnd("ctx");
  2580. },
  2581. //>>excludeStart("ide", pragmas.excludeIdeData);
  2582. args: ["aSelector"],
  2583. source: "respondsTo: aSelector\x0a\x09^ self class canUnderstand: aSelector",
  2584. referencedClasses: [],
  2585. //>>excludeEnd("ide");
  2586. messageSends: ["canUnderstand:", "class"]
  2587. }),
  2588. $globals.Object);
  2589. $core.addMethod(
  2590. $core.method({
  2591. selector: "shallowCopy",
  2592. protocol: 'copying',
  2593. fn: function (){
  2594. var self=this;
  2595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2596. return $core.withContext(function($ctx1) {
  2597. //>>excludeEnd("ctx");
  2598. var copy = self.klass._new();
  2599. Object.keys(self).forEach(function(i) {
  2600. if(/^@.+/.test(i)) {
  2601. copy[i] = self[i];
  2602. }
  2603. });
  2604. return copy;
  2605. ;
  2606. return self;
  2607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2608. }, function($ctx1) {$ctx1.fill(self,"shallowCopy",{},$globals.Object)});
  2609. //>>excludeEnd("ctx");
  2610. },
  2611. //>>excludeStart("ide", pragmas.excludeIdeData);
  2612. args: [],
  2613. 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>",
  2614. referencedClasses: [],
  2615. //>>excludeEnd("ide");
  2616. messageSends: []
  2617. }),
  2618. $globals.Object);
  2619. $core.addMethod(
  2620. $core.method({
  2621. selector: "shouldNotImplement",
  2622. protocol: 'error handling',
  2623. fn: function (){
  2624. var self=this;
  2625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2626. return $core.withContext(function($ctx1) {
  2627. //>>excludeEnd("ctx");
  2628. self._error_("This method should not be implemented in ".__comma($recv(self._class())._name()));
  2629. return self;
  2630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2631. }, function($ctx1) {$ctx1.fill(self,"shouldNotImplement",{},$globals.Object)});
  2632. //>>excludeEnd("ctx");
  2633. },
  2634. //>>excludeStart("ide", pragmas.excludeIdeData);
  2635. args: [],
  2636. source: "shouldNotImplement\x0a\x09self error: 'This method should not be implemented in ', self class name",
  2637. referencedClasses: [],
  2638. //>>excludeEnd("ide");
  2639. messageSends: ["error:", ",", "name", "class"]
  2640. }),
  2641. $globals.Object);
  2642. $core.addMethod(
  2643. $core.method({
  2644. selector: "size",
  2645. protocol: 'accessing',
  2646. fn: function (){
  2647. var self=this;
  2648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2649. return $core.withContext(function($ctx1) {
  2650. //>>excludeEnd("ctx");
  2651. self._error_("Object not indexable");
  2652. return self;
  2653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2654. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Object)});
  2655. //>>excludeEnd("ctx");
  2656. },
  2657. //>>excludeStart("ide", pragmas.excludeIdeData);
  2658. args: [],
  2659. source: "size\x0a\x09self error: 'Object not indexable'",
  2660. referencedClasses: [],
  2661. //>>excludeEnd("ide");
  2662. messageSends: ["error:"]
  2663. }),
  2664. $globals.Object);
  2665. $core.addMethod(
  2666. $core.method({
  2667. selector: "subclassResponsibility",
  2668. protocol: 'error handling',
  2669. fn: function (){
  2670. var self=this;
  2671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2672. return $core.withContext(function($ctx1) {
  2673. //>>excludeEnd("ctx");
  2674. self._error_("This method is a responsibility of a subclass");
  2675. return self;
  2676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2677. }, function($ctx1) {$ctx1.fill(self,"subclassResponsibility",{},$globals.Object)});
  2678. //>>excludeEnd("ctx");
  2679. },
  2680. //>>excludeStart("ide", pragmas.excludeIdeData);
  2681. args: [],
  2682. source: "subclassResponsibility\x0a\x09self error: 'This method is a responsibility of a subclass'",
  2683. referencedClasses: [],
  2684. //>>excludeEnd("ide");
  2685. messageSends: ["error:"]
  2686. }),
  2687. $globals.Object);
  2688. $core.addMethod(
  2689. $core.method({
  2690. selector: "throw:",
  2691. protocol: 'error handling',
  2692. fn: function (anObject){
  2693. var self=this;
  2694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2695. return $core.withContext(function($ctx1) {
  2696. //>>excludeEnd("ctx");
  2697. throw anObject ;
  2698. return self;
  2699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2700. }, function($ctx1) {$ctx1.fill(self,"throw:",{anObject:anObject},$globals.Object)});
  2701. //>>excludeEnd("ctx");
  2702. },
  2703. //>>excludeStart("ide", pragmas.excludeIdeData);
  2704. args: ["anObject"],
  2705. source: "throw: anObject\x0a\x09< throw anObject >",
  2706. referencedClasses: [],
  2707. //>>excludeEnd("ide");
  2708. messageSends: []
  2709. }),
  2710. $globals.Object);
  2711. $core.addMethod(
  2712. $core.method({
  2713. selector: "value",
  2714. protocol: 'accessing',
  2715. fn: function (){
  2716. var self=this;
  2717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2718. return $core.withContext(function($ctx1) {
  2719. //>>excludeEnd("ctx");
  2720. return self.valueOf();
  2721. return self;
  2722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2723. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.Object)});
  2724. //>>excludeEnd("ctx");
  2725. },
  2726. //>>excludeStart("ide", pragmas.excludeIdeData);
  2727. args: [],
  2728. source: "value\x0a\x09<return self.valueOf()>",
  2729. referencedClasses: [],
  2730. //>>excludeEnd("ide");
  2731. messageSends: []
  2732. }),
  2733. $globals.Object);
  2734. $core.addMethod(
  2735. $core.method({
  2736. selector: "accessorProtocolWith:",
  2737. protocol: 'helios',
  2738. fn: function (aGenerator){
  2739. var self=this;
  2740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2741. return $core.withContext(function($ctx1) {
  2742. //>>excludeEnd("ctx");
  2743. $recv(aGenerator)._accessorProtocolForObject();
  2744. return self;
  2745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2746. }, function($ctx1) {$ctx1.fill(self,"accessorProtocolWith:",{aGenerator:aGenerator},$globals.Object.klass)});
  2747. //>>excludeEnd("ctx");
  2748. },
  2749. //>>excludeStart("ide", pragmas.excludeIdeData);
  2750. args: ["aGenerator"],
  2751. source: "accessorProtocolWith: aGenerator\x0a\x09aGenerator accessorProtocolForObject",
  2752. referencedClasses: [],
  2753. //>>excludeEnd("ide");
  2754. messageSends: ["accessorProtocolForObject"]
  2755. }),
  2756. $globals.Object.klass);
  2757. $core.addMethod(
  2758. $core.method({
  2759. selector: "accessorsSourceCodesWith:",
  2760. protocol: 'helios',
  2761. fn: function (aGenerator){
  2762. var self=this;
  2763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2764. return $core.withContext(function($ctx1) {
  2765. //>>excludeEnd("ctx");
  2766. $recv(aGenerator)._accessorsForObject();
  2767. return self;
  2768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2769. }, function($ctx1) {$ctx1.fill(self,"accessorsSourceCodesWith:",{aGenerator:aGenerator},$globals.Object.klass)});
  2770. //>>excludeEnd("ctx");
  2771. },
  2772. //>>excludeStart("ide", pragmas.excludeIdeData);
  2773. args: ["aGenerator"],
  2774. source: "accessorsSourceCodesWith: aGenerator\x0a\x09aGenerator accessorsForObject",
  2775. referencedClasses: [],
  2776. //>>excludeEnd("ide");
  2777. messageSends: ["accessorsForObject"]
  2778. }),
  2779. $globals.Object.klass);
  2780. $core.addMethod(
  2781. $core.method({
  2782. selector: "initialize",
  2783. protocol: 'initialization',
  2784. fn: function (){
  2785. var self=this;
  2786. return self;
  2787. },
  2788. //>>excludeStart("ide", pragmas.excludeIdeData);
  2789. args: [],
  2790. source: "initialize\x0a\x09\x22no op\x22",
  2791. referencedClasses: [],
  2792. //>>excludeEnd("ide");
  2793. messageSends: []
  2794. }),
  2795. $globals.Object.klass);
  2796. $core.addMethod(
  2797. $core.method({
  2798. selector: "initializeProtocolWith:",
  2799. protocol: 'helios',
  2800. fn: function (aGenerator){
  2801. var self=this;
  2802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2803. return $core.withContext(function($ctx1) {
  2804. //>>excludeEnd("ctx");
  2805. $recv(aGenerator)._initializeProtocolForObject();
  2806. return self;
  2807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2808. }, function($ctx1) {$ctx1.fill(self,"initializeProtocolWith:",{aGenerator:aGenerator},$globals.Object.klass)});
  2809. //>>excludeEnd("ctx");
  2810. },
  2811. //>>excludeStart("ide", pragmas.excludeIdeData);
  2812. args: ["aGenerator"],
  2813. source: "initializeProtocolWith: aGenerator\x0a\x09aGenerator initializeProtocolForObject",
  2814. referencedClasses: [],
  2815. //>>excludeEnd("ide");
  2816. messageSends: ["initializeProtocolForObject"]
  2817. }),
  2818. $globals.Object.klass);
  2819. $core.addMethod(
  2820. $core.method({
  2821. selector: "initializeSourceCodesWith:",
  2822. protocol: 'helios',
  2823. fn: function (aGenerator){
  2824. var self=this;
  2825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2826. return $core.withContext(function($ctx1) {
  2827. //>>excludeEnd("ctx");
  2828. $recv(aGenerator)._initializeForObject();
  2829. return self;
  2830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2831. }, function($ctx1) {$ctx1.fill(self,"initializeSourceCodesWith:",{aGenerator:aGenerator},$globals.Object.klass)});
  2832. //>>excludeEnd("ctx");
  2833. },
  2834. //>>excludeStart("ide", pragmas.excludeIdeData);
  2835. args: ["aGenerator"],
  2836. source: "initializeSourceCodesWith: aGenerator\x0a\x09aGenerator initializeForObject",
  2837. referencedClasses: [],
  2838. //>>excludeEnd("ide");
  2839. messageSends: ["initializeForObject"]
  2840. }),
  2841. $globals.Object.klass);
  2842. $core.addClass('Boolean', $globals.Object, [], 'Kernel-Objects');
  2843. //>>excludeStart("ide", pragmas.excludeIdeData);
  2844. $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: [ ... ]";
  2845. //>>excludeEnd("ide");
  2846. $core.addMethod(
  2847. $core.method({
  2848. selector: "&",
  2849. protocol: 'controlling',
  2850. fn: function (aBoolean){
  2851. var self=this;
  2852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2853. return $core.withContext(function($ctx1) {
  2854. //>>excludeEnd("ctx");
  2855. if(self == true) {
  2856. return aBoolean;
  2857. } else {
  2858. return false;
  2859. }
  2860. ;
  2861. return self;
  2862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2863. }, function($ctx1) {$ctx1.fill(self,"&",{aBoolean:aBoolean},$globals.Boolean)});
  2864. //>>excludeEnd("ctx");
  2865. },
  2866. //>>excludeStart("ide", pragmas.excludeIdeData);
  2867. args: ["aBoolean"],
  2868. 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>",
  2869. referencedClasses: [],
  2870. //>>excludeEnd("ide");
  2871. messageSends: []
  2872. }),
  2873. $globals.Boolean);
  2874. $core.addMethod(
  2875. $core.method({
  2876. selector: "=",
  2877. protocol: 'comparing',
  2878. fn: function (aBoolean){
  2879. var self=this;
  2880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2881. return $core.withContext(function($ctx1) {
  2882. //>>excludeEnd("ctx");
  2883. return aBoolean != null &&
  2884. typeof aBoolean._isBoolean === "function" &&
  2885. aBoolean._isBoolean() &&
  2886. Boolean(self == true) == aBoolean
  2887. ;
  2888. return self;
  2889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2890. }, function($ctx1) {$ctx1.fill(self,"=",{aBoolean:aBoolean},$globals.Boolean)});
  2891. //>>excludeEnd("ctx");
  2892. },
  2893. //>>excludeStart("ide", pragmas.excludeIdeData);
  2894. args: ["aBoolean"],
  2895. 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>",
  2896. referencedClasses: [],
  2897. //>>excludeEnd("ide");
  2898. messageSends: []
  2899. }),
  2900. $globals.Boolean);
  2901. $core.addMethod(
  2902. $core.method({
  2903. selector: "==",
  2904. protocol: 'comparing',
  2905. fn: function (aBoolean){
  2906. var self=this;
  2907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2908. return $core.withContext(function($ctx1) {
  2909. //>>excludeEnd("ctx");
  2910. var $1;
  2911. $1=self.__eq(aBoolean);
  2912. return $1;
  2913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2914. }, function($ctx1) {$ctx1.fill(self,"==",{aBoolean:aBoolean},$globals.Boolean)});
  2915. //>>excludeEnd("ctx");
  2916. },
  2917. //>>excludeStart("ide", pragmas.excludeIdeData);
  2918. args: ["aBoolean"],
  2919. source: "== aBoolean\x0a\x09^ self = aBoolean",
  2920. referencedClasses: [],
  2921. //>>excludeEnd("ide");
  2922. messageSends: ["="]
  2923. }),
  2924. $globals.Boolean);
  2925. $core.addMethod(
  2926. $core.method({
  2927. selector: "and:",
  2928. protocol: 'controlling',
  2929. fn: function (aBlock){
  2930. var self=this;
  2931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2932. return $core.withContext(function($ctx1) {
  2933. //>>excludeEnd("ctx");
  2934. var $2,$1;
  2935. $2=self.__eq(true);
  2936. $1=$recv($2)._ifTrue_ifFalse_(aBlock,(function(){
  2937. return false;
  2938. }));
  2939. return $1;
  2940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2941. }, function($ctx1) {$ctx1.fill(self,"and:",{aBlock:aBlock},$globals.Boolean)});
  2942. //>>excludeEnd("ctx");
  2943. },
  2944. //>>excludeStart("ide", pragmas.excludeIdeData);
  2945. args: ["aBlock"],
  2946. source: "and: aBlock\x0a\x09^ self = true\x0a\x09\x09ifTrue: aBlock\x0a\x09\x09ifFalse: [ false ]",
  2947. referencedClasses: [],
  2948. //>>excludeEnd("ide");
  2949. messageSends: ["ifTrue:ifFalse:", "="]
  2950. }),
  2951. $globals.Boolean);
  2952. $core.addMethod(
  2953. $core.method({
  2954. selector: "asBit",
  2955. protocol: 'converting',
  2956. fn: function (){
  2957. var self=this;
  2958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2959. return $core.withContext(function($ctx1) {
  2960. //>>excludeEnd("ctx");
  2961. var $1;
  2962. if($core.assert(self)){
  2963. $1=(1);
  2964. } else {
  2965. $1=(0);
  2966. };
  2967. return $1;
  2968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2969. }, function($ctx1) {$ctx1.fill(self,"asBit",{},$globals.Boolean)});
  2970. //>>excludeEnd("ctx");
  2971. },
  2972. //>>excludeStart("ide", pragmas.excludeIdeData);
  2973. args: [],
  2974. source: "asBit\x0a\x09^ self ifTrue: [ 1 ] ifFalse: [ 0 ]",
  2975. referencedClasses: [],
  2976. //>>excludeEnd("ide");
  2977. messageSends: ["ifTrue:ifFalse:"]
  2978. }),
  2979. $globals.Boolean);
  2980. $core.addMethod(
  2981. $core.method({
  2982. selector: "asJSON",
  2983. protocol: 'converting',
  2984. fn: function (){
  2985. var self=this;
  2986. return self;
  2987. },
  2988. //>>excludeStart("ide", pragmas.excludeIdeData);
  2989. args: [],
  2990. source: "asJSON\x0a\x09^ self",
  2991. referencedClasses: [],
  2992. //>>excludeEnd("ide");
  2993. messageSends: []
  2994. }),
  2995. $globals.Boolean);
  2996. $core.addMethod(
  2997. $core.method({
  2998. selector: "asString",
  2999. protocol: 'converting',
  3000. fn: function (){
  3001. var self=this;
  3002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3003. return $core.withContext(function($ctx1) {
  3004. //>>excludeEnd("ctx");
  3005. return self.toString() ;
  3006. return self;
  3007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3008. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.Boolean)});
  3009. //>>excludeEnd("ctx");
  3010. },
  3011. //>>excludeStart("ide", pragmas.excludeIdeData);
  3012. args: [],
  3013. source: "asString\x0a\x09< return self.toString() >",
  3014. referencedClasses: [],
  3015. //>>excludeEnd("ide");
  3016. messageSends: []
  3017. }),
  3018. $globals.Boolean);
  3019. $core.addMethod(
  3020. $core.method({
  3021. selector: "deepCopy",
  3022. protocol: 'copying',
  3023. fn: function (){
  3024. var self=this;
  3025. return self;
  3026. },
  3027. //>>excludeStart("ide", pragmas.excludeIdeData);
  3028. args: [],
  3029. source: "deepCopy\x0a\x09^ self",
  3030. referencedClasses: [],
  3031. //>>excludeEnd("ide");
  3032. messageSends: []
  3033. }),
  3034. $globals.Boolean);
  3035. $core.addMethod(
  3036. $core.method({
  3037. selector: "ifFalse:",
  3038. protocol: 'controlling',
  3039. fn: function (aBlock){
  3040. var self=this;
  3041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3042. return $core.withContext(function($ctx1) {
  3043. //>>excludeEnd("ctx");
  3044. var $1;
  3045. $1=self._ifTrue_ifFalse_((function(){
  3046. }),aBlock);
  3047. return $1;
  3048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3049. }, function($ctx1) {$ctx1.fill(self,"ifFalse:",{aBlock:aBlock},$globals.Boolean)});
  3050. //>>excludeEnd("ctx");
  3051. },
  3052. //>>excludeStart("ide", pragmas.excludeIdeData);
  3053. args: ["aBlock"],
  3054. source: "ifFalse: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self ifTrue: [] ifFalse: aBlock",
  3055. referencedClasses: [],
  3056. //>>excludeEnd("ide");
  3057. messageSends: ["ifTrue:ifFalse:"]
  3058. }),
  3059. $globals.Boolean);
  3060. $core.addMethod(
  3061. $core.method({
  3062. selector: "ifFalse:ifTrue:",
  3063. protocol: 'controlling',
  3064. fn: function (aBlock,anotherBlock){
  3065. var self=this;
  3066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3067. return $core.withContext(function($ctx1) {
  3068. //>>excludeEnd("ctx");
  3069. var $1;
  3070. $1=self._ifTrue_ifFalse_(anotherBlock,aBlock);
  3071. return $1;
  3072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3073. }, function($ctx1) {$ctx1.fill(self,"ifFalse:ifTrue:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Boolean)});
  3074. //>>excludeEnd("ctx");
  3075. },
  3076. //>>excludeStart("ide", pragmas.excludeIdeData);
  3077. args: ["aBlock", "anotherBlock"],
  3078. source: "ifFalse: aBlock ifTrue: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self ifTrue: anotherBlock ifFalse: aBlock",
  3079. referencedClasses: [],
  3080. //>>excludeEnd("ide");
  3081. messageSends: ["ifTrue:ifFalse:"]
  3082. }),
  3083. $globals.Boolean);
  3084. $core.addMethod(
  3085. $core.method({
  3086. selector: "ifTrue:",
  3087. protocol: 'controlling',
  3088. fn: function (aBlock){
  3089. var self=this;
  3090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3091. return $core.withContext(function($ctx1) {
  3092. //>>excludeEnd("ctx");
  3093. var $1;
  3094. $1=self._ifTrue_ifFalse_(aBlock,(function(){
  3095. }));
  3096. return $1;
  3097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3098. }, function($ctx1) {$ctx1.fill(self,"ifTrue:",{aBlock:aBlock},$globals.Boolean)});
  3099. //>>excludeEnd("ctx");
  3100. },
  3101. //>>excludeStart("ide", pragmas.excludeIdeData);
  3102. args: ["aBlock"],
  3103. source: "ifTrue: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self ifTrue: aBlock ifFalse: []",
  3104. referencedClasses: [],
  3105. //>>excludeEnd("ide");
  3106. messageSends: ["ifTrue:ifFalse:"]
  3107. }),
  3108. $globals.Boolean);
  3109. $core.addMethod(
  3110. $core.method({
  3111. selector: "ifTrue:ifFalse:",
  3112. protocol: 'controlling',
  3113. fn: function (aBlock,anotherBlock){
  3114. var self=this;
  3115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3116. return $core.withContext(function($ctx1) {
  3117. //>>excludeEnd("ctx");
  3118. if(self == true) {
  3119. return aBlock._value();
  3120. } else {
  3121. return anotherBlock._value();
  3122. }
  3123. ;
  3124. return self;
  3125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3126. }, function($ctx1) {$ctx1.fill(self,"ifTrue:ifFalse:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Boolean)});
  3127. //>>excludeEnd("ctx");
  3128. },
  3129. //>>excludeStart("ide", pragmas.excludeIdeData);
  3130. args: ["aBlock", "anotherBlock"],
  3131. 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>",
  3132. referencedClasses: [],
  3133. //>>excludeEnd("ide");
  3134. messageSends: []
  3135. }),
  3136. $globals.Boolean);
  3137. $core.addMethod(
  3138. $core.method({
  3139. selector: "isBoolean",
  3140. protocol: 'testing',
  3141. fn: function (){
  3142. var self=this;
  3143. return true;
  3144. },
  3145. //>>excludeStart("ide", pragmas.excludeIdeData);
  3146. args: [],
  3147. source: "isBoolean\x0a\x09^ true",
  3148. referencedClasses: [],
  3149. //>>excludeEnd("ide");
  3150. messageSends: []
  3151. }),
  3152. $globals.Boolean);
  3153. $core.addMethod(
  3154. $core.method({
  3155. selector: "isImmutable",
  3156. protocol: 'testing',
  3157. fn: function (){
  3158. var self=this;
  3159. return true;
  3160. },
  3161. //>>excludeStart("ide", pragmas.excludeIdeData);
  3162. args: [],
  3163. source: "isImmutable\x0a\x09^ true",
  3164. referencedClasses: [],
  3165. //>>excludeEnd("ide");
  3166. messageSends: []
  3167. }),
  3168. $globals.Boolean);
  3169. $core.addMethod(
  3170. $core.method({
  3171. selector: "not",
  3172. protocol: 'controlling',
  3173. fn: function (){
  3174. var self=this;
  3175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3176. return $core.withContext(function($ctx1) {
  3177. //>>excludeEnd("ctx");
  3178. var $1;
  3179. $1=self.__eq(false);
  3180. return $1;
  3181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3182. }, function($ctx1) {$ctx1.fill(self,"not",{},$globals.Boolean)});
  3183. //>>excludeEnd("ctx");
  3184. },
  3185. //>>excludeStart("ide", pragmas.excludeIdeData);
  3186. args: [],
  3187. source: "not\x0a\x09^ self = false",
  3188. referencedClasses: [],
  3189. //>>excludeEnd("ide");
  3190. messageSends: ["="]
  3191. }),
  3192. $globals.Boolean);
  3193. $core.addMethod(
  3194. $core.method({
  3195. selector: "or:",
  3196. protocol: 'controlling',
  3197. fn: function (aBlock){
  3198. var self=this;
  3199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3200. return $core.withContext(function($ctx1) {
  3201. //>>excludeEnd("ctx");
  3202. var $2,$1;
  3203. $2=self.__eq(true);
  3204. $1=$recv($2)._ifTrue_ifFalse_((function(){
  3205. return true;
  3206. }),aBlock);
  3207. return $1;
  3208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3209. }, function($ctx1) {$ctx1.fill(self,"or:",{aBlock:aBlock},$globals.Boolean)});
  3210. //>>excludeEnd("ctx");
  3211. },
  3212. //>>excludeStart("ide", pragmas.excludeIdeData);
  3213. args: ["aBlock"],
  3214. source: "or: aBlock\x0a\x09^ self = true\x0a\x09\x09ifTrue: [ true ]\x0a\x09\x09ifFalse: aBlock",
  3215. referencedClasses: [],
  3216. //>>excludeEnd("ide");
  3217. messageSends: ["ifTrue:ifFalse:", "="]
  3218. }),
  3219. $globals.Boolean);
  3220. $core.addMethod(
  3221. $core.method({
  3222. selector: "printOn:",
  3223. protocol: 'printing',
  3224. fn: function (aStream){
  3225. var self=this;
  3226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3227. return $core.withContext(function($ctx1) {
  3228. //>>excludeEnd("ctx");
  3229. $recv(aStream)._nextPutAll_(self._asString());
  3230. return self;
  3231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3232. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Boolean)});
  3233. //>>excludeEnd("ctx");
  3234. },
  3235. //>>excludeStart("ide", pragmas.excludeIdeData);
  3236. args: ["aStream"],
  3237. source: "printOn: aStream\x0a\x09aStream nextPutAll: self asString",
  3238. referencedClasses: [],
  3239. //>>excludeEnd("ide");
  3240. messageSends: ["nextPutAll:", "asString"]
  3241. }),
  3242. $globals.Boolean);
  3243. $core.addMethod(
  3244. $core.method({
  3245. selector: "shallowCopy",
  3246. protocol: 'copying',
  3247. fn: function (){
  3248. var self=this;
  3249. return self;
  3250. },
  3251. //>>excludeStart("ide", pragmas.excludeIdeData);
  3252. args: [],
  3253. source: "shallowCopy\x0a\x09^ self",
  3254. referencedClasses: [],
  3255. //>>excludeEnd("ide");
  3256. messageSends: []
  3257. }),
  3258. $globals.Boolean);
  3259. $core.addMethod(
  3260. $core.method({
  3261. selector: "|",
  3262. protocol: 'controlling',
  3263. fn: function (aBoolean){
  3264. var self=this;
  3265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3266. return $core.withContext(function($ctx1) {
  3267. //>>excludeEnd("ctx");
  3268. if(self == true) {
  3269. return true;
  3270. } else {
  3271. return aBoolean;
  3272. }
  3273. ;
  3274. return self;
  3275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3276. }, function($ctx1) {$ctx1.fill(self,"|",{aBoolean:aBoolean},$globals.Boolean)});
  3277. //>>excludeEnd("ctx");
  3278. },
  3279. //>>excludeStart("ide", pragmas.excludeIdeData);
  3280. args: ["aBoolean"],
  3281. 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>",
  3282. referencedClasses: [],
  3283. //>>excludeEnd("ide");
  3284. messageSends: []
  3285. }),
  3286. $globals.Boolean);
  3287. $core.addClass('Date', $globals.Object, [], 'Kernel-Objects');
  3288. //>>excludeStart("ide", pragmas.excludeIdeData);
  3289. $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.).";
  3290. //>>excludeEnd("ide");
  3291. $core.addMethod(
  3292. $core.method({
  3293. selector: "+",
  3294. protocol: 'arithmetic',
  3295. fn: function (aDate){
  3296. var self=this;
  3297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3298. return $core.withContext(function($ctx1) {
  3299. //>>excludeEnd("ctx");
  3300. return self + aDate;
  3301. return self;
  3302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3303. }, function($ctx1) {$ctx1.fill(self,"+",{aDate:aDate},$globals.Date)});
  3304. //>>excludeEnd("ctx");
  3305. },
  3306. //>>excludeStart("ide", pragmas.excludeIdeData);
  3307. args: ["aDate"],
  3308. source: "+ aDate\x0a\x09<return self + aDate>",
  3309. referencedClasses: [],
  3310. //>>excludeEnd("ide");
  3311. messageSends: []
  3312. }),
  3313. $globals.Date);
  3314. $core.addMethod(
  3315. $core.method({
  3316. selector: "-",
  3317. protocol: 'arithmetic',
  3318. fn: function (aDate){
  3319. var self=this;
  3320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3321. return $core.withContext(function($ctx1) {
  3322. //>>excludeEnd("ctx");
  3323. return self - aDate;
  3324. return self;
  3325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3326. }, function($ctx1) {$ctx1.fill(self,"-",{aDate:aDate},$globals.Date)});
  3327. //>>excludeEnd("ctx");
  3328. },
  3329. //>>excludeStart("ide", pragmas.excludeIdeData);
  3330. args: ["aDate"],
  3331. source: "- aDate\x0a\x09<return self - aDate>",
  3332. referencedClasses: [],
  3333. //>>excludeEnd("ide");
  3334. messageSends: []
  3335. }),
  3336. $globals.Date);
  3337. $core.addMethod(
  3338. $core.method({
  3339. selector: "<",
  3340. protocol: 'comparing',
  3341. fn: function (aDate){
  3342. var self=this;
  3343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3344. return $core.withContext(function($ctx1) {
  3345. //>>excludeEnd("ctx");
  3346. return self < aDate;
  3347. return self;
  3348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3349. }, function($ctx1) {$ctx1.fill(self,"<",{aDate:aDate},$globals.Date)});
  3350. //>>excludeEnd("ctx");
  3351. },
  3352. //>>excludeStart("ide", pragmas.excludeIdeData);
  3353. args: ["aDate"],
  3354. source: "< aDate\x0a\x09<return self < aDate>",
  3355. referencedClasses: [],
  3356. //>>excludeEnd("ide");
  3357. messageSends: []
  3358. }),
  3359. $globals.Date);
  3360. $core.addMethod(
  3361. $core.method({
  3362. selector: "<=",
  3363. protocol: 'comparing',
  3364. fn: function (aDate){
  3365. var self=this;
  3366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3367. return $core.withContext(function($ctx1) {
  3368. //>>excludeEnd("ctx");
  3369. return self <= aDate;
  3370. return self;
  3371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3372. }, function($ctx1) {$ctx1.fill(self,"<=",{aDate:aDate},$globals.Date)});
  3373. //>>excludeEnd("ctx");
  3374. },
  3375. //>>excludeStart("ide", pragmas.excludeIdeData);
  3376. args: ["aDate"],
  3377. source: "<= aDate\x0a\x09<return self <= aDate>",
  3378. referencedClasses: [],
  3379. //>>excludeEnd("ide");
  3380. messageSends: []
  3381. }),
  3382. $globals.Date);
  3383. $core.addMethod(
  3384. $core.method({
  3385. selector: ">",
  3386. protocol: 'comparing',
  3387. fn: function (aDate){
  3388. var self=this;
  3389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3390. return $core.withContext(function($ctx1) {
  3391. //>>excludeEnd("ctx");
  3392. return self > aDate;
  3393. return self;
  3394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3395. }, function($ctx1) {$ctx1.fill(self,">",{aDate:aDate},$globals.Date)});
  3396. //>>excludeEnd("ctx");
  3397. },
  3398. //>>excludeStart("ide", pragmas.excludeIdeData);
  3399. args: ["aDate"],
  3400. source: "> aDate\x0a\x09<return self >> aDate>",
  3401. referencedClasses: [],
  3402. //>>excludeEnd("ide");
  3403. messageSends: []
  3404. }),
  3405. $globals.Date);
  3406. $core.addMethod(
  3407. $core.method({
  3408. selector: ">=",
  3409. protocol: 'comparing',
  3410. fn: function (aDate){
  3411. var self=this;
  3412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3413. return $core.withContext(function($ctx1) {
  3414. //>>excludeEnd("ctx");
  3415. return self >= aDate;
  3416. return self;
  3417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3418. }, function($ctx1) {$ctx1.fill(self,">=",{aDate:aDate},$globals.Date)});
  3419. //>>excludeEnd("ctx");
  3420. },
  3421. //>>excludeStart("ide", pragmas.excludeIdeData);
  3422. args: ["aDate"],
  3423. source: ">= aDate\x0a\x09<return self >>= aDate>",
  3424. referencedClasses: [],
  3425. //>>excludeEnd("ide");
  3426. messageSends: []
  3427. }),
  3428. $globals.Date);
  3429. $core.addMethod(
  3430. $core.method({
  3431. selector: "asDateString",
  3432. protocol: 'converting',
  3433. fn: function (){
  3434. var self=this;
  3435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3436. return $core.withContext(function($ctx1) {
  3437. //>>excludeEnd("ctx");
  3438. return self.toDateString();
  3439. return self;
  3440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3441. }, function($ctx1) {$ctx1.fill(self,"asDateString",{},$globals.Date)});
  3442. //>>excludeEnd("ctx");
  3443. },
  3444. //>>excludeStart("ide", pragmas.excludeIdeData);
  3445. args: [],
  3446. source: "asDateString\x0a\x09<return self.toDateString()>",
  3447. referencedClasses: [],
  3448. //>>excludeEnd("ide");
  3449. messageSends: []
  3450. }),
  3451. $globals.Date);
  3452. $core.addMethod(
  3453. $core.method({
  3454. selector: "asLocaleString",
  3455. protocol: 'converting',
  3456. fn: function (){
  3457. var self=this;
  3458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3459. return $core.withContext(function($ctx1) {
  3460. //>>excludeEnd("ctx");
  3461. return self.toLocaleString();
  3462. return self;
  3463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3464. }, function($ctx1) {$ctx1.fill(self,"asLocaleString",{},$globals.Date)});
  3465. //>>excludeEnd("ctx");
  3466. },
  3467. //>>excludeStart("ide", pragmas.excludeIdeData);
  3468. args: [],
  3469. source: "asLocaleString\x0a\x09<return self.toLocaleString()>",
  3470. referencedClasses: [],
  3471. //>>excludeEnd("ide");
  3472. messageSends: []
  3473. }),
  3474. $globals.Date);
  3475. $core.addMethod(
  3476. $core.method({
  3477. selector: "asMilliseconds",
  3478. protocol: 'converting',
  3479. fn: function (){
  3480. var self=this;
  3481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3482. return $core.withContext(function($ctx1) {
  3483. //>>excludeEnd("ctx");
  3484. var $1;
  3485. $1=self._time();
  3486. return $1;
  3487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3488. }, function($ctx1) {$ctx1.fill(self,"asMilliseconds",{},$globals.Date)});
  3489. //>>excludeEnd("ctx");
  3490. },
  3491. //>>excludeStart("ide", pragmas.excludeIdeData);
  3492. args: [],
  3493. source: "asMilliseconds\x0a\x09^ self time",
  3494. referencedClasses: [],
  3495. //>>excludeEnd("ide");
  3496. messageSends: ["time"]
  3497. }),
  3498. $globals.Date);
  3499. $core.addMethod(
  3500. $core.method({
  3501. selector: "asNumber",
  3502. protocol: 'converting',
  3503. fn: function (){
  3504. var self=this;
  3505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3506. return $core.withContext(function($ctx1) {
  3507. //>>excludeEnd("ctx");
  3508. var $1;
  3509. $1=self._asMilliseconds();
  3510. return $1;
  3511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3512. }, function($ctx1) {$ctx1.fill(self,"asNumber",{},$globals.Date)});
  3513. //>>excludeEnd("ctx");
  3514. },
  3515. //>>excludeStart("ide", pragmas.excludeIdeData);
  3516. args: [],
  3517. source: "asNumber\x0a\x09^ self asMilliseconds",
  3518. referencedClasses: [],
  3519. //>>excludeEnd("ide");
  3520. messageSends: ["asMilliseconds"]
  3521. }),
  3522. $globals.Date);
  3523. $core.addMethod(
  3524. $core.method({
  3525. selector: "asString",
  3526. protocol: 'converting',
  3527. fn: function (){
  3528. var self=this;
  3529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3530. return $core.withContext(function($ctx1) {
  3531. //>>excludeEnd("ctx");
  3532. return self.toString();
  3533. return self;
  3534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3535. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.Date)});
  3536. //>>excludeEnd("ctx");
  3537. },
  3538. //>>excludeStart("ide", pragmas.excludeIdeData);
  3539. args: [],
  3540. source: "asString\x0a\x09<return self.toString()>",
  3541. referencedClasses: [],
  3542. //>>excludeEnd("ide");
  3543. messageSends: []
  3544. }),
  3545. $globals.Date);
  3546. $core.addMethod(
  3547. $core.method({
  3548. selector: "asTimeString",
  3549. protocol: 'converting',
  3550. fn: function (){
  3551. var self=this;
  3552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3553. return $core.withContext(function($ctx1) {
  3554. //>>excludeEnd("ctx");
  3555. return self.toTimeString();
  3556. return self;
  3557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3558. }, function($ctx1) {$ctx1.fill(self,"asTimeString",{},$globals.Date)});
  3559. //>>excludeEnd("ctx");
  3560. },
  3561. //>>excludeStart("ide", pragmas.excludeIdeData);
  3562. args: [],
  3563. source: "asTimeString\x0a\x09<return self.toTimeString()>",
  3564. referencedClasses: [],
  3565. //>>excludeEnd("ide");
  3566. messageSends: []
  3567. }),
  3568. $globals.Date);
  3569. $core.addMethod(
  3570. $core.method({
  3571. selector: "day",
  3572. protocol: 'accessing',
  3573. fn: function (){
  3574. var self=this;
  3575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3576. return $core.withContext(function($ctx1) {
  3577. //>>excludeEnd("ctx");
  3578. var $1;
  3579. $1=self._dayOfWeek();
  3580. return $1;
  3581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3582. }, function($ctx1) {$ctx1.fill(self,"day",{},$globals.Date)});
  3583. //>>excludeEnd("ctx");
  3584. },
  3585. //>>excludeStart("ide", pragmas.excludeIdeData);
  3586. args: [],
  3587. source: "day\x0a\x09^ self dayOfWeek",
  3588. referencedClasses: [],
  3589. //>>excludeEnd("ide");
  3590. messageSends: ["dayOfWeek"]
  3591. }),
  3592. $globals.Date);
  3593. $core.addMethod(
  3594. $core.method({
  3595. selector: "day:",
  3596. protocol: 'accessing',
  3597. fn: function (aNumber){
  3598. var self=this;
  3599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3600. return $core.withContext(function($ctx1) {
  3601. //>>excludeEnd("ctx");
  3602. self._dayOfWeek_(aNumber);
  3603. return self;
  3604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3605. }, function($ctx1) {$ctx1.fill(self,"day:",{aNumber:aNumber},$globals.Date)});
  3606. //>>excludeEnd("ctx");
  3607. },
  3608. //>>excludeStart("ide", pragmas.excludeIdeData);
  3609. args: ["aNumber"],
  3610. source: "day: aNumber\x0a\x09self dayOfWeek: aNumber",
  3611. referencedClasses: [],
  3612. //>>excludeEnd("ide");
  3613. messageSends: ["dayOfWeek:"]
  3614. }),
  3615. $globals.Date);
  3616. $core.addMethod(
  3617. $core.method({
  3618. selector: "dayOfMonth",
  3619. protocol: 'accessing',
  3620. fn: function (){
  3621. var self=this;
  3622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3623. return $core.withContext(function($ctx1) {
  3624. //>>excludeEnd("ctx");
  3625. return self.getDate();
  3626. return self;
  3627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3628. }, function($ctx1) {$ctx1.fill(self,"dayOfMonth",{},$globals.Date)});
  3629. //>>excludeEnd("ctx");
  3630. },
  3631. //>>excludeStart("ide", pragmas.excludeIdeData);
  3632. args: [],
  3633. source: "dayOfMonth\x0a\x09<return self.getDate()>",
  3634. referencedClasses: [],
  3635. //>>excludeEnd("ide");
  3636. messageSends: []
  3637. }),
  3638. $globals.Date);
  3639. $core.addMethod(
  3640. $core.method({
  3641. selector: "dayOfMonth:",
  3642. protocol: 'accessing',
  3643. fn: function (aNumber){
  3644. var self=this;
  3645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3646. return $core.withContext(function($ctx1) {
  3647. //>>excludeEnd("ctx");
  3648. self.setDate(aNumber);
  3649. return self;
  3650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3651. }, function($ctx1) {$ctx1.fill(self,"dayOfMonth:",{aNumber:aNumber},$globals.Date)});
  3652. //>>excludeEnd("ctx");
  3653. },
  3654. //>>excludeStart("ide", pragmas.excludeIdeData);
  3655. args: ["aNumber"],
  3656. source: "dayOfMonth: aNumber\x0a\x09<self.setDate(aNumber)>",
  3657. referencedClasses: [],
  3658. //>>excludeEnd("ide");
  3659. messageSends: []
  3660. }),
  3661. $globals.Date);
  3662. $core.addMethod(
  3663. $core.method({
  3664. selector: "dayOfWeek",
  3665. protocol: 'accessing',
  3666. fn: function (){
  3667. var self=this;
  3668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3669. return $core.withContext(function($ctx1) {
  3670. //>>excludeEnd("ctx");
  3671. return self.getDay() + 1;
  3672. return self;
  3673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3674. }, function($ctx1) {$ctx1.fill(self,"dayOfWeek",{},$globals.Date)});
  3675. //>>excludeEnd("ctx");
  3676. },
  3677. //>>excludeStart("ide", pragmas.excludeIdeData);
  3678. args: [],
  3679. source: "dayOfWeek\x0a\x09<return self.getDay() + 1>",
  3680. referencedClasses: [],
  3681. //>>excludeEnd("ide");
  3682. messageSends: []
  3683. }),
  3684. $globals.Date);
  3685. $core.addMethod(
  3686. $core.method({
  3687. selector: "dayOfWeek:",
  3688. protocol: 'accessing',
  3689. fn: function (aNumber){
  3690. var self=this;
  3691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3692. return $core.withContext(function($ctx1) {
  3693. //>>excludeEnd("ctx");
  3694. return self.setDay(aNumber - 1);
  3695. return self;
  3696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3697. }, function($ctx1) {$ctx1.fill(self,"dayOfWeek:",{aNumber:aNumber},$globals.Date)});
  3698. //>>excludeEnd("ctx");
  3699. },
  3700. //>>excludeStart("ide", pragmas.excludeIdeData);
  3701. args: ["aNumber"],
  3702. source: "dayOfWeek: aNumber\x0a\x09<return self.setDay(aNumber - 1)>",
  3703. referencedClasses: [],
  3704. //>>excludeEnd("ide");
  3705. messageSends: []
  3706. }),
  3707. $globals.Date);
  3708. $core.addMethod(
  3709. $core.method({
  3710. selector: "hours",
  3711. protocol: 'accessing',
  3712. fn: function (){
  3713. var self=this;
  3714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3715. return $core.withContext(function($ctx1) {
  3716. //>>excludeEnd("ctx");
  3717. return self.getHours();
  3718. return self;
  3719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3720. }, function($ctx1) {$ctx1.fill(self,"hours",{},$globals.Date)});
  3721. //>>excludeEnd("ctx");
  3722. },
  3723. //>>excludeStart("ide", pragmas.excludeIdeData);
  3724. args: [],
  3725. source: "hours\x0a\x09<return self.getHours()>",
  3726. referencedClasses: [],
  3727. //>>excludeEnd("ide");
  3728. messageSends: []
  3729. }),
  3730. $globals.Date);
  3731. $core.addMethod(
  3732. $core.method({
  3733. selector: "hours:",
  3734. protocol: 'accessing',
  3735. fn: function (aNumber){
  3736. var self=this;
  3737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3738. return $core.withContext(function($ctx1) {
  3739. //>>excludeEnd("ctx");
  3740. self.setHours(aNumber);
  3741. return self;
  3742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3743. }, function($ctx1) {$ctx1.fill(self,"hours:",{aNumber:aNumber},$globals.Date)});
  3744. //>>excludeEnd("ctx");
  3745. },
  3746. //>>excludeStart("ide", pragmas.excludeIdeData);
  3747. args: ["aNumber"],
  3748. source: "hours: aNumber\x0a\x09<self.setHours(aNumber)>",
  3749. referencedClasses: [],
  3750. //>>excludeEnd("ide");
  3751. messageSends: []
  3752. }),
  3753. $globals.Date);
  3754. $core.addMethod(
  3755. $core.method({
  3756. selector: "milliseconds",
  3757. protocol: 'accessing',
  3758. fn: function (){
  3759. var self=this;
  3760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3761. return $core.withContext(function($ctx1) {
  3762. //>>excludeEnd("ctx");
  3763. return self.getMilliseconds();
  3764. return self;
  3765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3766. }, function($ctx1) {$ctx1.fill(self,"milliseconds",{},$globals.Date)});
  3767. //>>excludeEnd("ctx");
  3768. },
  3769. //>>excludeStart("ide", pragmas.excludeIdeData);
  3770. args: [],
  3771. source: "milliseconds\x0a\x09<return self.getMilliseconds()>",
  3772. referencedClasses: [],
  3773. //>>excludeEnd("ide");
  3774. messageSends: []
  3775. }),
  3776. $globals.Date);
  3777. $core.addMethod(
  3778. $core.method({
  3779. selector: "milliseconds:",
  3780. protocol: 'accessing',
  3781. fn: function (aNumber){
  3782. var self=this;
  3783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3784. return $core.withContext(function($ctx1) {
  3785. //>>excludeEnd("ctx");
  3786. self.setMilliseconds(aNumber);
  3787. return self;
  3788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3789. }, function($ctx1) {$ctx1.fill(self,"milliseconds:",{aNumber:aNumber},$globals.Date)});
  3790. //>>excludeEnd("ctx");
  3791. },
  3792. //>>excludeStart("ide", pragmas.excludeIdeData);
  3793. args: ["aNumber"],
  3794. source: "milliseconds: aNumber\x0a\x09<self.setMilliseconds(aNumber)>",
  3795. referencedClasses: [],
  3796. //>>excludeEnd("ide");
  3797. messageSends: []
  3798. }),
  3799. $globals.Date);
  3800. $core.addMethod(
  3801. $core.method({
  3802. selector: "minutes",
  3803. protocol: 'accessing',
  3804. fn: function (){
  3805. var self=this;
  3806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3807. return $core.withContext(function($ctx1) {
  3808. //>>excludeEnd("ctx");
  3809. return self.getMinutes();
  3810. return self;
  3811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3812. }, function($ctx1) {$ctx1.fill(self,"minutes",{},$globals.Date)});
  3813. //>>excludeEnd("ctx");
  3814. },
  3815. //>>excludeStart("ide", pragmas.excludeIdeData);
  3816. args: [],
  3817. source: "minutes\x0a\x09<return self.getMinutes()>",
  3818. referencedClasses: [],
  3819. //>>excludeEnd("ide");
  3820. messageSends: []
  3821. }),
  3822. $globals.Date);
  3823. $core.addMethod(
  3824. $core.method({
  3825. selector: "minutes:",
  3826. protocol: 'accessing',
  3827. fn: function (aNumber){
  3828. var self=this;
  3829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3830. return $core.withContext(function($ctx1) {
  3831. //>>excludeEnd("ctx");
  3832. self.setMinutes(aNumber);
  3833. return self;
  3834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3835. }, function($ctx1) {$ctx1.fill(self,"minutes:",{aNumber:aNumber},$globals.Date)});
  3836. //>>excludeEnd("ctx");
  3837. },
  3838. //>>excludeStart("ide", pragmas.excludeIdeData);
  3839. args: ["aNumber"],
  3840. source: "minutes: aNumber\x0a\x09<self.setMinutes(aNumber)>",
  3841. referencedClasses: [],
  3842. //>>excludeEnd("ide");
  3843. messageSends: []
  3844. }),
  3845. $globals.Date);
  3846. $core.addMethod(
  3847. $core.method({
  3848. selector: "month",
  3849. protocol: 'accessing',
  3850. fn: function (){
  3851. var self=this;
  3852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3853. return $core.withContext(function($ctx1) {
  3854. //>>excludeEnd("ctx");
  3855. return self.getMonth() + 1;
  3856. return self;
  3857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3858. }, function($ctx1) {$ctx1.fill(self,"month",{},$globals.Date)});
  3859. //>>excludeEnd("ctx");
  3860. },
  3861. //>>excludeStart("ide", pragmas.excludeIdeData);
  3862. args: [],
  3863. source: "month\x0a\x09<return self.getMonth() + 1>",
  3864. referencedClasses: [],
  3865. //>>excludeEnd("ide");
  3866. messageSends: []
  3867. }),
  3868. $globals.Date);
  3869. $core.addMethod(
  3870. $core.method({
  3871. selector: "month:",
  3872. protocol: 'accessing',
  3873. fn: function (aNumber){
  3874. var self=this;
  3875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3876. return $core.withContext(function($ctx1) {
  3877. //>>excludeEnd("ctx");
  3878. self.setMonth(aNumber - 1);
  3879. return self;
  3880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3881. }, function($ctx1) {$ctx1.fill(self,"month:",{aNumber:aNumber},$globals.Date)});
  3882. //>>excludeEnd("ctx");
  3883. },
  3884. //>>excludeStart("ide", pragmas.excludeIdeData);
  3885. args: ["aNumber"],
  3886. source: "month: aNumber\x0a\x09<self.setMonth(aNumber - 1)>",
  3887. referencedClasses: [],
  3888. //>>excludeEnd("ide");
  3889. messageSends: []
  3890. }),
  3891. $globals.Date);
  3892. $core.addMethod(
  3893. $core.method({
  3894. selector: "printOn:",
  3895. protocol: 'printing',
  3896. fn: function (aStream){
  3897. var self=this;
  3898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3899. return $core.withContext(function($ctx1) {
  3900. //>>excludeEnd("ctx");
  3901. $recv(aStream)._nextPutAll_(self._asString());
  3902. return self;
  3903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3904. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Date)});
  3905. //>>excludeEnd("ctx");
  3906. },
  3907. //>>excludeStart("ide", pragmas.excludeIdeData);
  3908. args: ["aStream"],
  3909. source: "printOn: aStream\x0a\x09aStream nextPutAll: self asString",
  3910. referencedClasses: [],
  3911. //>>excludeEnd("ide");
  3912. messageSends: ["nextPutAll:", "asString"]
  3913. }),
  3914. $globals.Date);
  3915. $core.addMethod(
  3916. $core.method({
  3917. selector: "seconds",
  3918. protocol: 'accessing',
  3919. fn: function (){
  3920. var self=this;
  3921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3922. return $core.withContext(function($ctx1) {
  3923. //>>excludeEnd("ctx");
  3924. return self.getSeconds();
  3925. return self;
  3926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3927. }, function($ctx1) {$ctx1.fill(self,"seconds",{},$globals.Date)});
  3928. //>>excludeEnd("ctx");
  3929. },
  3930. //>>excludeStart("ide", pragmas.excludeIdeData);
  3931. args: [],
  3932. source: "seconds\x0a\x09<return self.getSeconds()>",
  3933. referencedClasses: [],
  3934. //>>excludeEnd("ide");
  3935. messageSends: []
  3936. }),
  3937. $globals.Date);
  3938. $core.addMethod(
  3939. $core.method({
  3940. selector: "seconds:",
  3941. protocol: 'accessing',
  3942. fn: function (aNumber){
  3943. var self=this;
  3944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3945. return $core.withContext(function($ctx1) {
  3946. //>>excludeEnd("ctx");
  3947. self.setSeconds(aNumber);
  3948. return self;
  3949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3950. }, function($ctx1) {$ctx1.fill(self,"seconds:",{aNumber:aNumber},$globals.Date)});
  3951. //>>excludeEnd("ctx");
  3952. },
  3953. //>>excludeStart("ide", pragmas.excludeIdeData);
  3954. args: ["aNumber"],
  3955. source: "seconds: aNumber\x0a\x09<self.setSeconds(aNumber)>",
  3956. referencedClasses: [],
  3957. //>>excludeEnd("ide");
  3958. messageSends: []
  3959. }),
  3960. $globals.Date);
  3961. $core.addMethod(
  3962. $core.method({
  3963. selector: "time",
  3964. protocol: 'accessing',
  3965. fn: function (){
  3966. var self=this;
  3967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3968. return $core.withContext(function($ctx1) {
  3969. //>>excludeEnd("ctx");
  3970. return self.getTime();
  3971. return self;
  3972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3973. }, function($ctx1) {$ctx1.fill(self,"time",{},$globals.Date)});
  3974. //>>excludeEnd("ctx");
  3975. },
  3976. //>>excludeStart("ide", pragmas.excludeIdeData);
  3977. args: [],
  3978. source: "time\x0a\x09<return self.getTime()>",
  3979. referencedClasses: [],
  3980. //>>excludeEnd("ide");
  3981. messageSends: []
  3982. }),
  3983. $globals.Date);
  3984. $core.addMethod(
  3985. $core.method({
  3986. selector: "time:",
  3987. protocol: 'accessing',
  3988. fn: function (aNumber){
  3989. var self=this;
  3990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3991. return $core.withContext(function($ctx1) {
  3992. //>>excludeEnd("ctx");
  3993. self.setTime(aNumber);
  3994. return self;
  3995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3996. }, function($ctx1) {$ctx1.fill(self,"time:",{aNumber:aNumber},$globals.Date)});
  3997. //>>excludeEnd("ctx");
  3998. },
  3999. //>>excludeStart("ide", pragmas.excludeIdeData);
  4000. args: ["aNumber"],
  4001. source: "time: aNumber\x0a\x09<self.setTime(aNumber)>",
  4002. referencedClasses: [],
  4003. //>>excludeEnd("ide");
  4004. messageSends: []
  4005. }),
  4006. $globals.Date);
  4007. $core.addMethod(
  4008. $core.method({
  4009. selector: "year",
  4010. protocol: 'accessing',
  4011. fn: function (){
  4012. var self=this;
  4013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4014. return $core.withContext(function($ctx1) {
  4015. //>>excludeEnd("ctx");
  4016. return self.getFullYear();
  4017. return self;
  4018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4019. }, function($ctx1) {$ctx1.fill(self,"year",{},$globals.Date)});
  4020. //>>excludeEnd("ctx");
  4021. },
  4022. //>>excludeStart("ide", pragmas.excludeIdeData);
  4023. args: [],
  4024. source: "year\x0a\x09<return self.getFullYear()>",
  4025. referencedClasses: [],
  4026. //>>excludeEnd("ide");
  4027. messageSends: []
  4028. }),
  4029. $globals.Date);
  4030. $core.addMethod(
  4031. $core.method({
  4032. selector: "year:",
  4033. protocol: 'accessing',
  4034. fn: function (aNumber){
  4035. var self=this;
  4036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4037. return $core.withContext(function($ctx1) {
  4038. //>>excludeEnd("ctx");
  4039. self.setFullYear(aNumber);
  4040. return self;
  4041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4042. }, function($ctx1) {$ctx1.fill(self,"year:",{aNumber:aNumber},$globals.Date)});
  4043. //>>excludeEnd("ctx");
  4044. },
  4045. //>>excludeStart("ide", pragmas.excludeIdeData);
  4046. args: ["aNumber"],
  4047. source: "year: aNumber\x0a\x09<self.setFullYear(aNumber)>",
  4048. referencedClasses: [],
  4049. //>>excludeEnd("ide");
  4050. messageSends: []
  4051. }),
  4052. $globals.Date);
  4053. $core.addMethod(
  4054. $core.method({
  4055. selector: "classTag",
  4056. protocol: 'accessing',
  4057. fn: function (){
  4058. var self=this;
  4059. return "magnitude";
  4060. },
  4061. //>>excludeStart("ide", pragmas.excludeIdeData);
  4062. args: [],
  4063. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'magnitude'",
  4064. referencedClasses: [],
  4065. //>>excludeEnd("ide");
  4066. messageSends: []
  4067. }),
  4068. $globals.Date.klass);
  4069. $core.addMethod(
  4070. $core.method({
  4071. selector: "fromMilliseconds:",
  4072. protocol: 'instance creation',
  4073. fn: function (aNumber){
  4074. var self=this;
  4075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4076. return $core.withContext(function($ctx1) {
  4077. //>>excludeEnd("ctx");
  4078. var $1;
  4079. $1=self._new_(aNumber);
  4080. return $1;
  4081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4082. }, function($ctx1) {$ctx1.fill(self,"fromMilliseconds:",{aNumber:aNumber},$globals.Date.klass)});
  4083. //>>excludeEnd("ctx");
  4084. },
  4085. //>>excludeStart("ide", pragmas.excludeIdeData);
  4086. args: ["aNumber"],
  4087. source: "fromMilliseconds: aNumber\x0a\x09^ self new: aNumber",
  4088. referencedClasses: [],
  4089. //>>excludeEnd("ide");
  4090. messageSends: ["new:"]
  4091. }),
  4092. $globals.Date.klass);
  4093. $core.addMethod(
  4094. $core.method({
  4095. selector: "fromSeconds:",
  4096. protocol: 'instance creation',
  4097. fn: function (aNumber){
  4098. var self=this;
  4099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4100. return $core.withContext(function($ctx1) {
  4101. //>>excludeEnd("ctx");
  4102. var $1;
  4103. $1=self._fromMilliseconds_($recv(aNumber).__star((1000)));
  4104. return $1;
  4105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4106. }, function($ctx1) {$ctx1.fill(self,"fromSeconds:",{aNumber:aNumber},$globals.Date.klass)});
  4107. //>>excludeEnd("ctx");
  4108. },
  4109. //>>excludeStart("ide", pragmas.excludeIdeData);
  4110. args: ["aNumber"],
  4111. source: "fromSeconds: aNumber\x0a\x09^ self fromMilliseconds: aNumber * 1000",
  4112. referencedClasses: [],
  4113. //>>excludeEnd("ide");
  4114. messageSends: ["fromMilliseconds:", "*"]
  4115. }),
  4116. $globals.Date.klass);
  4117. $core.addMethod(
  4118. $core.method({
  4119. selector: "fromString:",
  4120. protocol: 'instance creation',
  4121. fn: function (aString){
  4122. var self=this;
  4123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4124. return $core.withContext(function($ctx1) {
  4125. //>>excludeEnd("ctx");
  4126. var $1;
  4127. $1=self._new_(aString);
  4128. return $1;
  4129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4130. }, function($ctx1) {$ctx1.fill(self,"fromString:",{aString:aString},$globals.Date.klass)});
  4131. //>>excludeEnd("ctx");
  4132. },
  4133. //>>excludeStart("ide", pragmas.excludeIdeData);
  4134. args: ["aString"],
  4135. source: "fromString: aString\x0a\x09\x22Example: Date fromString('2011/04/15 00:00:00')\x22\x0a\x09^ self new: aString",
  4136. referencedClasses: [],
  4137. //>>excludeEnd("ide");
  4138. messageSends: ["new:"]
  4139. }),
  4140. $globals.Date.klass);
  4141. $core.addMethod(
  4142. $core.method({
  4143. selector: "millisecondsToRun:",
  4144. protocol: 'instance creation',
  4145. fn: function (aBlock){
  4146. var self=this;
  4147. var t;
  4148. function $Date(){return $globals.Date||(typeof Date=="undefined"?nil:Date)}
  4149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4150. return $core.withContext(function($ctx1) {
  4151. //>>excludeEnd("ctx");
  4152. var $1;
  4153. t=$recv($Date())._now();
  4154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4155. $ctx1.sendIdx["now"]=1;
  4156. //>>excludeEnd("ctx");
  4157. $recv(aBlock)._value();
  4158. $1=$recv($recv($Date())._now()).__minus(t);
  4159. return $1;
  4160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4161. }, function($ctx1) {$ctx1.fill(self,"millisecondsToRun:",{aBlock:aBlock,t:t},$globals.Date.klass)});
  4162. //>>excludeEnd("ctx");
  4163. },
  4164. //>>excludeStart("ide", pragmas.excludeIdeData);
  4165. args: ["aBlock"],
  4166. source: "millisecondsToRun: aBlock\x0a\x09| t |\x0a\x09t := Date now.\x0a\x09aBlock value.\x0a\x09^ Date now - t",
  4167. referencedClasses: ["Date"],
  4168. //>>excludeEnd("ide");
  4169. messageSends: ["now", "value", "-"]
  4170. }),
  4171. $globals.Date.klass);
  4172. $core.addMethod(
  4173. $core.method({
  4174. selector: "new:",
  4175. protocol: 'instance creation',
  4176. fn: function (anObject){
  4177. var self=this;
  4178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4179. return $core.withContext(function($ctx1) {
  4180. //>>excludeEnd("ctx");
  4181. return new Date(anObject);
  4182. return self;
  4183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4184. }, function($ctx1) {$ctx1.fill(self,"new:",{anObject:anObject},$globals.Date.klass)});
  4185. //>>excludeEnd("ctx");
  4186. },
  4187. //>>excludeStart("ide", pragmas.excludeIdeData);
  4188. args: ["anObject"],
  4189. source: "new: anObject\x0a\x09<return new Date(anObject)>",
  4190. referencedClasses: [],
  4191. //>>excludeEnd("ide");
  4192. messageSends: []
  4193. }),
  4194. $globals.Date.klass);
  4195. $core.addMethod(
  4196. $core.method({
  4197. selector: "now",
  4198. protocol: 'instance creation',
  4199. fn: function (){
  4200. var self=this;
  4201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4202. return $core.withContext(function($ctx1) {
  4203. //>>excludeEnd("ctx");
  4204. var $1;
  4205. $1=self._today();
  4206. return $1;
  4207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4208. }, function($ctx1) {$ctx1.fill(self,"now",{},$globals.Date.klass)});
  4209. //>>excludeEnd("ctx");
  4210. },
  4211. //>>excludeStart("ide", pragmas.excludeIdeData);
  4212. args: [],
  4213. source: "now\x0a\x09^ self today",
  4214. referencedClasses: [],
  4215. //>>excludeEnd("ide");
  4216. messageSends: ["today"]
  4217. }),
  4218. $globals.Date.klass);
  4219. $core.addMethod(
  4220. $core.method({
  4221. selector: "today",
  4222. protocol: 'instance creation',
  4223. fn: function (){
  4224. var self=this;
  4225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4226. return $core.withContext(function($ctx1) {
  4227. //>>excludeEnd("ctx");
  4228. var $1;
  4229. $1=self._new();
  4230. return $1;
  4231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4232. }, function($ctx1) {$ctx1.fill(self,"today",{},$globals.Date.klass)});
  4233. //>>excludeEnd("ctx");
  4234. },
  4235. //>>excludeStart("ide", pragmas.excludeIdeData);
  4236. args: [],
  4237. source: "today\x0a\x09^ self new",
  4238. referencedClasses: [],
  4239. //>>excludeEnd("ide");
  4240. messageSends: ["new"]
  4241. }),
  4242. $globals.Date.klass);
  4243. $core.addClass('Number', $globals.Object, [], 'Kernel-Objects');
  4244. //>>excludeStart("ide", pragmas.excludeIdeData);
  4245. $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 ].";
  4246. //>>excludeEnd("ide");
  4247. $core.addMethod(
  4248. $core.method({
  4249. selector: "&",
  4250. protocol: 'converting',
  4251. fn: function (aNumber){
  4252. var self=this;
  4253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4254. return $core.withContext(function($ctx1) {
  4255. //>>excludeEnd("ctx");
  4256. return self & aNumber;
  4257. return self;
  4258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4259. }, function($ctx1) {$ctx1.fill(self,"&",{aNumber:aNumber},$globals.Number)});
  4260. //>>excludeEnd("ctx");
  4261. },
  4262. //>>excludeStart("ide", pragmas.excludeIdeData);
  4263. args: ["aNumber"],
  4264. source: "& aNumber\x0a\x09<return self & aNumber>",
  4265. referencedClasses: [],
  4266. //>>excludeEnd("ide");
  4267. messageSends: []
  4268. }),
  4269. $globals.Number);
  4270. $core.addMethod(
  4271. $core.method({
  4272. selector: "*",
  4273. protocol: 'arithmetic',
  4274. fn: function (aNumber){
  4275. var self=this;
  4276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4277. return $core.withContext(function($ctx1) {
  4278. //>>excludeEnd("ctx");
  4279. return self * aNumber;
  4280. return self;
  4281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4282. }, function($ctx1) {$ctx1.fill(self,"*",{aNumber:aNumber},$globals.Number)});
  4283. //>>excludeEnd("ctx");
  4284. },
  4285. //>>excludeStart("ide", pragmas.excludeIdeData);
  4286. args: ["aNumber"],
  4287. source: "* aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self * aNumber>",
  4288. referencedClasses: [],
  4289. //>>excludeEnd("ide");
  4290. messageSends: []
  4291. }),
  4292. $globals.Number);
  4293. $core.addMethod(
  4294. $core.method({
  4295. selector: "**",
  4296. protocol: 'mathematical functions',
  4297. fn: function (exponent){
  4298. var self=this;
  4299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4300. return $core.withContext(function($ctx1) {
  4301. //>>excludeEnd("ctx");
  4302. var $1;
  4303. $1=self._raisedTo_(exponent);
  4304. return $1;
  4305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4306. }, function($ctx1) {$ctx1.fill(self,"**",{exponent:exponent},$globals.Number)});
  4307. //>>excludeEnd("ctx");
  4308. },
  4309. //>>excludeStart("ide", pragmas.excludeIdeData);
  4310. args: ["exponent"],
  4311. source: "** exponent\x0a\x09^ self raisedTo: exponent",
  4312. referencedClasses: [],
  4313. //>>excludeEnd("ide");
  4314. messageSends: ["raisedTo:"]
  4315. }),
  4316. $globals.Number);
  4317. $core.addMethod(
  4318. $core.method({
  4319. selector: "+",
  4320. protocol: 'arithmetic',
  4321. fn: function (aNumber){
  4322. var self=this;
  4323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4324. return $core.withContext(function($ctx1) {
  4325. //>>excludeEnd("ctx");
  4326. return self + aNumber;
  4327. return self;
  4328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4329. }, function($ctx1) {$ctx1.fill(self,"+",{aNumber:aNumber},$globals.Number)});
  4330. //>>excludeEnd("ctx");
  4331. },
  4332. //>>excludeStart("ide", pragmas.excludeIdeData);
  4333. args: ["aNumber"],
  4334. source: "+ aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self + aNumber>",
  4335. referencedClasses: [],
  4336. //>>excludeEnd("ide");
  4337. messageSends: []
  4338. }),
  4339. $globals.Number);
  4340. $core.addMethod(
  4341. $core.method({
  4342. selector: "-",
  4343. protocol: 'arithmetic',
  4344. fn: function (aNumber){
  4345. var self=this;
  4346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4347. return $core.withContext(function($ctx1) {
  4348. //>>excludeEnd("ctx");
  4349. return self - aNumber;
  4350. return self;
  4351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4352. }, function($ctx1) {$ctx1.fill(self,"-",{aNumber:aNumber},$globals.Number)});
  4353. //>>excludeEnd("ctx");
  4354. },
  4355. //>>excludeStart("ide", pragmas.excludeIdeData);
  4356. args: ["aNumber"],
  4357. source: "- aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self - aNumber>",
  4358. referencedClasses: [],
  4359. //>>excludeEnd("ide");
  4360. messageSends: []
  4361. }),
  4362. $globals.Number);
  4363. $core.addMethod(
  4364. $core.method({
  4365. selector: "/",
  4366. protocol: 'arithmetic',
  4367. fn: function (aNumber){
  4368. var self=this;
  4369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4370. return $core.withContext(function($ctx1) {
  4371. //>>excludeEnd("ctx");
  4372. return self / aNumber;
  4373. return self;
  4374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4375. }, function($ctx1) {$ctx1.fill(self,"/",{aNumber:aNumber},$globals.Number)});
  4376. //>>excludeEnd("ctx");
  4377. },
  4378. //>>excludeStart("ide", pragmas.excludeIdeData);
  4379. args: ["aNumber"],
  4380. source: "/ aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self / aNumber>",
  4381. referencedClasses: [],
  4382. //>>excludeEnd("ide");
  4383. messageSends: []
  4384. }),
  4385. $globals.Number);
  4386. $core.addMethod(
  4387. $core.method({
  4388. selector: "//",
  4389. protocol: 'arithmetic',
  4390. fn: function (aNumber){
  4391. var self=this;
  4392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4393. return $core.withContext(function($ctx1) {
  4394. //>>excludeEnd("ctx");
  4395. var $1;
  4396. $1=$recv(self.__slash(aNumber))._floor();
  4397. return $1;
  4398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4399. }, function($ctx1) {$ctx1.fill(self,"//",{aNumber:aNumber},$globals.Number)});
  4400. //>>excludeEnd("ctx");
  4401. },
  4402. //>>excludeStart("ide", pragmas.excludeIdeData);
  4403. args: ["aNumber"],
  4404. source: "// aNumber\x0a\x09^ (self / aNumber) floor",
  4405. referencedClasses: [],
  4406. //>>excludeEnd("ide");
  4407. messageSends: ["floor", "/"]
  4408. }),
  4409. $globals.Number);
  4410. $core.addMethod(
  4411. $core.method({
  4412. selector: "<",
  4413. protocol: 'comparing',
  4414. fn: function (aNumber){
  4415. var self=this;
  4416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4417. return $core.withContext(function($ctx1) {
  4418. //>>excludeEnd("ctx");
  4419. return self < aNumber;
  4420. return self;
  4421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4422. }, function($ctx1) {$ctx1.fill(self,"<",{aNumber:aNumber},$globals.Number)});
  4423. //>>excludeEnd("ctx");
  4424. },
  4425. //>>excludeStart("ide", pragmas.excludeIdeData);
  4426. args: ["aNumber"],
  4427. source: "< aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self < aNumber>",
  4428. referencedClasses: [],
  4429. //>>excludeEnd("ide");
  4430. messageSends: []
  4431. }),
  4432. $globals.Number);
  4433. $core.addMethod(
  4434. $core.method({
  4435. selector: "<=",
  4436. protocol: 'comparing',
  4437. fn: function (aNumber){
  4438. var self=this;
  4439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4440. return $core.withContext(function($ctx1) {
  4441. //>>excludeEnd("ctx");
  4442. return self <= aNumber;
  4443. return self;
  4444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4445. }, function($ctx1) {$ctx1.fill(self,"<=",{aNumber:aNumber},$globals.Number)});
  4446. //>>excludeEnd("ctx");
  4447. },
  4448. //>>excludeStart("ide", pragmas.excludeIdeData);
  4449. args: ["aNumber"],
  4450. source: "<= aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self <= aNumber>",
  4451. referencedClasses: [],
  4452. //>>excludeEnd("ide");
  4453. messageSends: []
  4454. }),
  4455. $globals.Number);
  4456. $core.addMethod(
  4457. $core.method({
  4458. selector: "=",
  4459. protocol: 'comparing',
  4460. fn: function (aNumber){
  4461. var self=this;
  4462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4463. return $core.withContext(function($ctx1) {
  4464. //>>excludeEnd("ctx");
  4465. return aNumber != null &&
  4466. typeof aNumber._isNumber === "function" &&
  4467. aNumber._isNumber() &&
  4468. Number(self) == aNumber
  4469. ;
  4470. return self;
  4471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4472. }, function($ctx1) {$ctx1.fill(self,"=",{aNumber:aNumber},$globals.Number)});
  4473. //>>excludeEnd("ctx");
  4474. },
  4475. //>>excludeStart("ide", pragmas.excludeIdeData);
  4476. args: ["aNumber"],
  4477. 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>",
  4478. referencedClasses: [],
  4479. //>>excludeEnd("ide");
  4480. messageSends: []
  4481. }),
  4482. $globals.Number);
  4483. $core.addMethod(
  4484. $core.method({
  4485. selector: ">",
  4486. protocol: 'comparing',
  4487. fn: function (aNumber){
  4488. var self=this;
  4489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4490. return $core.withContext(function($ctx1) {
  4491. //>>excludeEnd("ctx");
  4492. return self > aNumber;
  4493. return self;
  4494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4495. }, function($ctx1) {$ctx1.fill(self,">",{aNumber:aNumber},$globals.Number)});
  4496. //>>excludeEnd("ctx");
  4497. },
  4498. //>>excludeStart("ide", pragmas.excludeIdeData);
  4499. args: ["aNumber"],
  4500. source: "> aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self >> aNumber>",
  4501. referencedClasses: [],
  4502. //>>excludeEnd("ide");
  4503. messageSends: []
  4504. }),
  4505. $globals.Number);
  4506. $core.addMethod(
  4507. $core.method({
  4508. selector: ">=",
  4509. protocol: 'comparing',
  4510. fn: function (aNumber){
  4511. var self=this;
  4512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4513. return $core.withContext(function($ctx1) {
  4514. //>>excludeEnd("ctx");
  4515. return self >= aNumber;
  4516. return self;
  4517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4518. }, function($ctx1) {$ctx1.fill(self,">=",{aNumber:aNumber},$globals.Number)});
  4519. //>>excludeEnd("ctx");
  4520. },
  4521. //>>excludeStart("ide", pragmas.excludeIdeData);
  4522. args: ["aNumber"],
  4523. source: ">= aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self >>= aNumber>",
  4524. referencedClasses: [],
  4525. //>>excludeEnd("ide");
  4526. messageSends: []
  4527. }),
  4528. $globals.Number);
  4529. $core.addMethod(
  4530. $core.method({
  4531. selector: "@",
  4532. protocol: 'converting',
  4533. fn: function (aNumber){
  4534. var self=this;
  4535. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  4536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4537. return $core.withContext(function($ctx1) {
  4538. //>>excludeEnd("ctx");
  4539. var $1;
  4540. $1=$recv($Point())._x_y_(self,aNumber);
  4541. return $1;
  4542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4543. }, function($ctx1) {$ctx1.fill(self,"@",{aNumber:aNumber},$globals.Number)});
  4544. //>>excludeEnd("ctx");
  4545. },
  4546. //>>excludeStart("ide", pragmas.excludeIdeData);
  4547. args: ["aNumber"],
  4548. source: "@ aNumber\x0a\x09^ Point x: self y: aNumber",
  4549. referencedClasses: ["Point"],
  4550. //>>excludeEnd("ide");
  4551. messageSends: ["x:y:"]
  4552. }),
  4553. $globals.Number);
  4554. $core.addMethod(
  4555. $core.method({
  4556. selector: "\x5c\x5c",
  4557. protocol: 'arithmetic',
  4558. fn: function (aNumber){
  4559. var self=this;
  4560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4561. return $core.withContext(function($ctx1) {
  4562. //>>excludeEnd("ctx");
  4563. return self % aNumber;
  4564. return self;
  4565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4566. }, function($ctx1) {$ctx1.fill(self,"\x5c\x5c",{aNumber:aNumber},$globals.Number)});
  4567. //>>excludeEnd("ctx");
  4568. },
  4569. //>>excludeStart("ide", pragmas.excludeIdeData);
  4570. args: ["aNumber"],
  4571. source: "\x5c\x5c aNumber\x0a\x09<return self % aNumber>",
  4572. referencedClasses: [],
  4573. //>>excludeEnd("ide");
  4574. messageSends: []
  4575. }),
  4576. $globals.Number);
  4577. $core.addMethod(
  4578. $core.method({
  4579. selector: "abs",
  4580. protocol: 'arithmetic',
  4581. fn: function (){
  4582. var self=this;
  4583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4584. return $core.withContext(function($ctx1) {
  4585. //>>excludeEnd("ctx");
  4586. return Math.abs(self);;
  4587. return self;
  4588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4589. }, function($ctx1) {$ctx1.fill(self,"abs",{},$globals.Number)});
  4590. //>>excludeEnd("ctx");
  4591. },
  4592. //>>excludeStart("ide", pragmas.excludeIdeData);
  4593. args: [],
  4594. source: "abs\x0a\x09<return Math.abs(self);>",
  4595. referencedClasses: [],
  4596. //>>excludeEnd("ide");
  4597. messageSends: []
  4598. }),
  4599. $globals.Number);
  4600. $core.addMethod(
  4601. $core.method({
  4602. selector: "arcCos",
  4603. protocol: 'mathematical functions',
  4604. fn: function (){
  4605. var self=this;
  4606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4607. return $core.withContext(function($ctx1) {
  4608. //>>excludeEnd("ctx");
  4609. return Math.acos(self);;
  4610. return self;
  4611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4612. }, function($ctx1) {$ctx1.fill(self,"arcCos",{},$globals.Number)});
  4613. //>>excludeEnd("ctx");
  4614. },
  4615. //>>excludeStart("ide", pragmas.excludeIdeData);
  4616. args: [],
  4617. source: "arcCos\x0a\x09<return Math.acos(self);>",
  4618. referencedClasses: [],
  4619. //>>excludeEnd("ide");
  4620. messageSends: []
  4621. }),
  4622. $globals.Number);
  4623. $core.addMethod(
  4624. $core.method({
  4625. selector: "arcSin",
  4626. protocol: 'mathematical functions',
  4627. fn: function (){
  4628. var self=this;
  4629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4630. return $core.withContext(function($ctx1) {
  4631. //>>excludeEnd("ctx");
  4632. return Math.asin(self);;
  4633. return self;
  4634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4635. }, function($ctx1) {$ctx1.fill(self,"arcSin",{},$globals.Number)});
  4636. //>>excludeEnd("ctx");
  4637. },
  4638. //>>excludeStart("ide", pragmas.excludeIdeData);
  4639. args: [],
  4640. source: "arcSin\x0a\x09<return Math.asin(self);>",
  4641. referencedClasses: [],
  4642. //>>excludeEnd("ide");
  4643. messageSends: []
  4644. }),
  4645. $globals.Number);
  4646. $core.addMethod(
  4647. $core.method({
  4648. selector: "arcTan",
  4649. protocol: 'mathematical functions',
  4650. fn: function (){
  4651. var self=this;
  4652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4653. return $core.withContext(function($ctx1) {
  4654. //>>excludeEnd("ctx");
  4655. return Math.atan(self);;
  4656. return self;
  4657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4658. }, function($ctx1) {$ctx1.fill(self,"arcTan",{},$globals.Number)});
  4659. //>>excludeEnd("ctx");
  4660. },
  4661. //>>excludeStart("ide", pragmas.excludeIdeData);
  4662. args: [],
  4663. source: "arcTan\x0a\x09<return Math.atan(self);>",
  4664. referencedClasses: [],
  4665. //>>excludeEnd("ide");
  4666. messageSends: []
  4667. }),
  4668. $globals.Number);
  4669. $core.addMethod(
  4670. $core.method({
  4671. selector: "asJSON",
  4672. protocol: 'converting',
  4673. fn: function (){
  4674. var self=this;
  4675. return self;
  4676. },
  4677. //>>excludeStart("ide", pragmas.excludeIdeData);
  4678. args: [],
  4679. source: "asJSON\x0a\x09^ self",
  4680. referencedClasses: [],
  4681. //>>excludeEnd("ide");
  4682. messageSends: []
  4683. }),
  4684. $globals.Number);
  4685. $core.addMethod(
  4686. $core.method({
  4687. selector: "asJavascript",
  4688. protocol: 'converting',
  4689. fn: function (){
  4690. var self=this;
  4691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4692. return $core.withContext(function($ctx1) {
  4693. //>>excludeEnd("ctx");
  4694. var $1;
  4695. $1=$recv("(".__comma(self._printString())).__comma(")");
  4696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4697. $ctx1.sendIdx[","]=1;
  4698. //>>excludeEnd("ctx");
  4699. return $1;
  4700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4701. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Number)});
  4702. //>>excludeEnd("ctx");
  4703. },
  4704. //>>excludeStart("ide", pragmas.excludeIdeData);
  4705. args: [],
  4706. source: "asJavascript\x0a\x09^ '(', self printString, ')'",
  4707. referencedClasses: [],
  4708. //>>excludeEnd("ide");
  4709. messageSends: [",", "printString"]
  4710. }),
  4711. $globals.Number);
  4712. $core.addMethod(
  4713. $core.method({
  4714. selector: "asNumber",
  4715. protocol: 'converting',
  4716. fn: function (){
  4717. var self=this;
  4718. return self;
  4719. },
  4720. //>>excludeStart("ide", pragmas.excludeIdeData);
  4721. args: [],
  4722. source: "asNumber\x0a\x09^ self",
  4723. referencedClasses: [],
  4724. //>>excludeEnd("ide");
  4725. messageSends: []
  4726. }),
  4727. $globals.Number);
  4728. $core.addMethod(
  4729. $core.method({
  4730. selector: "asPoint",
  4731. protocol: 'converting',
  4732. fn: function (){
  4733. var self=this;
  4734. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  4735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4736. return $core.withContext(function($ctx1) {
  4737. //>>excludeEnd("ctx");
  4738. var $1;
  4739. $1=$recv($Point())._x_y_(self,self);
  4740. return $1;
  4741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4742. }, function($ctx1) {$ctx1.fill(self,"asPoint",{},$globals.Number)});
  4743. //>>excludeEnd("ctx");
  4744. },
  4745. //>>excludeStart("ide", pragmas.excludeIdeData);
  4746. args: [],
  4747. source: "asPoint\x0a\x09^ Point x: self y: self",
  4748. referencedClasses: ["Point"],
  4749. //>>excludeEnd("ide");
  4750. messageSends: ["x:y:"]
  4751. }),
  4752. $globals.Number);
  4753. $core.addMethod(
  4754. $core.method({
  4755. selector: "asString",
  4756. protocol: 'converting',
  4757. fn: function (){
  4758. var self=this;
  4759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4760. return $core.withContext(function($ctx1) {
  4761. //>>excludeEnd("ctx");
  4762. return String(self) ;
  4763. return self;
  4764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4765. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.Number)});
  4766. //>>excludeEnd("ctx");
  4767. },
  4768. //>>excludeStart("ide", pragmas.excludeIdeData);
  4769. args: [],
  4770. source: "asString\x0a\x09< return String(self) >",
  4771. referencedClasses: [],
  4772. //>>excludeEnd("ide");
  4773. messageSends: []
  4774. }),
  4775. $globals.Number);
  4776. $core.addMethod(
  4777. $core.method({
  4778. selector: "atRandom",
  4779. protocol: 'converting',
  4780. fn: function (){
  4781. var self=this;
  4782. function $Random(){return $globals.Random||(typeof Random=="undefined"?nil:Random)}
  4783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4784. return $core.withContext(function($ctx1) {
  4785. //>>excludeEnd("ctx");
  4786. var $1;
  4787. $1=$recv($recv($recv($recv($recv($Random())._new())._next()).__star(self))._truncated()).__plus((1));
  4788. return $1;
  4789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4790. }, function($ctx1) {$ctx1.fill(self,"atRandom",{},$globals.Number)});
  4791. //>>excludeEnd("ctx");
  4792. },
  4793. //>>excludeStart("ide", pragmas.excludeIdeData);
  4794. args: [],
  4795. source: "atRandom\x0a\x09^ (Random new next * self) truncated + 1",
  4796. referencedClasses: ["Random"],
  4797. //>>excludeEnd("ide");
  4798. messageSends: ["+", "truncated", "*", "next", "new"]
  4799. }),
  4800. $globals.Number);
  4801. $core.addMethod(
  4802. $core.method({
  4803. selector: "ceiling",
  4804. protocol: 'converting',
  4805. fn: function (){
  4806. var self=this;
  4807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4808. return $core.withContext(function($ctx1) {
  4809. //>>excludeEnd("ctx");
  4810. return Math.ceil(self);;
  4811. return self;
  4812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4813. }, function($ctx1) {$ctx1.fill(self,"ceiling",{},$globals.Number)});
  4814. //>>excludeEnd("ctx");
  4815. },
  4816. //>>excludeStart("ide", pragmas.excludeIdeData);
  4817. args: [],
  4818. source: "ceiling\x0a\x09<return Math.ceil(self);>",
  4819. referencedClasses: [],
  4820. //>>excludeEnd("ide");
  4821. messageSends: []
  4822. }),
  4823. $globals.Number);
  4824. $core.addMethod(
  4825. $core.method({
  4826. selector: "copy",
  4827. protocol: 'copying',
  4828. fn: function (){
  4829. var self=this;
  4830. return self;
  4831. },
  4832. //>>excludeStart("ide", pragmas.excludeIdeData);
  4833. args: [],
  4834. source: "copy\x0a\x09^ self",
  4835. referencedClasses: [],
  4836. //>>excludeEnd("ide");
  4837. messageSends: []
  4838. }),
  4839. $globals.Number);
  4840. $core.addMethod(
  4841. $core.method({
  4842. selector: "cos",
  4843. protocol: 'mathematical functions',
  4844. fn: function (){
  4845. var self=this;
  4846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4847. return $core.withContext(function($ctx1) {
  4848. //>>excludeEnd("ctx");
  4849. return Math.cos(self);;
  4850. return self;
  4851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4852. }, function($ctx1) {$ctx1.fill(self,"cos",{},$globals.Number)});
  4853. //>>excludeEnd("ctx");
  4854. },
  4855. //>>excludeStart("ide", pragmas.excludeIdeData);
  4856. args: [],
  4857. source: "cos\x0a\x09<return Math.cos(self);>",
  4858. referencedClasses: [],
  4859. //>>excludeEnd("ide");
  4860. messageSends: []
  4861. }),
  4862. $globals.Number);
  4863. $core.addMethod(
  4864. $core.method({
  4865. selector: "deepCopy",
  4866. protocol: 'copying',
  4867. fn: function (){
  4868. var self=this;
  4869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4870. return $core.withContext(function($ctx1) {
  4871. //>>excludeEnd("ctx");
  4872. var $1;
  4873. $1=self._copy();
  4874. return $1;
  4875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4876. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{},$globals.Number)});
  4877. //>>excludeEnd("ctx");
  4878. },
  4879. //>>excludeStart("ide", pragmas.excludeIdeData);
  4880. args: [],
  4881. source: "deepCopy\x0a\x09^ self copy",
  4882. referencedClasses: [],
  4883. //>>excludeEnd("ide");
  4884. messageSends: ["copy"]
  4885. }),
  4886. $globals.Number);
  4887. $core.addMethod(
  4888. $core.method({
  4889. selector: "even",
  4890. protocol: 'testing',
  4891. fn: function (){
  4892. var self=this;
  4893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4894. return $core.withContext(function($ctx1) {
  4895. //>>excludeEnd("ctx");
  4896. var $1;
  4897. $1=(0).__eq(self.__backslash_backslash((2)));
  4898. return $1;
  4899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4900. }, function($ctx1) {$ctx1.fill(self,"even",{},$globals.Number)});
  4901. //>>excludeEnd("ctx");
  4902. },
  4903. //>>excludeStart("ide", pragmas.excludeIdeData);
  4904. args: [],
  4905. source: "even\x0a\x09^ 0 = (self \x5c\x5c 2)",
  4906. referencedClasses: [],
  4907. //>>excludeEnd("ide");
  4908. messageSends: ["=", "\x5c\x5c"]
  4909. }),
  4910. $globals.Number);
  4911. $core.addMethod(
  4912. $core.method({
  4913. selector: "floor",
  4914. protocol: 'converting',
  4915. fn: function (){
  4916. var self=this;
  4917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4918. return $core.withContext(function($ctx1) {
  4919. //>>excludeEnd("ctx");
  4920. return Math.floor(self);;
  4921. return self;
  4922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4923. }, function($ctx1) {$ctx1.fill(self,"floor",{},$globals.Number)});
  4924. //>>excludeEnd("ctx");
  4925. },
  4926. //>>excludeStart("ide", pragmas.excludeIdeData);
  4927. args: [],
  4928. source: "floor\x0a\x09<return Math.floor(self);>",
  4929. referencedClasses: [],
  4930. //>>excludeEnd("ide");
  4931. messageSends: []
  4932. }),
  4933. $globals.Number);
  4934. $core.addMethod(
  4935. $core.method({
  4936. selector: "identityHash",
  4937. protocol: 'accessing',
  4938. fn: function (){
  4939. var self=this;
  4940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4941. return $core.withContext(function($ctx1) {
  4942. //>>excludeEnd("ctx");
  4943. var $1;
  4944. $1=$recv(self._asString()).__comma("n");
  4945. return $1;
  4946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4947. }, function($ctx1) {$ctx1.fill(self,"identityHash",{},$globals.Number)});
  4948. //>>excludeEnd("ctx");
  4949. },
  4950. //>>excludeStart("ide", pragmas.excludeIdeData);
  4951. args: [],
  4952. source: "identityHash\x0a\x09^ self asString, 'n'",
  4953. referencedClasses: [],
  4954. //>>excludeEnd("ide");
  4955. messageSends: [",", "asString"]
  4956. }),
  4957. $globals.Number);
  4958. $core.addMethod(
  4959. $core.method({
  4960. selector: "isImmutable",
  4961. protocol: 'testing',
  4962. fn: function (){
  4963. var self=this;
  4964. return true;
  4965. },
  4966. //>>excludeStart("ide", pragmas.excludeIdeData);
  4967. args: [],
  4968. source: "isImmutable\x0a\x09^ true",
  4969. referencedClasses: [],
  4970. //>>excludeEnd("ide");
  4971. messageSends: []
  4972. }),
  4973. $globals.Number);
  4974. $core.addMethod(
  4975. $core.method({
  4976. selector: "isNumber",
  4977. protocol: 'testing',
  4978. fn: function (){
  4979. var self=this;
  4980. return true;
  4981. },
  4982. //>>excludeStart("ide", pragmas.excludeIdeData);
  4983. args: [],
  4984. source: "isNumber\x0a\x09^ true",
  4985. referencedClasses: [],
  4986. //>>excludeEnd("ide");
  4987. messageSends: []
  4988. }),
  4989. $globals.Number);
  4990. $core.addMethod(
  4991. $core.method({
  4992. selector: "isZero",
  4993. protocol: 'testing',
  4994. fn: function (){
  4995. var self=this;
  4996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4997. return $core.withContext(function($ctx1) {
  4998. //>>excludeEnd("ctx");
  4999. var $1;
  5000. $1=self.__eq((0));
  5001. return $1;
  5002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5003. }, function($ctx1) {$ctx1.fill(self,"isZero",{},$globals.Number)});
  5004. //>>excludeEnd("ctx");
  5005. },
  5006. //>>excludeStart("ide", pragmas.excludeIdeData);
  5007. args: [],
  5008. source: "isZero\x0a\x09^ self = 0",
  5009. referencedClasses: [],
  5010. //>>excludeEnd("ide");
  5011. messageSends: ["="]
  5012. }),
  5013. $globals.Number);
  5014. $core.addMethod(
  5015. $core.method({
  5016. selector: "ln",
  5017. protocol: 'mathematical functions',
  5018. fn: function (){
  5019. var self=this;
  5020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5021. return $core.withContext(function($ctx1) {
  5022. //>>excludeEnd("ctx");
  5023. return Math.log(self);;
  5024. return self;
  5025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5026. }, function($ctx1) {$ctx1.fill(self,"ln",{},$globals.Number)});
  5027. //>>excludeEnd("ctx");
  5028. },
  5029. //>>excludeStart("ide", pragmas.excludeIdeData);
  5030. args: [],
  5031. source: "ln\x0a\x09<return Math.log(self);>",
  5032. referencedClasses: [],
  5033. //>>excludeEnd("ide");
  5034. messageSends: []
  5035. }),
  5036. $globals.Number);
  5037. $core.addMethod(
  5038. $core.method({
  5039. selector: "log",
  5040. protocol: 'mathematical functions',
  5041. fn: function (){
  5042. var self=this;
  5043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5044. return $core.withContext(function($ctx1) {
  5045. //>>excludeEnd("ctx");
  5046. return Math.log(self) / Math.LN10;;
  5047. return self;
  5048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5049. }, function($ctx1) {$ctx1.fill(self,"log",{},$globals.Number)});
  5050. //>>excludeEnd("ctx");
  5051. },
  5052. //>>excludeStart("ide", pragmas.excludeIdeData);
  5053. args: [],
  5054. source: "log\x0a\x09<return Math.log(self) / Math.LN10;>",
  5055. referencedClasses: [],
  5056. //>>excludeEnd("ide");
  5057. messageSends: []
  5058. }),
  5059. $globals.Number);
  5060. $core.addMethod(
  5061. $core.method({
  5062. selector: "log:",
  5063. protocol: 'mathematical functions',
  5064. fn: function (aNumber){
  5065. var self=this;
  5066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5067. return $core.withContext(function($ctx1) {
  5068. //>>excludeEnd("ctx");
  5069. return Math.log(self) / Math.log(aNumber);;
  5070. return self;
  5071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5072. }, function($ctx1) {$ctx1.fill(self,"log:",{aNumber:aNumber},$globals.Number)});
  5073. //>>excludeEnd("ctx");
  5074. },
  5075. //>>excludeStart("ide", pragmas.excludeIdeData);
  5076. args: ["aNumber"],
  5077. source: "log: aNumber\x0a\x09<return Math.log(self) / Math.log(aNumber);>",
  5078. referencedClasses: [],
  5079. //>>excludeEnd("ide");
  5080. messageSends: []
  5081. }),
  5082. $globals.Number);
  5083. $core.addMethod(
  5084. $core.method({
  5085. selector: "max:",
  5086. protocol: 'arithmetic',
  5087. fn: function (aNumber){
  5088. var self=this;
  5089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5090. return $core.withContext(function($ctx1) {
  5091. //>>excludeEnd("ctx");
  5092. return Math.max(self, aNumber);;
  5093. return self;
  5094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5095. }, function($ctx1) {$ctx1.fill(self,"max:",{aNumber:aNumber},$globals.Number)});
  5096. //>>excludeEnd("ctx");
  5097. },
  5098. //>>excludeStart("ide", pragmas.excludeIdeData);
  5099. args: ["aNumber"],
  5100. source: "max: aNumber\x0a\x09<return Math.max(self, aNumber);>",
  5101. referencedClasses: [],
  5102. //>>excludeEnd("ide");
  5103. messageSends: []
  5104. }),
  5105. $globals.Number);
  5106. $core.addMethod(
  5107. $core.method({
  5108. selector: "min:",
  5109. protocol: 'arithmetic',
  5110. fn: function (aNumber){
  5111. var self=this;
  5112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5113. return $core.withContext(function($ctx1) {
  5114. //>>excludeEnd("ctx");
  5115. return Math.min(self, aNumber);;
  5116. return self;
  5117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5118. }, function($ctx1) {$ctx1.fill(self,"min:",{aNumber:aNumber},$globals.Number)});
  5119. //>>excludeEnd("ctx");
  5120. },
  5121. //>>excludeStart("ide", pragmas.excludeIdeData);
  5122. args: ["aNumber"],
  5123. source: "min: aNumber\x0a\x09<return Math.min(self, aNumber);>",
  5124. referencedClasses: [],
  5125. //>>excludeEnd("ide");
  5126. messageSends: []
  5127. }),
  5128. $globals.Number);
  5129. $core.addMethod(
  5130. $core.method({
  5131. selector: "negated",
  5132. protocol: 'arithmetic',
  5133. fn: function (){
  5134. var self=this;
  5135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5136. return $core.withContext(function($ctx1) {
  5137. //>>excludeEnd("ctx");
  5138. var $1;
  5139. $1=(0).__minus(self);
  5140. return $1;
  5141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5142. }, function($ctx1) {$ctx1.fill(self,"negated",{},$globals.Number)});
  5143. //>>excludeEnd("ctx");
  5144. },
  5145. //>>excludeStart("ide", pragmas.excludeIdeData);
  5146. args: [],
  5147. source: "negated\x0a\x09^ 0 - self",
  5148. referencedClasses: [],
  5149. //>>excludeEnd("ide");
  5150. messageSends: ["-"]
  5151. }),
  5152. $globals.Number);
  5153. $core.addMethod(
  5154. $core.method({
  5155. selector: "negative",
  5156. protocol: 'testing',
  5157. fn: function (){
  5158. var self=this;
  5159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5160. return $core.withContext(function($ctx1) {
  5161. //>>excludeEnd("ctx");
  5162. var $1;
  5163. $1=self.__lt((0));
  5164. return $1;
  5165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5166. }, function($ctx1) {$ctx1.fill(self,"negative",{},$globals.Number)});
  5167. //>>excludeEnd("ctx");
  5168. },
  5169. //>>excludeStart("ide", pragmas.excludeIdeData);
  5170. args: [],
  5171. source: "negative\x0a\x09\x22Answer whether the receiver is mathematically negative.\x22\x0a\x0a\x09^ self < 0",
  5172. referencedClasses: [],
  5173. //>>excludeEnd("ide");
  5174. messageSends: ["<"]
  5175. }),
  5176. $globals.Number);
  5177. $core.addMethod(
  5178. $core.method({
  5179. selector: "odd",
  5180. protocol: 'testing',
  5181. fn: function (){
  5182. var self=this;
  5183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5184. return $core.withContext(function($ctx1) {
  5185. //>>excludeEnd("ctx");
  5186. var $1;
  5187. $1=$recv(self._even())._not();
  5188. return $1;
  5189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5190. }, function($ctx1) {$ctx1.fill(self,"odd",{},$globals.Number)});
  5191. //>>excludeEnd("ctx");
  5192. },
  5193. //>>excludeStart("ide", pragmas.excludeIdeData);
  5194. args: [],
  5195. source: "odd\x0a\x09^ self even not",
  5196. referencedClasses: [],
  5197. //>>excludeEnd("ide");
  5198. messageSends: ["not", "even"]
  5199. }),
  5200. $globals.Number);
  5201. $core.addMethod(
  5202. $core.method({
  5203. selector: "positive",
  5204. protocol: 'testing',
  5205. fn: function (){
  5206. var self=this;
  5207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5208. return $core.withContext(function($ctx1) {
  5209. //>>excludeEnd("ctx");
  5210. var $1;
  5211. $1=self.__gt_eq((0));
  5212. return $1;
  5213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5214. }, function($ctx1) {$ctx1.fill(self,"positive",{},$globals.Number)});
  5215. //>>excludeEnd("ctx");
  5216. },
  5217. //>>excludeStart("ide", pragmas.excludeIdeData);
  5218. args: [],
  5219. source: "positive\x0a\x09\x22Answer whether the receiver is positive or equal to 0. (ST-80 protocol).\x22\x0a\x0a\x09^ self >= 0",
  5220. referencedClasses: [],
  5221. //>>excludeEnd("ide");
  5222. messageSends: [">="]
  5223. }),
  5224. $globals.Number);
  5225. $core.addMethod(
  5226. $core.method({
  5227. selector: "printOn:",
  5228. protocol: 'printing',
  5229. fn: function (aStream){
  5230. var self=this;
  5231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5232. return $core.withContext(function($ctx1) {
  5233. //>>excludeEnd("ctx");
  5234. $recv(aStream)._nextPutAll_(self._asString());
  5235. return self;
  5236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5237. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Number)});
  5238. //>>excludeEnd("ctx");
  5239. },
  5240. //>>excludeStart("ide", pragmas.excludeIdeData);
  5241. args: ["aStream"],
  5242. source: "printOn: aStream\x0a\x09aStream nextPutAll: self asString",
  5243. referencedClasses: [],
  5244. //>>excludeEnd("ide");
  5245. messageSends: ["nextPutAll:", "asString"]
  5246. }),
  5247. $globals.Number);
  5248. $core.addMethod(
  5249. $core.method({
  5250. selector: "printShowingDecimalPlaces:",
  5251. protocol: 'printing',
  5252. fn: function (placesDesired){
  5253. var self=this;
  5254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5255. return $core.withContext(function($ctx1) {
  5256. //>>excludeEnd("ctx");
  5257. return self.toFixed(placesDesired);
  5258. return self;
  5259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5260. }, function($ctx1) {$ctx1.fill(self,"printShowingDecimalPlaces:",{placesDesired:placesDesired},$globals.Number)});
  5261. //>>excludeEnd("ctx");
  5262. },
  5263. //>>excludeStart("ide", pragmas.excludeIdeData);
  5264. args: ["placesDesired"],
  5265. source: "printShowingDecimalPlaces: placesDesired\x0a\x09<return self.toFixed(placesDesired)>",
  5266. referencedClasses: [],
  5267. //>>excludeEnd("ide");
  5268. messageSends: []
  5269. }),
  5270. $globals.Number);
  5271. $core.addMethod(
  5272. $core.method({
  5273. selector: "raisedTo:",
  5274. protocol: 'mathematical functions',
  5275. fn: function (exponent){
  5276. var self=this;
  5277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5278. return $core.withContext(function($ctx1) {
  5279. //>>excludeEnd("ctx");
  5280. return Math.pow(self, exponent);;
  5281. return self;
  5282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5283. }, function($ctx1) {$ctx1.fill(self,"raisedTo:",{exponent:exponent},$globals.Number)});
  5284. //>>excludeEnd("ctx");
  5285. },
  5286. //>>excludeStart("ide", pragmas.excludeIdeData);
  5287. args: ["exponent"],
  5288. source: "raisedTo: exponent\x0a\x09<return Math.pow(self, exponent);>",
  5289. referencedClasses: [],
  5290. //>>excludeEnd("ide");
  5291. messageSends: []
  5292. }),
  5293. $globals.Number);
  5294. $core.addMethod(
  5295. $core.method({
  5296. selector: "rounded",
  5297. protocol: 'converting',
  5298. fn: function (){
  5299. var self=this;
  5300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5301. return $core.withContext(function($ctx1) {
  5302. //>>excludeEnd("ctx");
  5303. return Math.round(self);;
  5304. return self;
  5305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5306. }, function($ctx1) {$ctx1.fill(self,"rounded",{},$globals.Number)});
  5307. //>>excludeEnd("ctx");
  5308. },
  5309. //>>excludeStart("ide", pragmas.excludeIdeData);
  5310. args: [],
  5311. source: "rounded\x0a\x09<return Math.round(self);>",
  5312. referencedClasses: [],
  5313. //>>excludeEnd("ide");
  5314. messageSends: []
  5315. }),
  5316. $globals.Number);
  5317. $core.addMethod(
  5318. $core.method({
  5319. selector: "sign",
  5320. protocol: 'mathematical functions',
  5321. fn: function (){
  5322. var self=this;
  5323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5324. return $core.withContext(function($ctx1) {
  5325. //>>excludeEnd("ctx");
  5326. var $1,$2;
  5327. $1=self._isZero();
  5328. if($core.assert($1)){
  5329. return (0);
  5330. };
  5331. $2=self._positive();
  5332. if($core.assert($2)){
  5333. return (1);
  5334. } else {
  5335. return (-1);
  5336. };
  5337. return self;
  5338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5339. }, function($ctx1) {$ctx1.fill(self,"sign",{},$globals.Number)});
  5340. //>>excludeEnd("ctx");
  5341. },
  5342. //>>excludeStart("ide", pragmas.excludeIdeData);
  5343. args: [],
  5344. source: "sign\x0a\x09self isZero \x0a\x09\x09ifTrue: [ ^ 0 ].\x0a\x09self positive\x0a\x09\x09ifTrue: [ ^ 1 ]\x0a\x09\x09ifFalse: [ ^ -1 ].",
  5345. referencedClasses: [],
  5346. //>>excludeEnd("ide");
  5347. messageSends: ["ifTrue:", "isZero", "ifTrue:ifFalse:", "positive"]
  5348. }),
  5349. $globals.Number);
  5350. $core.addMethod(
  5351. $core.method({
  5352. selector: "sin",
  5353. protocol: 'mathematical functions',
  5354. fn: function (){
  5355. var self=this;
  5356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5357. return $core.withContext(function($ctx1) {
  5358. //>>excludeEnd("ctx");
  5359. return Math.sin(self);;
  5360. return self;
  5361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5362. }, function($ctx1) {$ctx1.fill(self,"sin",{},$globals.Number)});
  5363. //>>excludeEnd("ctx");
  5364. },
  5365. //>>excludeStart("ide", pragmas.excludeIdeData);
  5366. args: [],
  5367. source: "sin\x0a\x09<return Math.sin(self);>",
  5368. referencedClasses: [],
  5369. //>>excludeEnd("ide");
  5370. messageSends: []
  5371. }),
  5372. $globals.Number);
  5373. $core.addMethod(
  5374. $core.method({
  5375. selector: "sqrt",
  5376. protocol: 'mathematical functions',
  5377. fn: function (){
  5378. var self=this;
  5379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5380. return $core.withContext(function($ctx1) {
  5381. //>>excludeEnd("ctx");
  5382. return Math.sqrt(self);
  5383. return self;
  5384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5385. }, function($ctx1) {$ctx1.fill(self,"sqrt",{},$globals.Number)});
  5386. //>>excludeEnd("ctx");
  5387. },
  5388. //>>excludeStart("ide", pragmas.excludeIdeData);
  5389. args: [],
  5390. source: "sqrt\x0a\x09<return Math.sqrt(self)>",
  5391. referencedClasses: [],
  5392. //>>excludeEnd("ide");
  5393. messageSends: []
  5394. }),
  5395. $globals.Number);
  5396. $core.addMethod(
  5397. $core.method({
  5398. selector: "squared",
  5399. protocol: 'mathematical functions',
  5400. fn: function (){
  5401. var self=this;
  5402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5403. return $core.withContext(function($ctx1) {
  5404. //>>excludeEnd("ctx");
  5405. var $1;
  5406. $1=self.__star(self);
  5407. return $1;
  5408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5409. }, function($ctx1) {$ctx1.fill(self,"squared",{},$globals.Number)});
  5410. //>>excludeEnd("ctx");
  5411. },
  5412. //>>excludeStart("ide", pragmas.excludeIdeData);
  5413. args: [],
  5414. source: "squared\x0a\x09^ self * self",
  5415. referencedClasses: [],
  5416. //>>excludeEnd("ide");
  5417. messageSends: ["*"]
  5418. }),
  5419. $globals.Number);
  5420. $core.addMethod(
  5421. $core.method({
  5422. selector: "tan",
  5423. protocol: 'mathematical functions',
  5424. fn: function (){
  5425. var self=this;
  5426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5427. return $core.withContext(function($ctx1) {
  5428. //>>excludeEnd("ctx");
  5429. return Math.tan(self);;
  5430. return self;
  5431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5432. }, function($ctx1) {$ctx1.fill(self,"tan",{},$globals.Number)});
  5433. //>>excludeEnd("ctx");
  5434. },
  5435. //>>excludeStart("ide", pragmas.excludeIdeData);
  5436. args: [],
  5437. source: "tan\x0a\x09<return Math.tan(self);>",
  5438. referencedClasses: [],
  5439. //>>excludeEnd("ide");
  5440. messageSends: []
  5441. }),
  5442. $globals.Number);
  5443. $core.addMethod(
  5444. $core.method({
  5445. selector: "timesRepeat:",
  5446. protocol: 'enumerating',
  5447. fn: function (aBlock){
  5448. var self=this;
  5449. var count;
  5450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5451. return $core.withContext(function($ctx1) {
  5452. //>>excludeEnd("ctx");
  5453. count=(1);
  5454. $recv((function(){
  5455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5456. return $core.withContext(function($ctx2) {
  5457. //>>excludeEnd("ctx");
  5458. return $recv(count).__gt(self);
  5459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5460. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  5461. //>>excludeEnd("ctx");
  5462. }))._whileFalse_((function(){
  5463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5464. return $core.withContext(function($ctx2) {
  5465. //>>excludeEnd("ctx");
  5466. $recv(aBlock)._value();
  5467. count=$recv(count).__plus((1));
  5468. return count;
  5469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5470. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  5471. //>>excludeEnd("ctx");
  5472. }));
  5473. return self;
  5474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5475. }, function($ctx1) {$ctx1.fill(self,"timesRepeat:",{aBlock:aBlock,count:count},$globals.Number)});
  5476. //>>excludeEnd("ctx");
  5477. },
  5478. //>>excludeStart("ide", pragmas.excludeIdeData);
  5479. args: ["aBlock"],
  5480. source: "timesRepeat: aBlock\x0a\x09| count |\x0a\x09count := 1.\x0a\x09[ count > self ] whileFalse: [\x0a\x09\x09aBlock value.\x0a\x09\x09count := count + 1 ]",
  5481. referencedClasses: [],
  5482. //>>excludeEnd("ide");
  5483. messageSends: ["whileFalse:", ">", "value", "+"]
  5484. }),
  5485. $globals.Number);
  5486. $core.addMethod(
  5487. $core.method({
  5488. selector: "to:",
  5489. protocol: 'converting',
  5490. fn: function (aNumber){
  5491. var self=this;
  5492. var array,first,last,count;
  5493. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  5494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5495. return $core.withContext(function($ctx1) {
  5496. //>>excludeEnd("ctx");
  5497. var $1;
  5498. first=self._truncated();
  5499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5500. $ctx1.sendIdx["truncated"]=1;
  5501. //>>excludeEnd("ctx");
  5502. last=$recv($recv(aNumber)._truncated()).__plus((1));
  5503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5504. $ctx1.sendIdx["+"]=1;
  5505. //>>excludeEnd("ctx");
  5506. count=(1);
  5507. array=$recv($Array())._new();
  5508. $recv($recv(last).__minus(first))._timesRepeat_((function(){
  5509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5510. return $core.withContext(function($ctx2) {
  5511. //>>excludeEnd("ctx");
  5512. $recv(array)._at_put_(count,first);
  5513. count=$recv(count).__plus((1));
  5514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5515. $ctx2.sendIdx["+"]=2;
  5516. //>>excludeEnd("ctx");
  5517. count;
  5518. first=$recv(first).__plus((1));
  5519. return first;
  5520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5521. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  5522. //>>excludeEnd("ctx");
  5523. }));
  5524. $1=array;
  5525. return $1;
  5526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5527. }, function($ctx1) {$ctx1.fill(self,"to:",{aNumber:aNumber,array:array,first:first,last:last,count:count},$globals.Number)});
  5528. //>>excludeEnd("ctx");
  5529. },
  5530. //>>excludeStart("ide", pragmas.excludeIdeData);
  5531. args: ["aNumber"],
  5532. 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",
  5533. referencedClasses: ["Array"],
  5534. //>>excludeEnd("ide");
  5535. messageSends: ["truncated", "+", "new", "timesRepeat:", "-", "at:put:"]
  5536. }),
  5537. $globals.Number);
  5538. $core.addMethod(
  5539. $core.method({
  5540. selector: "to:by:",
  5541. protocol: 'converting',
  5542. fn: function (stop,step){
  5543. var self=this;
  5544. var array,value,pos;
  5545. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  5546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5547. return $core.withContext(function($ctx1) {
  5548. //>>excludeEnd("ctx");
  5549. var $1,$2,$3;
  5550. value=self;
  5551. array=$recv($Array())._new();
  5552. pos=(1);
  5553. $1=$recv(step).__eq((0));
  5554. if($core.assert($1)){
  5555. self._error_("step must be non-zero");
  5556. };
  5557. $2=$recv(step).__lt((0));
  5558. if($core.assert($2)){
  5559. $recv((function(){
  5560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5561. return $core.withContext(function($ctx2) {
  5562. //>>excludeEnd("ctx");
  5563. return $recv(value).__gt_eq(stop);
  5564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5565. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  5566. //>>excludeEnd("ctx");
  5567. }))._whileTrue_((function(){
  5568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5569. return $core.withContext(function($ctx2) {
  5570. //>>excludeEnd("ctx");
  5571. $recv(array)._at_put_(pos,value);
  5572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5573. $ctx2.sendIdx["at:put:"]=1;
  5574. //>>excludeEnd("ctx");
  5575. pos=$recv(pos).__plus((1));
  5576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5577. $ctx2.sendIdx["+"]=1;
  5578. //>>excludeEnd("ctx");
  5579. pos;
  5580. value=$recv(value).__plus(step);
  5581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5582. $ctx2.sendIdx["+"]=2;
  5583. //>>excludeEnd("ctx");
  5584. return value;
  5585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5586. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  5587. //>>excludeEnd("ctx");
  5588. }));
  5589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5590. $ctx1.sendIdx["whileTrue:"]=1;
  5591. //>>excludeEnd("ctx");
  5592. } else {
  5593. $recv((function(){
  5594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5595. return $core.withContext(function($ctx2) {
  5596. //>>excludeEnd("ctx");
  5597. return $recv(value).__lt_eq(stop);
  5598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5599. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  5600. //>>excludeEnd("ctx");
  5601. }))._whileTrue_((function(){
  5602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5603. return $core.withContext(function($ctx2) {
  5604. //>>excludeEnd("ctx");
  5605. $recv(array)._at_put_(pos,value);
  5606. pos=$recv(pos).__plus((1));
  5607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5608. $ctx2.sendIdx["+"]=3;
  5609. //>>excludeEnd("ctx");
  5610. pos;
  5611. value=$recv(value).__plus(step);
  5612. return value;
  5613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5614. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  5615. //>>excludeEnd("ctx");
  5616. }));
  5617. };
  5618. $3=array;
  5619. return $3;
  5620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5621. }, function($ctx1) {$ctx1.fill(self,"to:by:",{stop:stop,step:step,array:array,value:value,pos:pos},$globals.Number)});
  5622. //>>excludeEnd("ctx");
  5623. },
  5624. //>>excludeStart("ide", pragmas.excludeIdeData);
  5625. args: ["stop", "step"],
  5626. 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",
  5627. referencedClasses: ["Array"],
  5628. //>>excludeEnd("ide");
  5629. messageSends: ["new", "ifTrue:", "=", "error:", "ifTrue:ifFalse:", "<", "whileTrue:", ">=", "at:put:", "+", "<="]
  5630. }),
  5631. $globals.Number);
  5632. $core.addMethod(
  5633. $core.method({
  5634. selector: "to:by:do:",
  5635. protocol: 'enumerating',
  5636. fn: function (stop,step,aBlock){
  5637. var self=this;
  5638. var value;
  5639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5640. return $core.withContext(function($ctx1) {
  5641. //>>excludeEnd("ctx");
  5642. var $1,$2;
  5643. value=self;
  5644. $1=$recv(step).__eq((0));
  5645. if($core.assert($1)){
  5646. self._error_("step must be non-zero");
  5647. };
  5648. $2=$recv(step).__lt((0));
  5649. if($core.assert($2)){
  5650. $recv((function(){
  5651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5652. return $core.withContext(function($ctx2) {
  5653. //>>excludeEnd("ctx");
  5654. return $recv(value).__gt_eq(stop);
  5655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5656. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  5657. //>>excludeEnd("ctx");
  5658. }))._whileTrue_((function(){
  5659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5660. return $core.withContext(function($ctx2) {
  5661. //>>excludeEnd("ctx");
  5662. $recv(aBlock)._value_(value);
  5663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5664. $ctx2.sendIdx["value:"]=1;
  5665. //>>excludeEnd("ctx");
  5666. value=$recv(value).__plus(step);
  5667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5668. $ctx2.sendIdx["+"]=1;
  5669. //>>excludeEnd("ctx");
  5670. return value;
  5671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5672. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  5673. //>>excludeEnd("ctx");
  5674. }));
  5675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5676. $ctx1.sendIdx["whileTrue:"]=1;
  5677. //>>excludeEnd("ctx");
  5678. } else {
  5679. $recv((function(){
  5680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5681. return $core.withContext(function($ctx2) {
  5682. //>>excludeEnd("ctx");
  5683. return $recv(value).__lt_eq(stop);
  5684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5685. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  5686. //>>excludeEnd("ctx");
  5687. }))._whileTrue_((function(){
  5688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5689. return $core.withContext(function($ctx2) {
  5690. //>>excludeEnd("ctx");
  5691. $recv(aBlock)._value_(value);
  5692. value=$recv(value).__plus(step);
  5693. return value;
  5694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5695. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  5696. //>>excludeEnd("ctx");
  5697. }));
  5698. };
  5699. return self;
  5700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5701. }, function($ctx1) {$ctx1.fill(self,"to:by:do:",{stop:stop,step:step,aBlock:aBlock,value:value},$globals.Number)});
  5702. //>>excludeEnd("ctx");
  5703. },
  5704. //>>excludeStart("ide", pragmas.excludeIdeData);
  5705. args: ["stop", "step", "aBlock"],
  5706. 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 ]]",
  5707. referencedClasses: [],
  5708. //>>excludeEnd("ide");
  5709. messageSends: ["ifTrue:", "=", "error:", "ifTrue:ifFalse:", "<", "whileTrue:", ">=", "value:", "+", "<="]
  5710. }),
  5711. $globals.Number);
  5712. $core.addMethod(
  5713. $core.method({
  5714. selector: "to:do:",
  5715. protocol: 'enumerating',
  5716. fn: function (stop,aBlock){
  5717. var self=this;
  5718. var nextValue;
  5719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5720. return $core.withContext(function($ctx1) {
  5721. //>>excludeEnd("ctx");
  5722. nextValue=self;
  5723. $recv((function(){
  5724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5725. return $core.withContext(function($ctx2) {
  5726. //>>excludeEnd("ctx");
  5727. return $recv(nextValue).__lt_eq(stop);
  5728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5729. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  5730. //>>excludeEnd("ctx");
  5731. }))._whileTrue_((function(){
  5732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5733. return $core.withContext(function($ctx2) {
  5734. //>>excludeEnd("ctx");
  5735. $recv(aBlock)._value_(nextValue);
  5736. nextValue=$recv(nextValue).__plus((1));
  5737. return nextValue;
  5738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5739. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  5740. //>>excludeEnd("ctx");
  5741. }));
  5742. return self;
  5743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5744. }, function($ctx1) {$ctx1.fill(self,"to:do:",{stop:stop,aBlock:aBlock,nextValue:nextValue},$globals.Number)});
  5745. //>>excludeEnd("ctx");
  5746. },
  5747. //>>excludeStart("ide", pragmas.excludeIdeData);
  5748. args: ["stop", "aBlock"],
  5749. 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 ]",
  5750. referencedClasses: [],
  5751. //>>excludeEnd("ide");
  5752. messageSends: ["whileTrue:", "<=", "value:", "+"]
  5753. }),
  5754. $globals.Number);
  5755. $core.addMethod(
  5756. $core.method({
  5757. selector: "truncated",
  5758. protocol: 'converting',
  5759. fn: function (){
  5760. var self=this;
  5761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5762. return $core.withContext(function($ctx1) {
  5763. //>>excludeEnd("ctx");
  5764. if(self >= 0) {
  5765. return Math.floor(self);
  5766. } else {
  5767. return Math.floor(self * (-1)) * (-1);
  5768. };
  5769. ;
  5770. return self;
  5771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5772. }, function($ctx1) {$ctx1.fill(self,"truncated",{},$globals.Number)});
  5773. //>>excludeEnd("ctx");
  5774. },
  5775. //>>excludeStart("ide", pragmas.excludeIdeData);
  5776. args: [],
  5777. 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>",
  5778. referencedClasses: [],
  5779. //>>excludeEnd("ide");
  5780. messageSends: []
  5781. }),
  5782. $globals.Number);
  5783. $core.addMethod(
  5784. $core.method({
  5785. selector: "|",
  5786. protocol: 'converting',
  5787. fn: function (aNumber){
  5788. var self=this;
  5789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5790. return $core.withContext(function($ctx1) {
  5791. //>>excludeEnd("ctx");
  5792. return self | aNumber;
  5793. return self;
  5794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5795. }, function($ctx1) {$ctx1.fill(self,"|",{aNumber:aNumber},$globals.Number)});
  5796. //>>excludeEnd("ctx");
  5797. },
  5798. //>>excludeStart("ide", pragmas.excludeIdeData);
  5799. args: ["aNumber"],
  5800. source: "| aNumber\x0a\x09<return self | aNumber>",
  5801. referencedClasses: [],
  5802. //>>excludeEnd("ide");
  5803. messageSends: []
  5804. }),
  5805. $globals.Number);
  5806. $core.addMethod(
  5807. $core.method({
  5808. selector: "classTag",
  5809. protocol: 'accessing',
  5810. fn: function (){
  5811. var self=this;
  5812. return "magnitude";
  5813. },
  5814. //>>excludeStart("ide", pragmas.excludeIdeData);
  5815. args: [],
  5816. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'magnitude'",
  5817. referencedClasses: [],
  5818. //>>excludeEnd("ide");
  5819. messageSends: []
  5820. }),
  5821. $globals.Number.klass);
  5822. $core.addMethod(
  5823. $core.method({
  5824. selector: "e",
  5825. protocol: 'instance creation',
  5826. fn: function (){
  5827. var self=this;
  5828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5829. return $core.withContext(function($ctx1) {
  5830. //>>excludeEnd("ctx");
  5831. return Math.E;;
  5832. return self;
  5833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5834. }, function($ctx1) {$ctx1.fill(self,"e",{},$globals.Number.klass)});
  5835. //>>excludeEnd("ctx");
  5836. },
  5837. //>>excludeStart("ide", pragmas.excludeIdeData);
  5838. args: [],
  5839. source: "e\x0a\x09<return Math.E;>",
  5840. referencedClasses: [],
  5841. //>>excludeEnd("ide");
  5842. messageSends: []
  5843. }),
  5844. $globals.Number.klass);
  5845. $core.addMethod(
  5846. $core.method({
  5847. selector: "pi",
  5848. protocol: 'instance creation',
  5849. fn: function (){
  5850. var self=this;
  5851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5852. return $core.withContext(function($ctx1) {
  5853. //>>excludeEnd("ctx");
  5854. return Math.PI;
  5855. return self;
  5856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5857. }, function($ctx1) {$ctx1.fill(self,"pi",{},$globals.Number.klass)});
  5858. //>>excludeEnd("ctx");
  5859. },
  5860. //>>excludeStart("ide", pragmas.excludeIdeData);
  5861. args: [],
  5862. source: "pi\x0a\x09<return Math.PI>",
  5863. referencedClasses: [],
  5864. //>>excludeEnd("ide");
  5865. messageSends: []
  5866. }),
  5867. $globals.Number.klass);
  5868. $core.addClass('Point', $globals.Object, ['x', 'y'], 'Kernel-Objects');
  5869. //>>excludeStart("ide", pragmas.excludeIdeData);
  5870. $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";
  5871. //>>excludeEnd("ide");
  5872. $core.addMethod(
  5873. $core.method({
  5874. selector: "*",
  5875. protocol: 'arithmetic',
  5876. fn: function (aPoint){
  5877. var self=this;
  5878. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  5879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5880. return $core.withContext(function($ctx1) {
  5881. //>>excludeEnd("ctx");
  5882. var $3,$5,$4,$2,$7,$6,$1;
  5883. $3=self._x();
  5884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5885. $ctx1.sendIdx["x"]=1;
  5886. //>>excludeEnd("ctx");
  5887. $5=$recv(aPoint)._asPoint();
  5888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5889. $ctx1.sendIdx["asPoint"]=1;
  5890. //>>excludeEnd("ctx");
  5891. $4=$recv($5)._x();
  5892. $2=$recv($3).__star($4);
  5893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5894. $ctx1.sendIdx["*"]=1;
  5895. //>>excludeEnd("ctx");
  5896. $7=self._y();
  5897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5898. $ctx1.sendIdx["y"]=1;
  5899. //>>excludeEnd("ctx");
  5900. $6=$recv($7).__star($recv($recv(aPoint)._asPoint())._y());
  5901. $1=$recv($Point())._x_y_($2,$6);
  5902. return $1;
  5903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5904. }, function($ctx1) {$ctx1.fill(self,"*",{aPoint:aPoint},$globals.Point)});
  5905. //>>excludeEnd("ctx");
  5906. },
  5907. //>>excludeStart("ide", pragmas.excludeIdeData);
  5908. args: ["aPoint"],
  5909. source: "* aPoint\x0a\x09^ Point x: self x * aPoint asPoint x y: self y * aPoint asPoint y",
  5910. referencedClasses: ["Point"],
  5911. //>>excludeEnd("ide");
  5912. messageSends: ["x:y:", "*", "x", "asPoint", "y"]
  5913. }),
  5914. $globals.Point);
  5915. $core.addMethod(
  5916. $core.method({
  5917. selector: "+",
  5918. protocol: 'arithmetic',
  5919. fn: function (aPoint){
  5920. var self=this;
  5921. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  5922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5923. return $core.withContext(function($ctx1) {
  5924. //>>excludeEnd("ctx");
  5925. var $3,$5,$4,$2,$7,$6,$1;
  5926. $3=self._x();
  5927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5928. $ctx1.sendIdx["x"]=1;
  5929. //>>excludeEnd("ctx");
  5930. $5=$recv(aPoint)._asPoint();
  5931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5932. $ctx1.sendIdx["asPoint"]=1;
  5933. //>>excludeEnd("ctx");
  5934. $4=$recv($5)._x();
  5935. $2=$recv($3).__plus($4);
  5936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5937. $ctx1.sendIdx["+"]=1;
  5938. //>>excludeEnd("ctx");
  5939. $7=self._y();
  5940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5941. $ctx1.sendIdx["y"]=1;
  5942. //>>excludeEnd("ctx");
  5943. $6=$recv($7).__plus($recv($recv(aPoint)._asPoint())._y());
  5944. $1=$recv($Point())._x_y_($2,$6);
  5945. return $1;
  5946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5947. }, function($ctx1) {$ctx1.fill(self,"+",{aPoint:aPoint},$globals.Point)});
  5948. //>>excludeEnd("ctx");
  5949. },
  5950. //>>excludeStart("ide", pragmas.excludeIdeData);
  5951. args: ["aPoint"],
  5952. source: "+ aPoint\x0a\x09^ Point x: self x + aPoint asPoint x y: self y + aPoint asPoint y",
  5953. referencedClasses: ["Point"],
  5954. //>>excludeEnd("ide");
  5955. messageSends: ["x:y:", "+", "x", "asPoint", "y"]
  5956. }),
  5957. $globals.Point);
  5958. $core.addMethod(
  5959. $core.method({
  5960. selector: "-",
  5961. protocol: 'arithmetic',
  5962. fn: function (aPoint){
  5963. var self=this;
  5964. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  5965. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5966. return $core.withContext(function($ctx1) {
  5967. //>>excludeEnd("ctx");
  5968. var $3,$5,$4,$2,$7,$6,$1;
  5969. $3=self._x();
  5970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5971. $ctx1.sendIdx["x"]=1;
  5972. //>>excludeEnd("ctx");
  5973. $5=$recv(aPoint)._asPoint();
  5974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5975. $ctx1.sendIdx["asPoint"]=1;
  5976. //>>excludeEnd("ctx");
  5977. $4=$recv($5)._x();
  5978. $2=$recv($3).__minus($4);
  5979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5980. $ctx1.sendIdx["-"]=1;
  5981. //>>excludeEnd("ctx");
  5982. $7=self._y();
  5983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5984. $ctx1.sendIdx["y"]=1;
  5985. //>>excludeEnd("ctx");
  5986. $6=$recv($7).__minus($recv($recv(aPoint)._asPoint())._y());
  5987. $1=$recv($Point())._x_y_($2,$6);
  5988. return $1;
  5989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5990. }, function($ctx1) {$ctx1.fill(self,"-",{aPoint:aPoint},$globals.Point)});
  5991. //>>excludeEnd("ctx");
  5992. },
  5993. //>>excludeStart("ide", pragmas.excludeIdeData);
  5994. args: ["aPoint"],
  5995. source: "- aPoint\x0a\x09^ Point x: self x - aPoint asPoint x y: self y - aPoint asPoint y",
  5996. referencedClasses: ["Point"],
  5997. //>>excludeEnd("ide");
  5998. messageSends: ["x:y:", "-", "x", "asPoint", "y"]
  5999. }),
  6000. $globals.Point);
  6001. $core.addMethod(
  6002. $core.method({
  6003. selector: "/",
  6004. protocol: 'arithmetic',
  6005. fn: function (aPoint){
  6006. var self=this;
  6007. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  6008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6009. return $core.withContext(function($ctx1) {
  6010. //>>excludeEnd("ctx");
  6011. var $3,$5,$4,$2,$7,$6,$1;
  6012. $3=self._x();
  6013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6014. $ctx1.sendIdx["x"]=1;
  6015. //>>excludeEnd("ctx");
  6016. $5=$recv(aPoint)._asPoint();
  6017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6018. $ctx1.sendIdx["asPoint"]=1;
  6019. //>>excludeEnd("ctx");
  6020. $4=$recv($5)._x();
  6021. $2=$recv($3).__slash($4);
  6022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6023. $ctx1.sendIdx["/"]=1;
  6024. //>>excludeEnd("ctx");
  6025. $7=self._y();
  6026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6027. $ctx1.sendIdx["y"]=1;
  6028. //>>excludeEnd("ctx");
  6029. $6=$recv($7).__slash($recv($recv(aPoint)._asPoint())._y());
  6030. $1=$recv($Point())._x_y_($2,$6);
  6031. return $1;
  6032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6033. }, function($ctx1) {$ctx1.fill(self,"/",{aPoint:aPoint},$globals.Point)});
  6034. //>>excludeEnd("ctx");
  6035. },
  6036. //>>excludeStart("ide", pragmas.excludeIdeData);
  6037. args: ["aPoint"],
  6038. source: "/ aPoint\x0a\x09^ Point x: self x / aPoint asPoint x y: self y / aPoint asPoint y",
  6039. referencedClasses: ["Point"],
  6040. //>>excludeEnd("ide");
  6041. messageSends: ["x:y:", "/", "x", "asPoint", "y"]
  6042. }),
  6043. $globals.Point);
  6044. $core.addMethod(
  6045. $core.method({
  6046. selector: "<",
  6047. protocol: 'comparing',
  6048. fn: function (aPoint){
  6049. var self=this;
  6050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6051. return $core.withContext(function($ctx1) {
  6052. //>>excludeEnd("ctx");
  6053. var $3,$2,$4,$1;
  6054. $3=self._x();
  6055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6056. $ctx1.sendIdx["x"]=1;
  6057. //>>excludeEnd("ctx");
  6058. $2=$recv($3).__lt($recv(aPoint)._x());
  6059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6060. $ctx1.sendIdx["<"]=1;
  6061. //>>excludeEnd("ctx");
  6062. $1=$recv($2)._and_((function(){
  6063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6064. return $core.withContext(function($ctx2) {
  6065. //>>excludeEnd("ctx");
  6066. $4=self._y();
  6067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6068. $ctx2.sendIdx["y"]=1;
  6069. //>>excludeEnd("ctx");
  6070. return $recv($4).__lt($recv(aPoint)._y());
  6071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6072. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6073. //>>excludeEnd("ctx");
  6074. }));
  6075. return $1;
  6076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6077. }, function($ctx1) {$ctx1.fill(self,"<",{aPoint:aPoint},$globals.Point)});
  6078. //>>excludeEnd("ctx");
  6079. },
  6080. //>>excludeStart("ide", pragmas.excludeIdeData);
  6081. args: ["aPoint"],
  6082. source: "< aPoint\x0a\x09^ self x < aPoint x and: [\x0a\x09\x09self y < aPoint y ]",
  6083. referencedClasses: [],
  6084. //>>excludeEnd("ide");
  6085. messageSends: ["and:", "<", "x", "y"]
  6086. }),
  6087. $globals.Point);
  6088. $core.addMethod(
  6089. $core.method({
  6090. selector: "<=",
  6091. protocol: 'comparing',
  6092. fn: function (aPoint){
  6093. var self=this;
  6094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6095. return $core.withContext(function($ctx1) {
  6096. //>>excludeEnd("ctx");
  6097. var $3,$2,$4,$1;
  6098. $3=self._x();
  6099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6100. $ctx1.sendIdx["x"]=1;
  6101. //>>excludeEnd("ctx");
  6102. $2=$recv($3).__lt_eq($recv(aPoint)._x());
  6103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6104. $ctx1.sendIdx["<="]=1;
  6105. //>>excludeEnd("ctx");
  6106. $1=$recv($2)._and_((function(){
  6107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6108. return $core.withContext(function($ctx2) {
  6109. //>>excludeEnd("ctx");
  6110. $4=self._y();
  6111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6112. $ctx2.sendIdx["y"]=1;
  6113. //>>excludeEnd("ctx");
  6114. return $recv($4).__lt_eq($recv(aPoint)._y());
  6115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6116. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6117. //>>excludeEnd("ctx");
  6118. }));
  6119. return $1;
  6120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6121. }, function($ctx1) {$ctx1.fill(self,"<=",{aPoint:aPoint},$globals.Point)});
  6122. //>>excludeEnd("ctx");
  6123. },
  6124. //>>excludeStart("ide", pragmas.excludeIdeData);
  6125. args: ["aPoint"],
  6126. source: "<= aPoint\x0a\x09^ self x <= aPoint x and: [\x0a\x09\x09self y <= aPoint y ]",
  6127. referencedClasses: [],
  6128. //>>excludeEnd("ide");
  6129. messageSends: ["and:", "<=", "x", "y"]
  6130. }),
  6131. $globals.Point);
  6132. $core.addMethod(
  6133. $core.method({
  6134. selector: "=",
  6135. protocol: 'comparing',
  6136. fn: function (aPoint){
  6137. var self=this;
  6138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6139. return $core.withContext(function($ctx1) {
  6140. //>>excludeEnd("ctx");
  6141. var $3,$2,$5,$4,$7,$6,$1;
  6142. $3=$recv(aPoint)._class();
  6143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6144. $ctx1.sendIdx["class"]=1;
  6145. //>>excludeEnd("ctx");
  6146. $2=$recv($3).__eq(self._class());
  6147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6148. $ctx1.sendIdx["="]=1;
  6149. //>>excludeEnd("ctx");
  6150. $1=$recv($2)._and_((function(){
  6151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6152. return $core.withContext(function($ctx2) {
  6153. //>>excludeEnd("ctx");
  6154. $5=$recv(aPoint)._x();
  6155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6156. $ctx2.sendIdx["x"]=1;
  6157. //>>excludeEnd("ctx");
  6158. $4=$recv($5).__eq(self._x());
  6159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6160. $ctx2.sendIdx["="]=2;
  6161. //>>excludeEnd("ctx");
  6162. $7=$recv(aPoint)._y();
  6163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6164. $ctx2.sendIdx["y"]=1;
  6165. //>>excludeEnd("ctx");
  6166. $6=$recv($7).__eq(self._y());
  6167. return $recv($4).__and($6);
  6168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6169. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6170. //>>excludeEnd("ctx");
  6171. }));
  6172. return $1;
  6173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6174. }, function($ctx1) {$ctx1.fill(self,"=",{aPoint:aPoint},$globals.Point)});
  6175. //>>excludeEnd("ctx");
  6176. },
  6177. //>>excludeStart("ide", pragmas.excludeIdeData);
  6178. args: ["aPoint"],
  6179. source: "= aPoint\x0a\x09^ aPoint class = self class and: [\x0a\x09\x09(aPoint x = self x) & (aPoint y = self y) ]",
  6180. referencedClasses: [],
  6181. //>>excludeEnd("ide");
  6182. messageSends: ["and:", "=", "class", "&", "x", "y"]
  6183. }),
  6184. $globals.Point);
  6185. $core.addMethod(
  6186. $core.method({
  6187. selector: ">",
  6188. protocol: 'comparing',
  6189. fn: function (aPoint){
  6190. var self=this;
  6191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6192. return $core.withContext(function($ctx1) {
  6193. //>>excludeEnd("ctx");
  6194. var $3,$2,$4,$1;
  6195. $3=self._x();
  6196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6197. $ctx1.sendIdx["x"]=1;
  6198. //>>excludeEnd("ctx");
  6199. $2=$recv($3).__gt($recv(aPoint)._x());
  6200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6201. $ctx1.sendIdx[">"]=1;
  6202. //>>excludeEnd("ctx");
  6203. $1=$recv($2)._and_((function(){
  6204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6205. return $core.withContext(function($ctx2) {
  6206. //>>excludeEnd("ctx");
  6207. $4=self._y();
  6208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6209. $ctx2.sendIdx["y"]=1;
  6210. //>>excludeEnd("ctx");
  6211. return $recv($4).__gt($recv(aPoint)._y());
  6212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6213. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6214. //>>excludeEnd("ctx");
  6215. }));
  6216. return $1;
  6217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6218. }, function($ctx1) {$ctx1.fill(self,">",{aPoint:aPoint},$globals.Point)});
  6219. //>>excludeEnd("ctx");
  6220. },
  6221. //>>excludeStart("ide", pragmas.excludeIdeData);
  6222. args: ["aPoint"],
  6223. source: "> aPoint\x0a\x09^ self x > aPoint x and: [\x0a\x09\x09self y > aPoint y ]",
  6224. referencedClasses: [],
  6225. //>>excludeEnd("ide");
  6226. messageSends: ["and:", ">", "x", "y"]
  6227. }),
  6228. $globals.Point);
  6229. $core.addMethod(
  6230. $core.method({
  6231. selector: ">=",
  6232. protocol: 'comparing',
  6233. fn: function (aPoint){
  6234. var self=this;
  6235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6236. return $core.withContext(function($ctx1) {
  6237. //>>excludeEnd("ctx");
  6238. var $3,$2,$4,$1;
  6239. $3=self._x();
  6240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6241. $ctx1.sendIdx["x"]=1;
  6242. //>>excludeEnd("ctx");
  6243. $2=$recv($3).__gt_eq($recv(aPoint)._x());
  6244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6245. $ctx1.sendIdx[">="]=1;
  6246. //>>excludeEnd("ctx");
  6247. $1=$recv($2)._and_((function(){
  6248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6249. return $core.withContext(function($ctx2) {
  6250. //>>excludeEnd("ctx");
  6251. $4=self._y();
  6252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6253. $ctx2.sendIdx["y"]=1;
  6254. //>>excludeEnd("ctx");
  6255. return $recv($4).__gt_eq($recv(aPoint)._y());
  6256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6257. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6258. //>>excludeEnd("ctx");
  6259. }));
  6260. return $1;
  6261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6262. }, function($ctx1) {$ctx1.fill(self,">=",{aPoint:aPoint},$globals.Point)});
  6263. //>>excludeEnd("ctx");
  6264. },
  6265. //>>excludeStart("ide", pragmas.excludeIdeData);
  6266. args: ["aPoint"],
  6267. source: ">= aPoint\x0a\x09^ self x >= aPoint x and: [\x0a\x09\x09self y >= aPoint y ]",
  6268. referencedClasses: [],
  6269. //>>excludeEnd("ide");
  6270. messageSends: ["and:", ">=", "x", "y"]
  6271. }),
  6272. $globals.Point);
  6273. $core.addMethod(
  6274. $core.method({
  6275. selector: "asPoint",
  6276. protocol: 'converting',
  6277. fn: function (){
  6278. var self=this;
  6279. return self;
  6280. },
  6281. //>>excludeStart("ide", pragmas.excludeIdeData);
  6282. args: [],
  6283. source: "asPoint\x0a\x09^ self",
  6284. referencedClasses: [],
  6285. //>>excludeEnd("ide");
  6286. messageSends: []
  6287. }),
  6288. $globals.Point);
  6289. $core.addMethod(
  6290. $core.method({
  6291. selector: "dist:",
  6292. protocol: 'transforming',
  6293. fn: function (aPoint){
  6294. var self=this;
  6295. var dx,dy;
  6296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6297. return $core.withContext(function($ctx1) {
  6298. //>>excludeEnd("ctx");
  6299. var $3,$2,$1;
  6300. dx=$recv($recv(aPoint)._x()).__minus(self["@x"]);
  6301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6302. $ctx1.sendIdx["-"]=1;
  6303. //>>excludeEnd("ctx");
  6304. dy=$recv($recv(aPoint)._y()).__minus(self["@y"]);
  6305. $3=$recv(dx).__star(dx);
  6306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6307. $ctx1.sendIdx["*"]=1;
  6308. //>>excludeEnd("ctx");
  6309. $2=$recv($3).__plus($recv(dy).__star(dy));
  6310. $1=$recv($2)._sqrt();
  6311. return $1;
  6312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6313. }, function($ctx1) {$ctx1.fill(self,"dist:",{aPoint:aPoint,dx:dx,dy:dy},$globals.Point)});
  6314. //>>excludeEnd("ctx");
  6315. },
  6316. //>>excludeStart("ide", pragmas.excludeIdeData);
  6317. args: ["aPoint"],
  6318. 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",
  6319. referencedClasses: [],
  6320. //>>excludeEnd("ide");
  6321. messageSends: ["-", "x", "y", "sqrt", "+", "*"]
  6322. }),
  6323. $globals.Point);
  6324. $core.addMethod(
  6325. $core.method({
  6326. selector: "printOn:",
  6327. protocol: 'printing',
  6328. fn: function (aStream){
  6329. var self=this;
  6330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6331. return $core.withContext(function($ctx1) {
  6332. //>>excludeEnd("ctx");
  6333. var $1;
  6334. $recv(self["@x"])._printOn_(aStream);
  6335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6336. $ctx1.sendIdx["printOn:"]=1;
  6337. //>>excludeEnd("ctx");
  6338. $recv(aStream)._nextPutAll_("@");
  6339. $1=$recv($recv(self["@y"])._notNil())._and_((function(){
  6340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6341. return $core.withContext(function($ctx2) {
  6342. //>>excludeEnd("ctx");
  6343. return $recv(self["@y"])._negative();
  6344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6345. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6346. //>>excludeEnd("ctx");
  6347. }));
  6348. if($core.assert($1)){
  6349. $recv(aStream)._space();
  6350. };
  6351. $recv(self["@y"])._printOn_(aStream);
  6352. return self;
  6353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6354. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Point)});
  6355. //>>excludeEnd("ctx");
  6356. },
  6357. //>>excludeStart("ide", pragmas.excludeIdeData);
  6358. args: ["aStream"],
  6359. 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",
  6360. referencedClasses: [],
  6361. //>>excludeEnd("ide");
  6362. messageSends: ["printOn:", "nextPutAll:", "ifTrue:", "and:", "notNil", "negative", "space"]
  6363. }),
  6364. $globals.Point);
  6365. $core.addMethod(
  6366. $core.method({
  6367. selector: "translateBy:",
  6368. protocol: 'transforming',
  6369. fn: function (delta){
  6370. var self=this;
  6371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6372. return $core.withContext(function($ctx1) {
  6373. //>>excludeEnd("ctx");
  6374. var $2,$1;
  6375. $2=$recv($recv(delta)._x()).__plus(self["@x"]);
  6376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6377. $ctx1.sendIdx["+"]=1;
  6378. //>>excludeEnd("ctx");
  6379. $1=$recv($2).__at($recv($recv(delta)._y()).__plus(self["@y"]));
  6380. return $1;
  6381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6382. }, function($ctx1) {$ctx1.fill(self,"translateBy:",{delta:delta},$globals.Point)});
  6383. //>>excludeEnd("ctx");
  6384. },
  6385. //>>excludeStart("ide", pragmas.excludeIdeData);
  6386. args: ["delta"],
  6387. source: "translateBy: delta\x0a\x09\x22Answer a Point translated by delta (an instance of Point).\x22\x0a\x09^ (delta x + x) @ (delta y + y)",
  6388. referencedClasses: [],
  6389. //>>excludeEnd("ide");
  6390. messageSends: ["@", "+", "x", "y"]
  6391. }),
  6392. $globals.Point);
  6393. $core.addMethod(
  6394. $core.method({
  6395. selector: "x",
  6396. protocol: 'accessing',
  6397. fn: function (){
  6398. var self=this;
  6399. var $1;
  6400. $1=self["@x"];
  6401. return $1;
  6402. },
  6403. //>>excludeStart("ide", pragmas.excludeIdeData);
  6404. args: [],
  6405. source: "x\x0a\x09^ x",
  6406. referencedClasses: [],
  6407. //>>excludeEnd("ide");
  6408. messageSends: []
  6409. }),
  6410. $globals.Point);
  6411. $core.addMethod(
  6412. $core.method({
  6413. selector: "x:",
  6414. protocol: 'accessing',
  6415. fn: function (aNumber){
  6416. var self=this;
  6417. self["@x"]=aNumber;
  6418. return self;
  6419. },
  6420. //>>excludeStart("ide", pragmas.excludeIdeData);
  6421. args: ["aNumber"],
  6422. source: "x: aNumber\x0a\x09x := aNumber",
  6423. referencedClasses: [],
  6424. //>>excludeEnd("ide");
  6425. messageSends: []
  6426. }),
  6427. $globals.Point);
  6428. $core.addMethod(
  6429. $core.method({
  6430. selector: "y",
  6431. protocol: 'accessing',
  6432. fn: function (){
  6433. var self=this;
  6434. var $1;
  6435. $1=self["@y"];
  6436. return $1;
  6437. },
  6438. //>>excludeStart("ide", pragmas.excludeIdeData);
  6439. args: [],
  6440. source: "y\x0a\x09^ y",
  6441. referencedClasses: [],
  6442. //>>excludeEnd("ide");
  6443. messageSends: []
  6444. }),
  6445. $globals.Point);
  6446. $core.addMethod(
  6447. $core.method({
  6448. selector: "y:",
  6449. protocol: 'accessing',
  6450. fn: function (aNumber){
  6451. var self=this;
  6452. self["@y"]=aNumber;
  6453. return self;
  6454. },
  6455. //>>excludeStart("ide", pragmas.excludeIdeData);
  6456. args: ["aNumber"],
  6457. source: "y: aNumber\x0a\x09y := aNumber",
  6458. referencedClasses: [],
  6459. //>>excludeEnd("ide");
  6460. messageSends: []
  6461. }),
  6462. $globals.Point);
  6463. $core.addMethod(
  6464. $core.method({
  6465. selector: "classTag",
  6466. protocol: 'accessing',
  6467. fn: function (){
  6468. var self=this;
  6469. return "magnitude";
  6470. },
  6471. //>>excludeStart("ide", pragmas.excludeIdeData);
  6472. args: [],
  6473. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'magnitude'",
  6474. referencedClasses: [],
  6475. //>>excludeEnd("ide");
  6476. messageSends: []
  6477. }),
  6478. $globals.Point.klass);
  6479. $core.addMethod(
  6480. $core.method({
  6481. selector: "x:y:",
  6482. protocol: 'instance creation',
  6483. fn: function (aNumber,anotherNumber){
  6484. var self=this;
  6485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6486. return $core.withContext(function($ctx1) {
  6487. //>>excludeEnd("ctx");
  6488. var $2,$3,$1;
  6489. $2=self._new();
  6490. $recv($2)._x_(aNumber);
  6491. $recv($2)._y_(anotherNumber);
  6492. $3=$recv($2)._yourself();
  6493. $1=$3;
  6494. return $1;
  6495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6496. }, function($ctx1) {$ctx1.fill(self,"x:y:",{aNumber:aNumber,anotherNumber:anotherNumber},$globals.Point.klass)});
  6497. //>>excludeEnd("ctx");
  6498. },
  6499. //>>excludeStart("ide", pragmas.excludeIdeData);
  6500. args: ["aNumber", "anotherNumber"],
  6501. source: "x: aNumber y: anotherNumber\x0a\x09^ self new\x0a\x09\x09x: aNumber;\x0a\x09\x09y: anotherNumber;\x0a\x09\x09yourself",
  6502. referencedClasses: [],
  6503. //>>excludeEnd("ide");
  6504. messageSends: ["x:", "new", "y:", "yourself"]
  6505. }),
  6506. $globals.Point.klass);
  6507. $core.addClass('Random', $globals.Object, [], 'Kernel-Objects');
  6508. //>>excludeStart("ide", pragmas.excludeIdeData);
  6509. $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'`.";
  6510. //>>excludeEnd("ide");
  6511. $core.addMethod(
  6512. $core.method({
  6513. selector: "next",
  6514. protocol: 'accessing',
  6515. fn: function (){
  6516. var self=this;
  6517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6518. return $core.withContext(function($ctx1) {
  6519. //>>excludeEnd("ctx");
  6520. return Math.random();
  6521. return self;
  6522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6523. }, function($ctx1) {$ctx1.fill(self,"next",{},$globals.Random)});
  6524. //>>excludeEnd("ctx");
  6525. },
  6526. //>>excludeStart("ide", pragmas.excludeIdeData);
  6527. args: [],
  6528. source: "next\x0a\x09<return Math.random()>",
  6529. referencedClasses: [],
  6530. //>>excludeEnd("ide");
  6531. messageSends: []
  6532. }),
  6533. $globals.Random);
  6534. $core.addMethod(
  6535. $core.method({
  6536. selector: "next:",
  6537. protocol: 'accessing',
  6538. fn: function (anInteger){
  6539. var self=this;
  6540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6541. return $core.withContext(function($ctx1) {
  6542. //>>excludeEnd("ctx");
  6543. var $1;
  6544. $1=$recv((1)._to_(anInteger))._collect_((function(each){
  6545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6546. return $core.withContext(function($ctx2) {
  6547. //>>excludeEnd("ctx");
  6548. return self._next();
  6549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6550. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  6551. //>>excludeEnd("ctx");
  6552. }));
  6553. return $1;
  6554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6555. }, function($ctx1) {$ctx1.fill(self,"next:",{anInteger:anInteger},$globals.Random)});
  6556. //>>excludeEnd("ctx");
  6557. },
  6558. //>>excludeStart("ide", pragmas.excludeIdeData);
  6559. args: ["anInteger"],
  6560. source: "next: anInteger\x0a\x09^ (1 to: anInteger) collect: [ :each | self next ]",
  6561. referencedClasses: [],
  6562. //>>excludeEnd("ide");
  6563. messageSends: ["collect:", "to:", "next"]
  6564. }),
  6565. $globals.Random);
  6566. $core.addClass('UndefinedObject', $globals.Object, [], 'Kernel-Objects');
  6567. //>>excludeStart("ide", pragmas.excludeIdeData);
  6568. $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`.";
  6569. //>>excludeEnd("ide");
  6570. $core.addMethod(
  6571. $core.method({
  6572. selector: "asJSON",
  6573. protocol: 'converting',
  6574. fn: function (){
  6575. var self=this;
  6576. var $1;
  6577. $1=null;
  6578. return $1;
  6579. },
  6580. //>>excludeStart("ide", pragmas.excludeIdeData);
  6581. args: [],
  6582. source: "asJSON\x0a\x09^ null",
  6583. referencedClasses: [],
  6584. //>>excludeEnd("ide");
  6585. messageSends: []
  6586. }),
  6587. $globals.UndefinedObject);
  6588. $core.addMethod(
  6589. $core.method({
  6590. selector: "deepCopy",
  6591. protocol: 'copying',
  6592. fn: function (){
  6593. var self=this;
  6594. return self;
  6595. },
  6596. //>>excludeStart("ide", pragmas.excludeIdeData);
  6597. args: [],
  6598. source: "deepCopy\x0a\x09^ self",
  6599. referencedClasses: [],
  6600. //>>excludeEnd("ide");
  6601. messageSends: []
  6602. }),
  6603. $globals.UndefinedObject);
  6604. $core.addMethod(
  6605. $core.method({
  6606. selector: "ifNil:",
  6607. protocol: 'testing',
  6608. fn: function (aBlock){
  6609. var self=this;
  6610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6611. return $core.withContext(function($ctx1) {
  6612. //>>excludeEnd("ctx");
  6613. var $1;
  6614. $1=self._ifNil_ifNotNil_(aBlock,(function(){
  6615. }));
  6616. return $1;
  6617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6618. }, function($ctx1) {$ctx1.fill(self,"ifNil:",{aBlock:aBlock},$globals.UndefinedObject)});
  6619. //>>excludeEnd("ctx");
  6620. },
  6621. //>>excludeStart("ide", pragmas.excludeIdeData);
  6622. args: ["aBlock"],
  6623. source: "ifNil: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self ifNil: aBlock ifNotNil: []",
  6624. referencedClasses: [],
  6625. //>>excludeEnd("ide");
  6626. messageSends: ["ifNil:ifNotNil:"]
  6627. }),
  6628. $globals.UndefinedObject);
  6629. $core.addMethod(
  6630. $core.method({
  6631. selector: "ifNil:ifNotNil:",
  6632. protocol: 'testing',
  6633. fn: function (aBlock,anotherBlock){
  6634. var self=this;
  6635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6636. return $core.withContext(function($ctx1) {
  6637. //>>excludeEnd("ctx");
  6638. var $1;
  6639. $1=$recv(aBlock)._value();
  6640. return $1;
  6641. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6642. }, function($ctx1) {$ctx1.fill(self,"ifNil:ifNotNil:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.UndefinedObject)});
  6643. //>>excludeEnd("ctx");
  6644. },
  6645. //>>excludeStart("ide", pragmas.excludeIdeData);
  6646. args: ["aBlock", "anotherBlock"],
  6647. source: "ifNil: aBlock ifNotNil: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ aBlock value",
  6648. referencedClasses: [],
  6649. //>>excludeEnd("ide");
  6650. messageSends: ["value"]
  6651. }),
  6652. $globals.UndefinedObject);
  6653. $core.addMethod(
  6654. $core.method({
  6655. selector: "ifNotNil:",
  6656. protocol: 'testing',
  6657. fn: function (aBlock){
  6658. var self=this;
  6659. return self;
  6660. },
  6661. //>>excludeStart("ide", pragmas.excludeIdeData);
  6662. args: ["aBlock"],
  6663. source: "ifNotNil: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self",
  6664. referencedClasses: [],
  6665. //>>excludeEnd("ide");
  6666. messageSends: []
  6667. }),
  6668. $globals.UndefinedObject);
  6669. $core.addMethod(
  6670. $core.method({
  6671. selector: "ifNotNil:ifNil:",
  6672. protocol: 'testing',
  6673. fn: function (aBlock,anotherBlock){
  6674. var self=this;
  6675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6676. return $core.withContext(function($ctx1) {
  6677. //>>excludeEnd("ctx");
  6678. var $1;
  6679. $1=$recv(anotherBlock)._value();
  6680. return $1;
  6681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6682. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:ifNil:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.UndefinedObject)});
  6683. //>>excludeEnd("ctx");
  6684. },
  6685. //>>excludeStart("ide", pragmas.excludeIdeData);
  6686. args: ["aBlock", "anotherBlock"],
  6687. source: "ifNotNil: aBlock ifNil: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ anotherBlock value",
  6688. referencedClasses: [],
  6689. //>>excludeEnd("ide");
  6690. messageSends: ["value"]
  6691. }),
  6692. $globals.UndefinedObject);
  6693. $core.addMethod(
  6694. $core.method({
  6695. selector: "isImmutable",
  6696. protocol: 'testing',
  6697. fn: function (){
  6698. var self=this;
  6699. return true;
  6700. },
  6701. //>>excludeStart("ide", pragmas.excludeIdeData);
  6702. args: [],
  6703. source: "isImmutable\x0a\x09^ true",
  6704. referencedClasses: [],
  6705. //>>excludeEnd("ide");
  6706. messageSends: []
  6707. }),
  6708. $globals.UndefinedObject);
  6709. $core.addMethod(
  6710. $core.method({
  6711. selector: "isNil",
  6712. protocol: 'testing',
  6713. fn: function (){
  6714. var self=this;
  6715. return true;
  6716. },
  6717. //>>excludeStart("ide", pragmas.excludeIdeData);
  6718. args: [],
  6719. source: "isNil\x0a\x09^ true",
  6720. referencedClasses: [],
  6721. //>>excludeEnd("ide");
  6722. messageSends: []
  6723. }),
  6724. $globals.UndefinedObject);
  6725. $core.addMethod(
  6726. $core.method({
  6727. selector: "notNil",
  6728. protocol: 'testing',
  6729. fn: function (){
  6730. var self=this;
  6731. return false;
  6732. },
  6733. //>>excludeStart("ide", pragmas.excludeIdeData);
  6734. args: [],
  6735. source: "notNil\x0a\x09^ false",
  6736. referencedClasses: [],
  6737. //>>excludeEnd("ide");
  6738. messageSends: []
  6739. }),
  6740. $globals.UndefinedObject);
  6741. $core.addMethod(
  6742. $core.method({
  6743. selector: "printOn:",
  6744. protocol: 'printing',
  6745. fn: function (aStream){
  6746. var self=this;
  6747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6748. return $core.withContext(function($ctx1) {
  6749. //>>excludeEnd("ctx");
  6750. $recv(aStream)._nextPutAll_("nil");
  6751. return self;
  6752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6753. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.UndefinedObject)});
  6754. //>>excludeEnd("ctx");
  6755. },
  6756. //>>excludeStart("ide", pragmas.excludeIdeData);
  6757. args: ["aStream"],
  6758. source: "printOn: aStream\x0a\x09aStream nextPutAll: 'nil'",
  6759. referencedClasses: [],
  6760. //>>excludeEnd("ide");
  6761. messageSends: ["nextPutAll:"]
  6762. }),
  6763. $globals.UndefinedObject);
  6764. $core.addMethod(
  6765. $core.method({
  6766. selector: "shallowCopy",
  6767. protocol: 'copying',
  6768. fn: function (){
  6769. var self=this;
  6770. return self;
  6771. },
  6772. //>>excludeStart("ide", pragmas.excludeIdeData);
  6773. args: [],
  6774. source: "shallowCopy\x0a\x09^ self",
  6775. referencedClasses: [],
  6776. //>>excludeEnd("ide");
  6777. messageSends: []
  6778. }),
  6779. $globals.UndefinedObject);
  6780. $core.addMethod(
  6781. $core.method({
  6782. selector: "subclass:instanceVariableNames:",
  6783. protocol: 'class creation',
  6784. fn: function (aString,anotherString){
  6785. var self=this;
  6786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6787. return $core.withContext(function($ctx1) {
  6788. //>>excludeEnd("ctx");
  6789. var $1;
  6790. $1=self._subclass_instanceVariableNames_package_(aString,anotherString,nil);
  6791. return $1;
  6792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6793. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:",{aString:aString,anotherString:anotherString},$globals.UndefinedObject)});
  6794. //>>excludeEnd("ctx");
  6795. },
  6796. //>>excludeStart("ide", pragmas.excludeIdeData);
  6797. args: ["aString", "anotherString"],
  6798. source: "subclass: aString instanceVariableNames: anotherString\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: anotherString package: nil",
  6799. referencedClasses: [],
  6800. //>>excludeEnd("ide");
  6801. messageSends: ["subclass:instanceVariableNames:package:"]
  6802. }),
  6803. $globals.UndefinedObject);
  6804. $core.addMethod(
  6805. $core.method({
  6806. selector: "subclass:instanceVariableNames:category:",
  6807. protocol: 'class creation',
  6808. fn: function (aString,aString2,aString3){
  6809. var self=this;
  6810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6811. return $core.withContext(function($ctx1) {
  6812. //>>excludeEnd("ctx");
  6813. var $1;
  6814. $1=self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
  6815. return $1;
  6816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6817. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:category:",{aString:aString,aString2:aString2,aString3:aString3},$globals.UndefinedObject)});
  6818. //>>excludeEnd("ctx");
  6819. },
  6820. //>>excludeStart("ide", pragmas.excludeIdeData);
  6821. args: ["aString", "aString2", "aString3"],
  6822. source: "subclass: aString instanceVariableNames: aString2 category: aString3\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: aString2 package: aString3",
  6823. referencedClasses: [],
  6824. //>>excludeEnd("ide");
  6825. messageSends: ["subclass:instanceVariableNames:package:"]
  6826. }),
  6827. $globals.UndefinedObject);
  6828. $core.addMethod(
  6829. $core.method({
  6830. selector: "subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",
  6831. protocol: 'class creation',
  6832. fn: function (aString,aString2,classVars,pools,aString3){
  6833. var self=this;
  6834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6835. return $core.withContext(function($ctx1) {
  6836. //>>excludeEnd("ctx");
  6837. var $1;
  6838. $1=self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
  6839. return $1;
  6840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6841. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",{aString:aString,aString2:aString2,classVars:classVars,pools:pools,aString3:aString3},$globals.UndefinedObject)});
  6842. //>>excludeEnd("ctx");
  6843. },
  6844. //>>excludeStart("ide", pragmas.excludeIdeData);
  6845. args: ["aString", "aString2", "classVars", "pools", "aString3"],
  6846. 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",
  6847. referencedClasses: [],
  6848. //>>excludeEnd("ide");
  6849. messageSends: ["subclass:instanceVariableNames:package:"]
  6850. }),
  6851. $globals.UndefinedObject);
  6852. $core.addMethod(
  6853. $core.method({
  6854. selector: "subclass:instanceVariableNames:package:",
  6855. protocol: 'class creation',
  6856. fn: function (aString,aString2,aString3){
  6857. var self=this;
  6858. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  6859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6860. return $core.withContext(function($ctx1) {
  6861. //>>excludeEnd("ctx");
  6862. var $1;
  6863. $1=$recv($recv($ClassBuilder())._new())._superclass_subclass_instanceVariableNames_package_(self,$recv(aString)._asString(),aString2,aString3);
  6864. return $1;
  6865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6866. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:package:",{aString:aString,aString2:aString2,aString3:aString3},$globals.UndefinedObject)});
  6867. //>>excludeEnd("ctx");
  6868. },
  6869. //>>excludeStart("ide", pragmas.excludeIdeData);
  6870. args: ["aString", "aString2", "aString3"],
  6871. source: "subclass: aString instanceVariableNames: aString2 package: aString3\x0a\x09^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString asString instanceVariableNames: aString2 package: aString3",
  6872. referencedClasses: ["ClassBuilder"],
  6873. //>>excludeEnd("ide");
  6874. messageSends: ["superclass:subclass:instanceVariableNames:package:", "new", "asString"]
  6875. }),
  6876. $globals.UndefinedObject);
  6877. $core.addMethod(
  6878. $core.method({
  6879. selector: "new",
  6880. protocol: 'instance creation',
  6881. fn: function (){
  6882. var self=this;
  6883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6884. return $core.withContext(function($ctx1) {
  6885. //>>excludeEnd("ctx");
  6886. self._error_("You cannot create new instances of UndefinedObject. Use nil");
  6887. return self;
  6888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6889. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.UndefinedObject.klass)});
  6890. //>>excludeEnd("ctx");
  6891. },
  6892. //>>excludeStart("ide", pragmas.excludeIdeData);
  6893. args: [],
  6894. source: "new\x0a\x09\x09self error: 'You cannot create new instances of UndefinedObject. Use nil'",
  6895. referencedClasses: [],
  6896. //>>excludeEnd("ide");
  6897. messageSends: ["error:"]
  6898. }),
  6899. $globals.UndefinedObject.klass);
  6900. });
  6901. define("amber_core/Kernel-Classes", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  6902. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  6903. $core.addPackage('Kernel-Classes');
  6904. $core.packages["Kernel-Classes"].innerEval = function (expr) { return eval(expr); };
  6905. $core.packages["Kernel-Classes"].transport = {"type":"amd","amdNamespace":"amber_core"};
  6906. $core.addClass('Behavior', $globals.Object, [], 'Kernel-Classes');
  6907. //>>excludeStart("ide", pragmas.excludeIdeData);
  6908. $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.";
  6909. //>>excludeEnd("ide");
  6910. $core.addMethod(
  6911. $core.method({
  6912. selector: ">>",
  6913. protocol: 'accessing',
  6914. fn: function (aString){
  6915. var self=this;
  6916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6917. return $core.withContext(function($ctx1) {
  6918. //>>excludeEnd("ctx");
  6919. var $1;
  6920. $1=self._methodAt_(aString);
  6921. return $1;
  6922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6923. }, function($ctx1) {$ctx1.fill(self,">>",{aString:aString},$globals.Behavior)});
  6924. //>>excludeEnd("ctx");
  6925. },
  6926. //>>excludeStart("ide", pragmas.excludeIdeData);
  6927. args: ["aString"],
  6928. source: ">> aString\x0a\x09^ self methodAt: aString",
  6929. referencedClasses: [],
  6930. //>>excludeEnd("ide");
  6931. messageSends: ["methodAt:"]
  6932. }),
  6933. $globals.Behavior);
  6934. $core.addMethod(
  6935. $core.method({
  6936. selector: "addCompiledMethod:",
  6937. protocol: 'compiling',
  6938. fn: function (aMethod){
  6939. var self=this;
  6940. var oldMethod,announcement;
  6941. function $MethodAdded(){return $globals.MethodAdded||(typeof MethodAdded=="undefined"?nil:MethodAdded)}
  6942. function $MethodModified(){return $globals.MethodModified||(typeof MethodModified=="undefined"?nil:MethodModified)}
  6943. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  6944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6945. return $core.withContext(function($ctx1) {
  6946. //>>excludeEnd("ctx");
  6947. var $2,$3,$1,$4,$5,$6,$7,$8,$9,$10,$11,$receiver;
  6948. oldMethod=$recv(self._methodDictionary())._at_ifAbsent_($recv(aMethod)._selector(),(function(){
  6949. return nil;
  6950. }));
  6951. $2=self._protocols();
  6952. $3=$recv(aMethod)._protocol();
  6953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6954. $ctx1.sendIdx["protocol"]=1;
  6955. //>>excludeEnd("ctx");
  6956. $1=$recv($2)._includes_($3);
  6957. if(!$core.assert($1)){
  6958. $4=self._organization();
  6959. $5=$recv(aMethod)._protocol();
  6960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6961. $ctx1.sendIdx["protocol"]=2;
  6962. //>>excludeEnd("ctx");
  6963. $recv($4)._addElement_($5);
  6964. };
  6965. self._basicAddCompiledMethod_(aMethod);
  6966. $6=oldMethod;
  6967. if(($receiver = $6) == null || $receiver.isNil){
  6968. $6;
  6969. } else {
  6970. self._removeProtocolIfEmpty_($recv(oldMethod)._protocol());
  6971. };
  6972. $7=oldMethod;
  6973. if(($receiver = $7) == null || $receiver.isNil){
  6974. $8=$recv($MethodAdded())._new();
  6975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6976. $ctx1.sendIdx["new"]=1;
  6977. //>>excludeEnd("ctx");
  6978. $recv($8)._method_(aMethod);
  6979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6980. $ctx1.sendIdx["method:"]=1;
  6981. //>>excludeEnd("ctx");
  6982. $9=$recv($8)._yourself();
  6983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6984. $ctx1.sendIdx["yourself"]=1;
  6985. //>>excludeEnd("ctx");
  6986. announcement=$9;
  6987. } else {
  6988. $10=$recv($MethodModified())._new();
  6989. $recv($10)._oldMethod_(oldMethod);
  6990. $recv($10)._method_(aMethod);
  6991. $11=$recv($10)._yourself();
  6992. announcement=$11;
  6993. };
  6994. $recv($recv($SystemAnnouncer())._current())._announce_(announcement);
  6995. return self;
  6996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6997. }, function($ctx1) {$ctx1.fill(self,"addCompiledMethod:",{aMethod:aMethod,oldMethod:oldMethod,announcement:announcement},$globals.Behavior)});
  6998. //>>excludeEnd("ctx");
  6999. },
  7000. //>>excludeStart("ide", pragmas.excludeIdeData);
  7001. args: ["aMethod"],
  7002. 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",
  7003. referencedClasses: ["MethodAdded", "MethodModified", "SystemAnnouncer"],
  7004. //>>excludeEnd("ide");
  7005. messageSends: ["at:ifAbsent:", "methodDictionary", "selector", "ifFalse:", "includes:", "protocols", "protocol", "addElement:", "organization", "basicAddCompiledMethod:", "ifNotNil:", "removeProtocolIfEmpty:", "ifNil:ifNotNil:", "method:", "new", "yourself", "oldMethod:", "announce:", "current"]
  7006. }),
  7007. $globals.Behavior);
  7008. $core.addMethod(
  7009. $core.method({
  7010. selector: "allInstanceVariableNames",
  7011. protocol: 'accessing',
  7012. fn: function (){
  7013. var self=this;
  7014. var result;
  7015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7016. return $core.withContext(function($ctx1) {
  7017. //>>excludeEnd("ctx");
  7018. var $1,$2,$receiver;
  7019. result=$recv(self._instanceVariableNames())._copy();
  7020. $1=self._superclass();
  7021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7022. $ctx1.sendIdx["superclass"]=1;
  7023. //>>excludeEnd("ctx");
  7024. if(($receiver = $1) == null || $receiver.isNil){
  7025. $1;
  7026. } else {
  7027. $recv(result)._addAll_($recv(self._superclass())._allInstanceVariableNames());
  7028. };
  7029. $2=result;
  7030. return $2;
  7031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7032. }, function($ctx1) {$ctx1.fill(self,"allInstanceVariableNames",{result:result},$globals.Behavior)});
  7033. //>>excludeEnd("ctx");
  7034. },
  7035. //>>excludeStart("ide", pragmas.excludeIdeData);
  7036. args: [],
  7037. source: "allInstanceVariableNames\x0a\x09| result |\x0a\x09result := self instanceVariableNames copy.\x0a\x09self superclass ifNotNil: [\x0a\x09\x09result addAll: self superclass allInstanceVariableNames ].\x0a\x09^ result",
  7038. referencedClasses: [],
  7039. //>>excludeEnd("ide");
  7040. messageSends: ["copy", "instanceVariableNames", "ifNotNil:", "superclass", "addAll:", "allInstanceVariableNames"]
  7041. }),
  7042. $globals.Behavior);
  7043. $core.addMethod(
  7044. $core.method({
  7045. selector: "allSelectors",
  7046. protocol: 'accessing',
  7047. fn: function (){
  7048. var self=this;
  7049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7050. return $core.withContext(function($ctx1) {
  7051. //>>excludeEnd("ctx");
  7052. var $2,$3,$4,$1;
  7053. $2=self._allSuperclasses();
  7054. $3=self._selectors();
  7055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7056. $ctx1.sendIdx["selectors"]=1;
  7057. //>>excludeEnd("ctx");
  7058. $1=$recv($2)._inject_into_($3,(function(acc,each){
  7059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7060. return $core.withContext(function($ctx2) {
  7061. //>>excludeEnd("ctx");
  7062. $recv(acc)._addAll_($recv(each)._selectors());
  7063. $4=$recv(acc)._yourself();
  7064. return $4;
  7065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7066. }, function($ctx2) {$ctx2.fillBlock({acc:acc,each:each},$ctx1,1)});
  7067. //>>excludeEnd("ctx");
  7068. }));
  7069. return $1;
  7070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7071. }, function($ctx1) {$ctx1.fill(self,"allSelectors",{},$globals.Behavior)});
  7072. //>>excludeEnd("ctx");
  7073. },
  7074. //>>excludeStart("ide", pragmas.excludeIdeData);
  7075. args: [],
  7076. source: "allSelectors\x0a\x09^ self allSuperclasses\x0a\x09\x09inject: self selectors\x0a\x09\x09into: [ :acc :each | acc addAll: each selectors; yourself ]",
  7077. referencedClasses: [],
  7078. //>>excludeEnd("ide");
  7079. messageSends: ["inject:into:", "allSuperclasses", "selectors", "addAll:", "yourself"]
  7080. }),
  7081. $globals.Behavior);
  7082. $core.addMethod(
  7083. $core.method({
  7084. selector: "allSubclasses",
  7085. protocol: 'accessing',
  7086. fn: function (){
  7087. var self=this;
  7088. var subclasses,index;
  7089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7090. return $core.withContext(function($ctx1) {
  7091. //>>excludeEnd("ctx");
  7092. var $1;
  7093. subclasses=self._subclasses();
  7094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7095. $ctx1.sendIdx["subclasses"]=1;
  7096. //>>excludeEnd("ctx");
  7097. index=(1);
  7098. $recv((function(){
  7099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7100. return $core.withContext(function($ctx2) {
  7101. //>>excludeEnd("ctx");
  7102. return $recv(index).__gt($recv(subclasses)._size());
  7103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7104. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  7105. //>>excludeEnd("ctx");
  7106. }))._whileFalse_((function(){
  7107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7108. return $core.withContext(function($ctx2) {
  7109. //>>excludeEnd("ctx");
  7110. $recv(subclasses)._addAll_($recv($recv(subclasses)._at_(index))._subclasses());
  7111. index=$recv(index).__plus((1));
  7112. return index;
  7113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7114. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  7115. //>>excludeEnd("ctx");
  7116. }));
  7117. $1=subclasses;
  7118. return $1;
  7119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7120. }, function($ctx1) {$ctx1.fill(self,"allSubclasses",{subclasses:subclasses,index:index},$globals.Behavior)});
  7121. //>>excludeEnd("ctx");
  7122. },
  7123. //>>excludeStart("ide", pragmas.excludeIdeData);
  7124. args: [],
  7125. 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",
  7126. referencedClasses: [],
  7127. //>>excludeEnd("ide");
  7128. messageSends: ["subclasses", "whileFalse:", ">", "size", "addAll:", "at:", "+"]
  7129. }),
  7130. $globals.Behavior);
  7131. $core.addMethod(
  7132. $core.method({
  7133. selector: "allSubclassesDo:",
  7134. protocol: 'enumerating',
  7135. fn: function (aBlock){
  7136. var self=this;
  7137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7138. return $core.withContext(function($ctx1) {
  7139. //>>excludeEnd("ctx");
  7140. $recv(self._allSubclasses())._do_((function(each){
  7141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7142. return $core.withContext(function($ctx2) {
  7143. //>>excludeEnd("ctx");
  7144. return $recv(aBlock)._value_(each);
  7145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7146. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  7147. //>>excludeEnd("ctx");
  7148. }));
  7149. return self;
  7150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7151. }, function($ctx1) {$ctx1.fill(self,"allSubclassesDo:",{aBlock:aBlock},$globals.Behavior)});
  7152. //>>excludeEnd("ctx");
  7153. },
  7154. //>>excludeStart("ide", pragmas.excludeIdeData);
  7155. args: ["aBlock"],
  7156. 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 ]",
  7157. referencedClasses: [],
  7158. //>>excludeEnd("ide");
  7159. messageSends: ["do:", "allSubclasses", "value:"]
  7160. }),
  7161. $globals.Behavior);
  7162. $core.addMethod(
  7163. $core.method({
  7164. selector: "allSuperclasses",
  7165. protocol: 'accessing',
  7166. fn: function (){
  7167. var self=this;
  7168. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  7169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7170. return $core.withContext(function($ctx1) {
  7171. //>>excludeEnd("ctx");
  7172. var $1,$2,$5,$4,$6,$3,$receiver;
  7173. $1=self._superclass();
  7174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7175. $ctx1.sendIdx["superclass"]=1;
  7176. //>>excludeEnd("ctx");
  7177. if(($receiver = $1) == null || $receiver.isNil){
  7178. $2=[];
  7179. return $2;
  7180. } else {
  7181. $1;
  7182. };
  7183. $5=self._superclass();
  7184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7185. $ctx1.sendIdx["superclass"]=2;
  7186. //>>excludeEnd("ctx");
  7187. $4=$recv($OrderedCollection())._with_($5);
  7188. $recv($4)._addAll_($recv(self._superclass())._allSuperclasses());
  7189. $6=$recv($4)._yourself();
  7190. $3=$6;
  7191. return $3;
  7192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7193. }, function($ctx1) {$ctx1.fill(self,"allSuperclasses",{},$globals.Behavior)});
  7194. //>>excludeEnd("ctx");
  7195. },
  7196. //>>excludeStart("ide", pragmas.excludeIdeData);
  7197. args: [],
  7198. 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",
  7199. referencedClasses: ["OrderedCollection"],
  7200. //>>excludeEnd("ide");
  7201. messageSends: ["ifNil:", "superclass", "addAll:", "with:", "allSuperclasses", "yourself"]
  7202. }),
  7203. $globals.Behavior);
  7204. $core.addMethod(
  7205. $core.method({
  7206. selector: "basicAddCompiledMethod:",
  7207. protocol: 'private',
  7208. fn: function (aMethod){
  7209. var self=this;
  7210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7211. return $core.withContext(function($ctx1) {
  7212. //>>excludeEnd("ctx");
  7213. $core.addMethod(aMethod, self);
  7214. return self;
  7215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7216. }, function($ctx1) {$ctx1.fill(self,"basicAddCompiledMethod:",{aMethod:aMethod},$globals.Behavior)});
  7217. //>>excludeEnd("ctx");
  7218. },
  7219. //>>excludeStart("ide", pragmas.excludeIdeData);
  7220. args: ["aMethod"],
  7221. source: "basicAddCompiledMethod: aMethod\x0a\x09<$core.addMethod(aMethod, self)>",
  7222. referencedClasses: [],
  7223. //>>excludeEnd("ide");
  7224. messageSends: []
  7225. }),
  7226. $globals.Behavior);
  7227. $core.addMethod(
  7228. $core.method({
  7229. selector: "basicNew",
  7230. protocol: 'instance creation',
  7231. fn: function (){
  7232. var self=this;
  7233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7234. return $core.withContext(function($ctx1) {
  7235. //>>excludeEnd("ctx");
  7236. return new self.fn();
  7237. return self;
  7238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7239. }, function($ctx1) {$ctx1.fill(self,"basicNew",{},$globals.Behavior)});
  7240. //>>excludeEnd("ctx");
  7241. },
  7242. //>>excludeStart("ide", pragmas.excludeIdeData);
  7243. args: [],
  7244. source: "basicNew\x0a\x09<return new self.fn()>",
  7245. referencedClasses: [],
  7246. //>>excludeEnd("ide");
  7247. messageSends: []
  7248. }),
  7249. $globals.Behavior);
  7250. $core.addMethod(
  7251. $core.method({
  7252. selector: "basicRemoveCompiledMethod:",
  7253. protocol: 'private',
  7254. fn: function (aMethod){
  7255. var self=this;
  7256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7257. return $core.withContext(function($ctx1) {
  7258. //>>excludeEnd("ctx");
  7259. $core.removeMethod(aMethod,self);
  7260. return self;
  7261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7262. }, function($ctx1) {$ctx1.fill(self,"basicRemoveCompiledMethod:",{aMethod:aMethod},$globals.Behavior)});
  7263. //>>excludeEnd("ctx");
  7264. },
  7265. //>>excludeStart("ide", pragmas.excludeIdeData);
  7266. args: ["aMethod"],
  7267. source: "basicRemoveCompiledMethod: aMethod\x0a\x09<$core.removeMethod(aMethod,self)>",
  7268. referencedClasses: [],
  7269. //>>excludeEnd("ide");
  7270. messageSends: []
  7271. }),
  7272. $globals.Behavior);
  7273. $core.addMethod(
  7274. $core.method({
  7275. selector: "canUnderstand:",
  7276. protocol: 'testing',
  7277. fn: function (aSelector){
  7278. var self=this;
  7279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7280. return $core.withContext(function($ctx1) {
  7281. //>>excludeEnd("ctx");
  7282. var $3,$2,$1;
  7283. $1=$recv(self._includesSelector_($recv(aSelector)._asString()))._or_((function(){
  7284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7285. return $core.withContext(function($ctx2) {
  7286. //>>excludeEnd("ctx");
  7287. $3=self._superclass();
  7288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7289. $ctx2.sendIdx["superclass"]=1;
  7290. //>>excludeEnd("ctx");
  7291. $2=$recv($3)._notNil();
  7292. return $recv($2)._and_((function(){
  7293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7294. return $core.withContext(function($ctx3) {
  7295. //>>excludeEnd("ctx");
  7296. return $recv(self._superclass())._canUnderstand_(aSelector);
  7297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7298. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  7299. //>>excludeEnd("ctx");
  7300. }));
  7301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7302. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  7303. //>>excludeEnd("ctx");
  7304. }));
  7305. return $1;
  7306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7307. }, function($ctx1) {$ctx1.fill(self,"canUnderstand:",{aSelector:aSelector},$globals.Behavior)});
  7308. //>>excludeEnd("ctx");
  7309. },
  7310. //>>excludeStart("ide", pragmas.excludeIdeData);
  7311. args: ["aSelector"],
  7312. source: "canUnderstand: aSelector\x0a\x09^ (self includesSelector: aSelector asString) or: [\x0a\x09\x09self superclass notNil and: [ self superclass canUnderstand: aSelector ]]",
  7313. referencedClasses: [],
  7314. //>>excludeEnd("ide");
  7315. messageSends: ["or:", "includesSelector:", "asString", "and:", "notNil", "superclass", "canUnderstand:"]
  7316. }),
  7317. $globals.Behavior);
  7318. $core.addMethod(
  7319. $core.method({
  7320. selector: "comment",
  7321. protocol: 'accessing',
  7322. fn: function (){
  7323. var self=this;
  7324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7325. return $core.withContext(function($ctx1) {
  7326. //>>excludeEnd("ctx");
  7327. var $2,$1,$receiver;
  7328. $2=self._basicAt_("comment");
  7329. if(($receiver = $2) == null || $receiver.isNil){
  7330. $1="";
  7331. } else {
  7332. $1=$2;
  7333. };
  7334. return $1;
  7335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7336. }, function($ctx1) {$ctx1.fill(self,"comment",{},$globals.Behavior)});
  7337. //>>excludeEnd("ctx");
  7338. },
  7339. //>>excludeStart("ide", pragmas.excludeIdeData);
  7340. args: [],
  7341. source: "comment\x0a\x09^ (self basicAt: 'comment') ifNil: [ '' ]",
  7342. referencedClasses: [],
  7343. //>>excludeEnd("ide");
  7344. messageSends: ["ifNil:", "basicAt:"]
  7345. }),
  7346. $globals.Behavior);
  7347. $core.addMethod(
  7348. $core.method({
  7349. selector: "comment:",
  7350. protocol: 'accessing',
  7351. fn: function (aString){
  7352. var self=this;
  7353. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  7354. function $ClassCommentChanged(){return $globals.ClassCommentChanged||(typeof ClassCommentChanged=="undefined"?nil:ClassCommentChanged)}
  7355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7356. return $core.withContext(function($ctx1) {
  7357. //>>excludeEnd("ctx");
  7358. var $1,$2;
  7359. self._basicAt_put_("comment",aString);
  7360. $1=$recv($ClassCommentChanged())._new();
  7361. $recv($1)._theClass_(self);
  7362. $2=$recv($1)._yourself();
  7363. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  7364. return self;
  7365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7366. }, function($ctx1) {$ctx1.fill(self,"comment:",{aString:aString},$globals.Behavior)});
  7367. //>>excludeEnd("ctx");
  7368. },
  7369. //>>excludeStart("ide", pragmas.excludeIdeData);
  7370. args: ["aString"],
  7371. 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)",
  7372. referencedClasses: ["SystemAnnouncer", "ClassCommentChanged"],
  7373. //>>excludeEnd("ide");
  7374. messageSends: ["basicAt:put:", "announce:", "current", "theClass:", "new", "yourself"]
  7375. }),
  7376. $globals.Behavior);
  7377. $core.addMethod(
  7378. $core.method({
  7379. selector: "commentStamp",
  7380. protocol: 'accessing',
  7381. fn: function (){
  7382. var self=this;
  7383. function $ClassCommentReader(){return $globals.ClassCommentReader||(typeof ClassCommentReader=="undefined"?nil:ClassCommentReader)}
  7384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7385. return $core.withContext(function($ctx1) {
  7386. //>>excludeEnd("ctx");
  7387. var $2,$3,$1;
  7388. $2=$recv($ClassCommentReader())._new();
  7389. $recv($2)._class_(self);
  7390. $3=$recv($2)._yourself();
  7391. $1=$3;
  7392. return $1;
  7393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7394. }, function($ctx1) {$ctx1.fill(self,"commentStamp",{},$globals.Behavior)});
  7395. //>>excludeEnd("ctx");
  7396. },
  7397. //>>excludeStart("ide", pragmas.excludeIdeData);
  7398. args: [],
  7399. source: "commentStamp\x0a\x09^ ClassCommentReader new\x0a\x09class: self;\x0a\x09yourself",
  7400. referencedClasses: ["ClassCommentReader"],
  7401. //>>excludeEnd("ide");
  7402. messageSends: ["class:", "new", "yourself"]
  7403. }),
  7404. $globals.Behavior);
  7405. $core.addMethod(
  7406. $core.method({
  7407. selector: "commentStamp:prior:",
  7408. protocol: 'accessing',
  7409. fn: function (aStamp,prior){
  7410. var self=this;
  7411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7412. return $core.withContext(function($ctx1) {
  7413. //>>excludeEnd("ctx");
  7414. var $1;
  7415. $1=self._commentStamp();
  7416. return $1;
  7417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7418. }, function($ctx1) {$ctx1.fill(self,"commentStamp:prior:",{aStamp:aStamp,prior:prior},$globals.Behavior)});
  7419. //>>excludeEnd("ctx");
  7420. },
  7421. //>>excludeStart("ide", pragmas.excludeIdeData);
  7422. args: ["aStamp", "prior"],
  7423. source: "commentStamp: aStamp prior: prior\x0a\x09\x09^ self commentStamp",
  7424. referencedClasses: [],
  7425. //>>excludeEnd("ide");
  7426. messageSends: ["commentStamp"]
  7427. }),
  7428. $globals.Behavior);
  7429. $core.addMethod(
  7430. $core.method({
  7431. selector: "compile:protocol:",
  7432. protocol: 'compiling',
  7433. fn: function (aString,anotherString){
  7434. var self=this;
  7435. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  7436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7437. return $core.withContext(function($ctx1) {
  7438. //>>excludeEnd("ctx");
  7439. var $1;
  7440. $1=$recv($recv($Compiler())._new())._install_forClass_protocol_(aString,self,anotherString);
  7441. return $1;
  7442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7443. }, function($ctx1) {$ctx1.fill(self,"compile:protocol:",{aString:aString,anotherString:anotherString},$globals.Behavior)});
  7444. //>>excludeEnd("ctx");
  7445. },
  7446. //>>excludeStart("ide", pragmas.excludeIdeData);
  7447. args: ["aString", "anotherString"],
  7448. source: "compile: aString protocol: anotherString\x0a\x09^ Compiler new\x0a\x09\x09install: aString\x0a\x09\x09forClass: self\x0a\x09\x09protocol: anotherString",
  7449. referencedClasses: ["Compiler"],
  7450. //>>excludeEnd("ide");
  7451. messageSends: ["install:forClass:protocol:", "new"]
  7452. }),
  7453. $globals.Behavior);
  7454. $core.addMethod(
  7455. $core.method({
  7456. selector: "definition",
  7457. protocol: 'accessing',
  7458. fn: function (){
  7459. var self=this;
  7460. return "";
  7461. },
  7462. //>>excludeStart("ide", pragmas.excludeIdeData);
  7463. args: [],
  7464. source: "definition\x0a\x09^ ''",
  7465. referencedClasses: [],
  7466. //>>excludeEnd("ide");
  7467. messageSends: []
  7468. }),
  7469. $globals.Behavior);
  7470. $core.addMethod(
  7471. $core.method({
  7472. selector: "includesBehavior:",
  7473. protocol: 'testing',
  7474. fn: function (aClass){
  7475. var self=this;
  7476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7477. return $core.withContext(function($ctx1) {
  7478. //>>excludeEnd("ctx");
  7479. var $1;
  7480. $1=$recv(self.__eq_eq(aClass))._or_((function(){
  7481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7482. return $core.withContext(function($ctx2) {
  7483. //>>excludeEnd("ctx");
  7484. return self._inheritsFrom_(aClass);
  7485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7486. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  7487. //>>excludeEnd("ctx");
  7488. }));
  7489. return $1;
  7490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7491. }, function($ctx1) {$ctx1.fill(self,"includesBehavior:",{aClass:aClass},$globals.Behavior)});
  7492. //>>excludeEnd("ctx");
  7493. },
  7494. //>>excludeStart("ide", pragmas.excludeIdeData);
  7495. args: ["aClass"],
  7496. source: "includesBehavior: aClass\x0a\x09^ self == aClass or: [\x0a\x09\x09\x09self inheritsFrom: aClass ]",
  7497. referencedClasses: [],
  7498. //>>excludeEnd("ide");
  7499. messageSends: ["or:", "==", "inheritsFrom:"]
  7500. }),
  7501. $globals.Behavior);
  7502. $core.addMethod(
  7503. $core.method({
  7504. selector: "includesSelector:",
  7505. protocol: 'testing',
  7506. fn: function (aString){
  7507. var self=this;
  7508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7509. return $core.withContext(function($ctx1) {
  7510. //>>excludeEnd("ctx");
  7511. var $1;
  7512. $1=$recv(self._methodDictionary())._includesKey_(aString);
  7513. return $1;
  7514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7515. }, function($ctx1) {$ctx1.fill(self,"includesSelector:",{aString:aString},$globals.Behavior)});
  7516. //>>excludeEnd("ctx");
  7517. },
  7518. //>>excludeStart("ide", pragmas.excludeIdeData);
  7519. args: ["aString"],
  7520. source: "includesSelector: aString\x0a\x09^ self methodDictionary includesKey: aString",
  7521. referencedClasses: [],
  7522. //>>excludeEnd("ide");
  7523. messageSends: ["includesKey:", "methodDictionary"]
  7524. }),
  7525. $globals.Behavior);
  7526. $core.addMethod(
  7527. $core.method({
  7528. selector: "inheritsFrom:",
  7529. protocol: 'testing',
  7530. fn: function (aClass){
  7531. var self=this;
  7532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7533. return $core.withContext(function($ctx1) {
  7534. //>>excludeEnd("ctx");
  7535. var $1,$4,$3,$2,$receiver;
  7536. $1=self._superclass();
  7537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7538. $ctx1.sendIdx["superclass"]=1;
  7539. //>>excludeEnd("ctx");
  7540. if(($receiver = $1) == null || $receiver.isNil){
  7541. return false;
  7542. } else {
  7543. $1;
  7544. };
  7545. $4=self._superclass();
  7546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7547. $ctx1.sendIdx["superclass"]=2;
  7548. //>>excludeEnd("ctx");
  7549. $3=$recv(aClass).__eq_eq($4);
  7550. $2=$recv($3)._or_((function(){
  7551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7552. return $core.withContext(function($ctx2) {
  7553. //>>excludeEnd("ctx");
  7554. return $recv(self._superclass())._inheritsFrom_(aClass);
  7555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7556. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  7557. //>>excludeEnd("ctx");
  7558. }));
  7559. return $2;
  7560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7561. }, function($ctx1) {$ctx1.fill(self,"inheritsFrom:",{aClass:aClass},$globals.Behavior)});
  7562. //>>excludeEnd("ctx");
  7563. },
  7564. //>>excludeStart("ide", pragmas.excludeIdeData);
  7565. args: ["aClass"],
  7566. source: "inheritsFrom: aClass\x0a\x09self superclass ifNil: [ ^ false ].\x0a\x0a\x09^ aClass == self superclass or: [ \x0a\x09\x09self superclass inheritsFrom: aClass ]",
  7567. referencedClasses: [],
  7568. //>>excludeEnd("ide");
  7569. messageSends: ["ifNil:", "superclass", "or:", "==", "inheritsFrom:"]
  7570. }),
  7571. $globals.Behavior);
  7572. $core.addMethod(
  7573. $core.method({
  7574. selector: "instanceVariableNames",
  7575. protocol: 'accessing',
  7576. fn: function (){
  7577. var self=this;
  7578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7579. return $core.withContext(function($ctx1) {
  7580. //>>excludeEnd("ctx");
  7581. return self.iVarNames;
  7582. return self;
  7583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7584. }, function($ctx1) {$ctx1.fill(self,"instanceVariableNames",{},$globals.Behavior)});
  7585. //>>excludeEnd("ctx");
  7586. },
  7587. //>>excludeStart("ide", pragmas.excludeIdeData);
  7588. args: [],
  7589. source: "instanceVariableNames\x0a\x09<return self.iVarNames>",
  7590. referencedClasses: [],
  7591. //>>excludeEnd("ide");
  7592. messageSends: []
  7593. }),
  7594. $globals.Behavior);
  7595. $core.addMethod(
  7596. $core.method({
  7597. selector: "isBehavior",
  7598. protocol: 'testing',
  7599. fn: function (){
  7600. var self=this;
  7601. return true;
  7602. },
  7603. //>>excludeStart("ide", pragmas.excludeIdeData);
  7604. args: [],
  7605. source: "isBehavior\x0a\x09^ true",
  7606. referencedClasses: [],
  7607. //>>excludeEnd("ide");
  7608. messageSends: []
  7609. }),
  7610. $globals.Behavior);
  7611. $core.addMethod(
  7612. $core.method({
  7613. selector: "javascriptConstructor",
  7614. protocol: 'accessing',
  7615. fn: function (){
  7616. var self=this;
  7617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7618. return $core.withContext(function($ctx1) {
  7619. //>>excludeEnd("ctx");
  7620. return self.fn;
  7621. return self;
  7622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7623. }, function($ctx1) {$ctx1.fill(self,"javascriptConstructor",{},$globals.Behavior)});
  7624. //>>excludeEnd("ctx");
  7625. },
  7626. //>>excludeStart("ide", pragmas.excludeIdeData);
  7627. args: [],
  7628. source: "javascriptConstructor\x0a\x09\x22Answer the JS constructor used to instantiate. See boot.js\x22\x0a\x09\x0a\x09<return self.fn>",
  7629. referencedClasses: [],
  7630. //>>excludeEnd("ide");
  7631. messageSends: []
  7632. }),
  7633. $globals.Behavior);
  7634. $core.addMethod(
  7635. $core.method({
  7636. selector: "javascriptConstructor:",
  7637. protocol: 'accessing',
  7638. fn: function (aJavaScriptFunction){
  7639. var self=this;
  7640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7641. return $core.withContext(function($ctx1) {
  7642. //>>excludeEnd("ctx");
  7643. $core.setClassConstructor(self, aJavaScriptFunction);;
  7644. return self;
  7645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7646. }, function($ctx1) {$ctx1.fill(self,"javascriptConstructor:",{aJavaScriptFunction:aJavaScriptFunction},$globals.Behavior)});
  7647. //>>excludeEnd("ctx");
  7648. },
  7649. //>>excludeStart("ide", pragmas.excludeIdeData);
  7650. args: ["aJavaScriptFunction"],
  7651. 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);>",
  7652. referencedClasses: [],
  7653. //>>excludeEnd("ide");
  7654. messageSends: []
  7655. }),
  7656. $globals.Behavior);
  7657. $core.addMethod(
  7658. $core.method({
  7659. selector: "lookupSelector:",
  7660. protocol: 'accessing',
  7661. fn: function (selector){
  7662. var self=this;
  7663. var lookupClass;
  7664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7665. return $core.withContext(function($ctx1) {
  7666. //>>excludeEnd("ctx");
  7667. var $1,$2;
  7668. var $early={};
  7669. try {
  7670. lookupClass=self;
  7671. $recv((function(){
  7672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7673. return $core.withContext(function($ctx2) {
  7674. //>>excludeEnd("ctx");
  7675. return $recv(lookupClass).__eq(nil);
  7676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7677. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  7678. //>>excludeEnd("ctx");
  7679. }))._whileFalse_((function(){
  7680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7681. return $core.withContext(function($ctx2) {
  7682. //>>excludeEnd("ctx");
  7683. $1=$recv(lookupClass)._includesSelector_(selector);
  7684. if($core.assert($1)){
  7685. $2=$recv(lookupClass)._methodAt_(selector);
  7686. throw $early=[$2];
  7687. };
  7688. lookupClass=$recv(lookupClass)._superclass();
  7689. return lookupClass;
  7690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7691. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  7692. //>>excludeEnd("ctx");
  7693. }));
  7694. return nil;
  7695. }
  7696. catch(e) {if(e===$early)return e[0]; throw e}
  7697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7698. }, function($ctx1) {$ctx1.fill(self,"lookupSelector:",{selector:selector,lookupClass:lookupClass},$globals.Behavior)});
  7699. //>>excludeEnd("ctx");
  7700. },
  7701. //>>excludeStart("ide", pragmas.excludeIdeData);
  7702. args: ["selector"],
  7703. 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",
  7704. referencedClasses: [],
  7705. //>>excludeEnd("ide");
  7706. messageSends: ["whileFalse:", "=", "ifTrue:", "includesSelector:", "methodAt:", "superclass"]
  7707. }),
  7708. $globals.Behavior);
  7709. $core.addMethod(
  7710. $core.method({
  7711. selector: "methodAt:",
  7712. protocol: 'accessing',
  7713. fn: function (aString){
  7714. var self=this;
  7715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7716. return $core.withContext(function($ctx1) {
  7717. //>>excludeEnd("ctx");
  7718. var $1;
  7719. $1=$recv(self._methodDictionary())._at_(aString);
  7720. return $1;
  7721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7722. }, function($ctx1) {$ctx1.fill(self,"methodAt:",{aString:aString},$globals.Behavior)});
  7723. //>>excludeEnd("ctx");
  7724. },
  7725. //>>excludeStart("ide", pragmas.excludeIdeData);
  7726. args: ["aString"],
  7727. source: "methodAt: aString\x0a\x09^ self methodDictionary at: aString",
  7728. referencedClasses: [],
  7729. //>>excludeEnd("ide");
  7730. messageSends: ["at:", "methodDictionary"]
  7731. }),
  7732. $globals.Behavior);
  7733. $core.addMethod(
  7734. $core.method({
  7735. selector: "methodDictionary",
  7736. protocol: 'accessing',
  7737. fn: function (){
  7738. var self=this;
  7739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7740. return $core.withContext(function($ctx1) {
  7741. //>>excludeEnd("ctx");
  7742. var dict = $globals.HashedCollection._new();
  7743. var methods = self.methods;
  7744. Object.keys(methods).forEach(function(i) {
  7745. if(methods[i].selector) {
  7746. dict._at_put_(methods[i].selector, methods[i]);
  7747. }
  7748. });
  7749. return dict;
  7750. return self;
  7751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7752. }, function($ctx1) {$ctx1.fill(self,"methodDictionary",{},$globals.Behavior)});
  7753. //>>excludeEnd("ctx");
  7754. },
  7755. //>>excludeStart("ide", pragmas.excludeIdeData);
  7756. args: [],
  7757. 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>",
  7758. referencedClasses: [],
  7759. //>>excludeEnd("ide");
  7760. messageSends: []
  7761. }),
  7762. $globals.Behavior);
  7763. $core.addMethod(
  7764. $core.method({
  7765. selector: "methodTemplate",
  7766. protocol: 'accessing',
  7767. fn: function (){
  7768. var self=this;
  7769. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  7770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7771. return $core.withContext(function($ctx1) {
  7772. //>>excludeEnd("ctx");
  7773. var $3,$4,$2,$7,$8,$6,$9,$5,$10,$1;
  7774. $1=$recv($String())._streamContents_((function(stream){
  7775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7776. return $core.withContext(function($ctx2) {
  7777. //>>excludeEnd("ctx");
  7778. $recv(stream)._nextPutAll_("messageSelectorAndArgumentNames");
  7779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7780. $ctx2.sendIdx["nextPutAll:"]=1;
  7781. //>>excludeEnd("ctx");
  7782. $3=$recv($String())._lf();
  7783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7784. $ctx2.sendIdx["lf"]=1;
  7785. //>>excludeEnd("ctx");
  7786. $4=$recv($String())._tab();
  7787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7788. $ctx2.sendIdx["tab"]=1;
  7789. //>>excludeEnd("ctx");
  7790. $2=$recv($3).__comma($4);
  7791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7792. $ctx2.sendIdx[","]=1;
  7793. //>>excludeEnd("ctx");
  7794. $recv(stream)._nextPutAll_($2);
  7795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7796. $ctx2.sendIdx["nextPutAll:"]=2;
  7797. //>>excludeEnd("ctx");
  7798. $recv(stream)._nextPutAll_("\x22comment stating purpose of message\x22");
  7799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7800. $ctx2.sendIdx["nextPutAll:"]=3;
  7801. //>>excludeEnd("ctx");
  7802. $7=$recv($String())._lf();
  7803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7804. $ctx2.sendIdx["lf"]=2;
  7805. //>>excludeEnd("ctx");
  7806. $8=$recv($String())._lf();
  7807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7808. $ctx2.sendIdx["lf"]=3;
  7809. //>>excludeEnd("ctx");
  7810. $6=$recv($7).__comma($8);
  7811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7812. $ctx2.sendIdx[","]=3;
  7813. //>>excludeEnd("ctx");
  7814. $9=$recv($String())._tab();
  7815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7816. $ctx2.sendIdx["tab"]=2;
  7817. //>>excludeEnd("ctx");
  7818. $5=$recv($6).__comma($9);
  7819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7820. $ctx2.sendIdx[","]=2;
  7821. //>>excludeEnd("ctx");
  7822. $recv(stream)._nextPutAll_($5);
  7823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7824. $ctx2.sendIdx["nextPutAll:"]=4;
  7825. //>>excludeEnd("ctx");
  7826. $recv(stream)._nextPutAll_("| temporary variable names |");
  7827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7828. $ctx2.sendIdx["nextPutAll:"]=5;
  7829. //>>excludeEnd("ctx");
  7830. $recv(stream)._nextPutAll_($recv($recv($String())._lf()).__comma($recv($String())._tab()));
  7831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7832. $ctx2.sendIdx["nextPutAll:"]=6;
  7833. //>>excludeEnd("ctx");
  7834. $10=$recv(stream)._nextPutAll_("statements");
  7835. return $10;
  7836. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7837. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  7838. //>>excludeEnd("ctx");
  7839. }));
  7840. return $1;
  7841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7842. }, function($ctx1) {$ctx1.fill(self,"methodTemplate",{},$globals.Behavior)});
  7843. //>>excludeEnd("ctx");
  7844. },
  7845. //>>excludeStart("ide", pragmas.excludeIdeData);
  7846. args: [],
  7847. 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' ]",
  7848. referencedClasses: ["String"],
  7849. //>>excludeEnd("ide");
  7850. messageSends: ["streamContents:", "nextPutAll:", ",", "lf", "tab"]
  7851. }),
  7852. $globals.Behavior);
  7853. $core.addMethod(
  7854. $core.method({
  7855. selector: "methods",
  7856. protocol: 'accessing',
  7857. fn: function (){
  7858. var self=this;
  7859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7860. return $core.withContext(function($ctx1) {
  7861. //>>excludeEnd("ctx");
  7862. var $1;
  7863. $1=$recv(self._methodDictionary())._values();
  7864. return $1;
  7865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7866. }, function($ctx1) {$ctx1.fill(self,"methods",{},$globals.Behavior)});
  7867. //>>excludeEnd("ctx");
  7868. },
  7869. //>>excludeStart("ide", pragmas.excludeIdeData);
  7870. args: [],
  7871. source: "methods\x0a\x09^ self methodDictionary values",
  7872. referencedClasses: [],
  7873. //>>excludeEnd("ide");
  7874. messageSends: ["values", "methodDictionary"]
  7875. }),
  7876. $globals.Behavior);
  7877. $core.addMethod(
  7878. $core.method({
  7879. selector: "methodsFor:",
  7880. protocol: 'accessing',
  7881. fn: function (aString){
  7882. var self=this;
  7883. function $ClassCategoryReader(){return $globals.ClassCategoryReader||(typeof ClassCategoryReader=="undefined"?nil:ClassCategoryReader)}
  7884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7885. return $core.withContext(function($ctx1) {
  7886. //>>excludeEnd("ctx");
  7887. var $2,$3,$1;
  7888. $2=$recv($ClassCategoryReader())._new();
  7889. $recv($2)._class_category_(self,aString);
  7890. $3=$recv($2)._yourself();
  7891. $1=$3;
  7892. return $1;
  7893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7894. }, function($ctx1) {$ctx1.fill(self,"methodsFor:",{aString:aString},$globals.Behavior)});
  7895. //>>excludeEnd("ctx");
  7896. },
  7897. //>>excludeStart("ide", pragmas.excludeIdeData);
  7898. args: ["aString"],
  7899. source: "methodsFor: aString\x0a\x09^ ClassCategoryReader new\x0a\x09\x09class: self category: aString;\x0a\x09\x09yourself",
  7900. referencedClasses: ["ClassCategoryReader"],
  7901. //>>excludeEnd("ide");
  7902. messageSends: ["class:category:", "new", "yourself"]
  7903. }),
  7904. $globals.Behavior);
  7905. $core.addMethod(
  7906. $core.method({
  7907. selector: "methodsFor:stamp:",
  7908. protocol: 'accessing',
  7909. fn: function (aString,aStamp){
  7910. var self=this;
  7911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7912. return $core.withContext(function($ctx1) {
  7913. //>>excludeEnd("ctx");
  7914. var $1;
  7915. $1=self._methodsFor_(aString);
  7916. return $1;
  7917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7918. }, function($ctx1) {$ctx1.fill(self,"methodsFor:stamp:",{aString:aString,aStamp:aStamp},$globals.Behavior)});
  7919. //>>excludeEnd("ctx");
  7920. },
  7921. //>>excludeStart("ide", pragmas.excludeIdeData);
  7922. args: ["aString", "aStamp"],
  7923. source: "methodsFor: aString stamp: aStamp\x0a\x09\x22Added for file-in compatibility, ignores stamp.\x22\x0a\x09^ self methodsFor: aString",
  7924. referencedClasses: [],
  7925. //>>excludeEnd("ide");
  7926. messageSends: ["methodsFor:"]
  7927. }),
  7928. $globals.Behavior);
  7929. $core.addMethod(
  7930. $core.method({
  7931. selector: "methodsInProtocol:",
  7932. protocol: 'accessing',
  7933. fn: function (aString){
  7934. var self=this;
  7935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7936. return $core.withContext(function($ctx1) {
  7937. //>>excludeEnd("ctx");
  7938. var $1;
  7939. $1=$recv(self._methods())._select_((function(each){
  7940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7941. return $core.withContext(function($ctx2) {
  7942. //>>excludeEnd("ctx");
  7943. return $recv($recv(each)._protocol()).__eq(aString);
  7944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7945. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  7946. //>>excludeEnd("ctx");
  7947. }));
  7948. return $1;
  7949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7950. }, function($ctx1) {$ctx1.fill(self,"methodsInProtocol:",{aString:aString},$globals.Behavior)});
  7951. //>>excludeEnd("ctx");
  7952. },
  7953. //>>excludeStart("ide", pragmas.excludeIdeData);
  7954. args: ["aString"],
  7955. source: "methodsInProtocol: aString\x0a\x09^ self methods select: [ :each | each protocol = aString ]",
  7956. referencedClasses: [],
  7957. //>>excludeEnd("ide");
  7958. messageSends: ["select:", "methods", "=", "protocol"]
  7959. }),
  7960. $globals.Behavior);
  7961. $core.addMethod(
  7962. $core.method({
  7963. selector: "name",
  7964. protocol: 'accessing',
  7965. fn: function (){
  7966. var self=this;
  7967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7968. return $core.withContext(function($ctx1) {
  7969. //>>excludeEnd("ctx");
  7970. return self.className || nil;
  7971. return self;
  7972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7973. }, function($ctx1) {$ctx1.fill(self,"name",{},$globals.Behavior)});
  7974. //>>excludeEnd("ctx");
  7975. },
  7976. //>>excludeStart("ide", pragmas.excludeIdeData);
  7977. args: [],
  7978. source: "name\x0a\x09<return self.className || nil>",
  7979. referencedClasses: [],
  7980. //>>excludeEnd("ide");
  7981. messageSends: []
  7982. }),
  7983. $globals.Behavior);
  7984. $core.addMethod(
  7985. $core.method({
  7986. selector: "new",
  7987. protocol: 'instance creation',
  7988. fn: function (){
  7989. var self=this;
  7990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7991. return $core.withContext(function($ctx1) {
  7992. //>>excludeEnd("ctx");
  7993. var $1;
  7994. $1=$recv(self._basicNew())._initialize();
  7995. return $1;
  7996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7997. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.Behavior)});
  7998. //>>excludeEnd("ctx");
  7999. },
  8000. //>>excludeStart("ide", pragmas.excludeIdeData);
  8001. args: [],
  8002. source: "new\x0a\x09^ self basicNew initialize",
  8003. referencedClasses: [],
  8004. //>>excludeEnd("ide");
  8005. messageSends: ["initialize", "basicNew"]
  8006. }),
  8007. $globals.Behavior);
  8008. $core.addMethod(
  8009. $core.method({
  8010. selector: "organization",
  8011. protocol: 'accessing',
  8012. fn: function (){
  8013. var self=this;
  8014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8015. return $core.withContext(function($ctx1) {
  8016. //>>excludeEnd("ctx");
  8017. var $1;
  8018. $1=self._basicAt_("organization");
  8019. return $1;
  8020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8021. }, function($ctx1) {$ctx1.fill(self,"organization",{},$globals.Behavior)});
  8022. //>>excludeEnd("ctx");
  8023. },
  8024. //>>excludeStart("ide", pragmas.excludeIdeData);
  8025. args: [],
  8026. source: "organization\x0a\x09^ self basicAt: 'organization'",
  8027. referencedClasses: [],
  8028. //>>excludeEnd("ide");
  8029. messageSends: ["basicAt:"]
  8030. }),
  8031. $globals.Behavior);
  8032. $core.addMethod(
  8033. $core.method({
  8034. selector: "ownMethods",
  8035. protocol: 'accessing',
  8036. fn: function (){
  8037. var self=this;
  8038. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  8039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8040. return $core.withContext(function($ctx1) {
  8041. //>>excludeEnd("ctx");
  8042. var $2,$1;
  8043. $1=$recv($recv(self._ownProtocols())._inject_into_($recv($OrderedCollection())._new(),(function(acc,each){
  8044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8045. return $core.withContext(function($ctx2) {
  8046. //>>excludeEnd("ctx");
  8047. return $recv(acc).__comma(self._methodsInProtocol_(each));
  8048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8049. }, function($ctx2) {$ctx2.fillBlock({acc:acc,each:each},$ctx1,1)});
  8050. //>>excludeEnd("ctx");
  8051. })))._sorted_((function(a,b){
  8052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8053. return $core.withContext(function($ctx2) {
  8054. //>>excludeEnd("ctx");
  8055. $2=$recv(a)._selector();
  8056. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8057. $ctx2.sendIdx["selector"]=1;
  8058. //>>excludeEnd("ctx");
  8059. return $recv($2).__lt_eq($recv(b)._selector());
  8060. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8061. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,2)});
  8062. //>>excludeEnd("ctx");
  8063. }));
  8064. return $1;
  8065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8066. }, function($ctx1) {$ctx1.fill(self,"ownMethods",{},$globals.Behavior)});
  8067. //>>excludeEnd("ctx");
  8068. },
  8069. //>>excludeStart("ide", pragmas.excludeIdeData);
  8070. args: [],
  8071. 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 ]",
  8072. referencedClasses: ["OrderedCollection"],
  8073. //>>excludeEnd("ide");
  8074. messageSends: ["sorted:", "inject:into:", "ownProtocols", "new", ",", "methodsInProtocol:", "<=", "selector"]
  8075. }),
  8076. $globals.Behavior);
  8077. $core.addMethod(
  8078. $core.method({
  8079. selector: "ownProtocols",
  8080. protocol: 'accessing',
  8081. fn: function (){
  8082. var self=this;
  8083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8084. return $core.withContext(function($ctx1) {
  8085. //>>excludeEnd("ctx");
  8086. var $1;
  8087. $1=$recv(self._protocols())._reject_((function(each){
  8088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8089. return $core.withContext(function($ctx2) {
  8090. //>>excludeEnd("ctx");
  8091. return $recv(each)._match_("^\x5c*");
  8092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8093. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  8094. //>>excludeEnd("ctx");
  8095. }));
  8096. return $1;
  8097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8098. }, function($ctx1) {$ctx1.fill(self,"ownProtocols",{},$globals.Behavior)});
  8099. //>>excludeEnd("ctx");
  8100. },
  8101. //>>excludeStart("ide", pragmas.excludeIdeData);
  8102. args: [],
  8103. 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*' ]",
  8104. referencedClasses: [],
  8105. //>>excludeEnd("ide");
  8106. messageSends: ["reject:", "protocols", "match:"]
  8107. }),
  8108. $globals.Behavior);
  8109. $core.addMethod(
  8110. $core.method({
  8111. selector: "packageOfProtocol:",
  8112. protocol: 'accessing',
  8113. fn: function (aString){
  8114. var self=this;
  8115. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  8116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8117. return $core.withContext(function($ctx1) {
  8118. //>>excludeEnd("ctx");
  8119. var $1,$2,$3;
  8120. $1=$recv(aString)._beginsWith_("*");
  8121. if(!$core.assert($1)){
  8122. $2=self._package();
  8123. return $2;
  8124. };
  8125. $3=$recv($Package())._named_ifAbsent_($recv(aString)._allButFirst(),(function(){
  8126. return nil;
  8127. }));
  8128. return $3;
  8129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8130. }, function($ctx1) {$ctx1.fill(self,"packageOfProtocol:",{aString:aString},$globals.Behavior)});
  8131. //>>excludeEnd("ctx");
  8132. },
  8133. //>>excludeStart("ide", pragmas.excludeIdeData);
  8134. args: ["aString"],
  8135. source: "packageOfProtocol: aString\x0a\x09\x22Answer the package the method of receiver belongs to:\x0a\x09- if it is an extension method, answer the corresponding package\x0a\x09- else answer the receiver's package\x22\x0a\x09\x0a\x09(aString beginsWith: '*') ifFalse: [\x0a\x09\x09^ self package ].\x0a\x09\x09\x0a\x09^ Package \x0a\x09\x09named: aString allButFirst\x0a\x09\x09ifAbsent: [ nil ]",
  8136. referencedClasses: ["Package"],
  8137. //>>excludeEnd("ide");
  8138. messageSends: ["ifFalse:", "beginsWith:", "package", "named:ifAbsent:", "allButFirst"]
  8139. }),
  8140. $globals.Behavior);
  8141. $core.addMethod(
  8142. $core.method({
  8143. selector: "protocols",
  8144. protocol: 'accessing',
  8145. fn: function (){
  8146. var self=this;
  8147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8148. return $core.withContext(function($ctx1) {
  8149. //>>excludeEnd("ctx");
  8150. var $1;
  8151. $1=$recv($recv(self._organization())._elements())._sorted();
  8152. return $1;
  8153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8154. }, function($ctx1) {$ctx1.fill(self,"protocols",{},$globals.Behavior)});
  8155. //>>excludeEnd("ctx");
  8156. },
  8157. //>>excludeStart("ide", pragmas.excludeIdeData);
  8158. args: [],
  8159. source: "protocols\x0a\x09^ self organization elements sorted",
  8160. referencedClasses: [],
  8161. //>>excludeEnd("ide");
  8162. messageSends: ["sorted", "elements", "organization"]
  8163. }),
  8164. $globals.Behavior);
  8165. $core.addMethod(
  8166. $core.method({
  8167. selector: "protocolsDo:",
  8168. protocol: 'enumerating',
  8169. fn: function (aBlock){
  8170. var self=this;
  8171. var methodsByProtocol;
  8172. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  8173. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  8174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8175. return $core.withContext(function($ctx1) {
  8176. //>>excludeEnd("ctx");
  8177. methodsByProtocol=$recv($HashedCollection())._new();
  8178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8179. $ctx1.sendIdx["new"]=1;
  8180. //>>excludeEnd("ctx");
  8181. $recv(self._methodDictionary())._valuesDo_((function(m){
  8182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8183. return $core.withContext(function($ctx2) {
  8184. //>>excludeEnd("ctx");
  8185. return $recv($recv(methodsByProtocol)._at_ifAbsentPut_($recv(m)._protocol(),(function(){
  8186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8187. return $core.withContext(function($ctx3) {
  8188. //>>excludeEnd("ctx");
  8189. return $recv($Array())._new();
  8190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8191. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  8192. //>>excludeEnd("ctx");
  8193. })))._add_(m);
  8194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8195. }, function($ctx2) {$ctx2.fillBlock({m:m},$ctx1,1)});
  8196. //>>excludeEnd("ctx");
  8197. }));
  8198. $recv(self._protocols())._do_((function(protocol){
  8199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8200. return $core.withContext(function($ctx2) {
  8201. //>>excludeEnd("ctx");
  8202. return $recv(aBlock)._value_value_(protocol,$recv(methodsByProtocol)._at_(protocol));
  8203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8204. }, function($ctx2) {$ctx2.fillBlock({protocol:protocol},$ctx1,3)});
  8205. //>>excludeEnd("ctx");
  8206. }));
  8207. return self;
  8208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8209. }, function($ctx1) {$ctx1.fill(self,"protocolsDo:",{aBlock:aBlock,methodsByProtocol:methodsByProtocol},$globals.Behavior)});
  8210. //>>excludeEnd("ctx");
  8211. },
  8212. //>>excludeStart("ide", pragmas.excludeIdeData);
  8213. args: ["aBlock"],
  8214. 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) ]",
  8215. referencedClasses: ["HashedCollection", "Array"],
  8216. //>>excludeEnd("ide");
  8217. messageSends: ["new", "valuesDo:", "methodDictionary", "add:", "at:ifAbsentPut:", "protocol", "do:", "protocols", "value:value:", "at:"]
  8218. }),
  8219. $globals.Behavior);
  8220. $core.addMethod(
  8221. $core.method({
  8222. selector: "prototype",
  8223. protocol: 'accessing',
  8224. fn: function (){
  8225. var self=this;
  8226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8227. return $core.withContext(function($ctx1) {
  8228. //>>excludeEnd("ctx");
  8229. return self.fn.prototype;
  8230. return self;
  8231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8232. }, function($ctx1) {$ctx1.fill(self,"prototype",{},$globals.Behavior)});
  8233. //>>excludeEnd("ctx");
  8234. },
  8235. //>>excludeStart("ide", pragmas.excludeIdeData);
  8236. args: [],
  8237. source: "prototype\x0a\x09<return self.fn.prototype>",
  8238. referencedClasses: [],
  8239. //>>excludeEnd("ide");
  8240. messageSends: []
  8241. }),
  8242. $globals.Behavior);
  8243. $core.addMethod(
  8244. $core.method({
  8245. selector: "recompile",
  8246. protocol: 'compiling',
  8247. fn: function (){
  8248. var self=this;
  8249. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  8250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8251. return $core.withContext(function($ctx1) {
  8252. //>>excludeEnd("ctx");
  8253. var $1;
  8254. $1=$recv($recv($Compiler())._new())._recompile_(self);
  8255. return $1;
  8256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8257. }, function($ctx1) {$ctx1.fill(self,"recompile",{},$globals.Behavior)});
  8258. //>>excludeEnd("ctx");
  8259. },
  8260. //>>excludeStart("ide", pragmas.excludeIdeData);
  8261. args: [],
  8262. source: "recompile\x0a\x09^ Compiler new recompile: self",
  8263. referencedClasses: ["Compiler"],
  8264. //>>excludeEnd("ide");
  8265. messageSends: ["recompile:", "new"]
  8266. }),
  8267. $globals.Behavior);
  8268. $core.addMethod(
  8269. $core.method({
  8270. selector: "removeCompiledMethod:",
  8271. protocol: 'compiling',
  8272. fn: function (aMethod){
  8273. var self=this;
  8274. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  8275. function $MethodRemoved(){return $globals.MethodRemoved||(typeof MethodRemoved=="undefined"?nil:MethodRemoved)}
  8276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8277. return $core.withContext(function($ctx1) {
  8278. //>>excludeEnd("ctx");
  8279. var $1,$2;
  8280. self._basicRemoveCompiledMethod_(aMethod);
  8281. self._removeProtocolIfEmpty_($recv(aMethod)._protocol());
  8282. $1=$recv($MethodRemoved())._new();
  8283. $recv($1)._method_(aMethod);
  8284. $2=$recv($1)._yourself();
  8285. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  8286. return self;
  8287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8288. }, function($ctx1) {$ctx1.fill(self,"removeCompiledMethod:",{aMethod:aMethod},$globals.Behavior)});
  8289. //>>excludeEnd("ctx");
  8290. },
  8291. //>>excludeStart("ide", pragmas.excludeIdeData);
  8292. args: ["aMethod"],
  8293. 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)",
  8294. referencedClasses: ["SystemAnnouncer", "MethodRemoved"],
  8295. //>>excludeEnd("ide");
  8296. messageSends: ["basicRemoveCompiledMethod:", "removeProtocolIfEmpty:", "protocol", "announce:", "current", "method:", "new", "yourself"]
  8297. }),
  8298. $globals.Behavior);
  8299. $core.addMethod(
  8300. $core.method({
  8301. selector: "removeProtocolIfEmpty:",
  8302. protocol: 'accessing',
  8303. fn: function (aString){
  8304. var self=this;
  8305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8306. return $core.withContext(function($ctx1) {
  8307. //>>excludeEnd("ctx");
  8308. $recv(self._methods())._detect_ifNone_((function(each){
  8309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8310. return $core.withContext(function($ctx2) {
  8311. //>>excludeEnd("ctx");
  8312. return $recv($recv(each)._protocol()).__eq(aString);
  8313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8314. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  8315. //>>excludeEnd("ctx");
  8316. }),(function(){
  8317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8318. return $core.withContext(function($ctx2) {
  8319. //>>excludeEnd("ctx");
  8320. return $recv(self._organization())._removeElement_(aString);
  8321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8322. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  8323. //>>excludeEnd("ctx");
  8324. }));
  8325. return self;
  8326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8327. }, function($ctx1) {$ctx1.fill(self,"removeProtocolIfEmpty:",{aString:aString},$globals.Behavior)});
  8328. //>>excludeEnd("ctx");
  8329. },
  8330. //>>excludeStart("ide", pragmas.excludeIdeData);
  8331. args: ["aString"],
  8332. source: "removeProtocolIfEmpty: aString\x0a\x09self methods\x0a\x09\x09detect: [ :each | each protocol = aString ]\x0a\x09\x09ifNone: [ self organization removeElement: aString ]",
  8333. referencedClasses: [],
  8334. //>>excludeEnd("ide");
  8335. messageSends: ["detect:ifNone:", "methods", "=", "protocol", "removeElement:", "organization"]
  8336. }),
  8337. $globals.Behavior);
  8338. $core.addMethod(
  8339. $core.method({
  8340. selector: "selectors",
  8341. protocol: 'accessing',
  8342. fn: function (){
  8343. var self=this;
  8344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8345. return $core.withContext(function($ctx1) {
  8346. //>>excludeEnd("ctx");
  8347. var $1;
  8348. $1=$recv(self._methodDictionary())._keys();
  8349. return $1;
  8350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8351. }, function($ctx1) {$ctx1.fill(self,"selectors",{},$globals.Behavior)});
  8352. //>>excludeEnd("ctx");
  8353. },
  8354. //>>excludeStart("ide", pragmas.excludeIdeData);
  8355. args: [],
  8356. source: "selectors\x0a\x09^ self methodDictionary keys",
  8357. referencedClasses: [],
  8358. //>>excludeEnd("ide");
  8359. messageSends: ["keys", "methodDictionary"]
  8360. }),
  8361. $globals.Behavior);
  8362. $core.addMethod(
  8363. $core.method({
  8364. selector: "subclasses",
  8365. protocol: 'accessing',
  8366. fn: function (){
  8367. var self=this;
  8368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8369. return $core.withContext(function($ctx1) {
  8370. //>>excludeEnd("ctx");
  8371. self._subclassResponsibility();
  8372. return self;
  8373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8374. }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Behavior)});
  8375. //>>excludeEnd("ctx");
  8376. },
  8377. //>>excludeStart("ide", pragmas.excludeIdeData);
  8378. args: [],
  8379. source: "subclasses\x0a\x09self subclassResponsibility",
  8380. referencedClasses: [],
  8381. //>>excludeEnd("ide");
  8382. messageSends: ["subclassResponsibility"]
  8383. }),
  8384. $globals.Behavior);
  8385. $core.addMethod(
  8386. $core.method({
  8387. selector: "superclass",
  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. return self.superclass || nil;
  8395. return self;
  8396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8397. }, function($ctx1) {$ctx1.fill(self,"superclass",{},$globals.Behavior)});
  8398. //>>excludeEnd("ctx");
  8399. },
  8400. //>>excludeStart("ide", pragmas.excludeIdeData);
  8401. args: [],
  8402. source: "superclass\x0a\x09<return self.superclass || nil>",
  8403. referencedClasses: [],
  8404. //>>excludeEnd("ide");
  8405. messageSends: []
  8406. }),
  8407. $globals.Behavior);
  8408. $core.addMethod(
  8409. $core.method({
  8410. selector: "theMetaClass",
  8411. protocol: 'accessing',
  8412. fn: function (){
  8413. var self=this;
  8414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8415. return $core.withContext(function($ctx1) {
  8416. //>>excludeEnd("ctx");
  8417. self._subclassResponsibility();
  8418. return self;
  8419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8420. }, function($ctx1) {$ctx1.fill(self,"theMetaClass",{},$globals.Behavior)});
  8421. //>>excludeEnd("ctx");
  8422. },
  8423. //>>excludeStart("ide", pragmas.excludeIdeData);
  8424. args: [],
  8425. source: "theMetaClass\x0a\x09self subclassResponsibility",
  8426. referencedClasses: [],
  8427. //>>excludeEnd("ide");
  8428. messageSends: ["subclassResponsibility"]
  8429. }),
  8430. $globals.Behavior);
  8431. $core.addMethod(
  8432. $core.method({
  8433. selector: "theNonMetaClass",
  8434. protocol: 'accessing',
  8435. fn: function (){
  8436. var self=this;
  8437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8438. return $core.withContext(function($ctx1) {
  8439. //>>excludeEnd("ctx");
  8440. self._subclassResponsibility();
  8441. return self;
  8442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8443. }, function($ctx1) {$ctx1.fill(self,"theNonMetaClass",{},$globals.Behavior)});
  8444. //>>excludeEnd("ctx");
  8445. },
  8446. //>>excludeStart("ide", pragmas.excludeIdeData);
  8447. args: [],
  8448. source: "theNonMetaClass\x0a\x09self subclassResponsibility",
  8449. referencedClasses: [],
  8450. //>>excludeEnd("ide");
  8451. messageSends: ["subclassResponsibility"]
  8452. }),
  8453. $globals.Behavior);
  8454. $core.addMethod(
  8455. $core.method({
  8456. selector: "withAllSubclasses",
  8457. protocol: 'accessing',
  8458. fn: function (){
  8459. var self=this;
  8460. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  8461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8462. return $core.withContext(function($ctx1) {
  8463. //>>excludeEnd("ctx");
  8464. var $2,$3,$1;
  8465. $2=$recv($Array())._with_(self);
  8466. $recv($2)._addAll_(self._allSubclasses());
  8467. $3=$recv($2)._yourself();
  8468. $1=$3;
  8469. return $1;
  8470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8471. }, function($ctx1) {$ctx1.fill(self,"withAllSubclasses",{},$globals.Behavior)});
  8472. //>>excludeEnd("ctx");
  8473. },
  8474. //>>excludeStart("ide", pragmas.excludeIdeData);
  8475. args: [],
  8476. source: "withAllSubclasses\x0a\x09^ (Array with: self) addAll: self allSubclasses; yourself",
  8477. referencedClasses: ["Array"],
  8478. //>>excludeEnd("ide");
  8479. messageSends: ["addAll:", "with:", "allSubclasses", "yourself"]
  8480. }),
  8481. $globals.Behavior);
  8482. $core.addClass('Class', $globals.Behavior, [], 'Kernel-Classes');
  8483. //>>excludeStart("ide", pragmas.excludeIdeData);
  8484. $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.";
  8485. //>>excludeEnd("ide");
  8486. $core.addMethod(
  8487. $core.method({
  8488. selector: "asJavascript",
  8489. protocol: 'converting',
  8490. fn: function (){
  8491. var self=this;
  8492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8493. return $core.withContext(function($ctx1) {
  8494. //>>excludeEnd("ctx");
  8495. var $1;
  8496. $1="$globals.".__comma(self._name());
  8497. return $1;
  8498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8499. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Class)});
  8500. //>>excludeEnd("ctx");
  8501. },
  8502. //>>excludeStart("ide", pragmas.excludeIdeData);
  8503. args: [],
  8504. source: "asJavascript\x0a\x09^ '$globals.', self name",
  8505. referencedClasses: [],
  8506. //>>excludeEnd("ide");
  8507. messageSends: [",", "name"]
  8508. }),
  8509. $globals.Class);
  8510. $core.addMethod(
  8511. $core.method({
  8512. selector: "browse",
  8513. protocol: 'browsing',
  8514. fn: function (){
  8515. var self=this;
  8516. function $Finder(){return $globals.Finder||(typeof Finder=="undefined"?nil:Finder)}
  8517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8518. return $core.withContext(function($ctx1) {
  8519. //>>excludeEnd("ctx");
  8520. $recv($Finder())._findClass_(self);
  8521. return self;
  8522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8523. }, function($ctx1) {$ctx1.fill(self,"browse",{},$globals.Class)});
  8524. //>>excludeEnd("ctx");
  8525. },
  8526. //>>excludeStart("ide", pragmas.excludeIdeData);
  8527. args: [],
  8528. source: "browse\x0a\x09Finder findClass: self",
  8529. referencedClasses: ["Finder"],
  8530. //>>excludeEnd("ide");
  8531. messageSends: ["findClass:"]
  8532. }),
  8533. $globals.Class);
  8534. $core.addMethod(
  8535. $core.method({
  8536. selector: "category",
  8537. protocol: 'accessing',
  8538. fn: function (){
  8539. var self=this;
  8540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8541. return $core.withContext(function($ctx1) {
  8542. //>>excludeEnd("ctx");
  8543. var $2,$1,$receiver;
  8544. $2=self._package();
  8545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8546. $ctx1.sendIdx["package"]=1;
  8547. //>>excludeEnd("ctx");
  8548. if(($receiver = $2) == null || $receiver.isNil){
  8549. $1="Unclassified";
  8550. } else {
  8551. $1=$recv(self._package())._name();
  8552. };
  8553. return $1;
  8554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8555. }, function($ctx1) {$ctx1.fill(self,"category",{},$globals.Class)});
  8556. //>>excludeEnd("ctx");
  8557. },
  8558. //>>excludeStart("ide", pragmas.excludeIdeData);
  8559. args: [],
  8560. source: "category\x0a\x09^ self package ifNil: [ 'Unclassified' ] ifNotNil: [ self package name ]",
  8561. referencedClasses: [],
  8562. //>>excludeEnd("ide");
  8563. messageSends: ["ifNil:ifNotNil:", "package", "name"]
  8564. }),
  8565. $globals.Class);
  8566. $core.addMethod(
  8567. $core.method({
  8568. selector: "classTag",
  8569. protocol: 'accessing',
  8570. fn: function (){
  8571. var self=this;
  8572. return "class";
  8573. },
  8574. //>>excludeStart("ide", pragmas.excludeIdeData);
  8575. args: [],
  8576. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'class'",
  8577. referencedClasses: [],
  8578. //>>excludeEnd("ide");
  8579. messageSends: []
  8580. }),
  8581. $globals.Class);
  8582. $core.addMethod(
  8583. $core.method({
  8584. selector: "definition",
  8585. protocol: 'accessing',
  8586. fn: function (){
  8587. var self=this;
  8588. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  8589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8590. return $core.withContext(function($ctx1) {
  8591. //>>excludeEnd("ctx");
  8592. var $3,$4,$2,$5,$6,$7,$1;
  8593. $1=$recv($String())._streamContents_((function(stream){
  8594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8595. return $core.withContext(function($ctx2) {
  8596. //>>excludeEnd("ctx");
  8597. $recv(stream)._nextPutAll_($recv(self._superclass())._asString());
  8598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8599. $ctx2.sendIdx["nextPutAll:"]=1;
  8600. //>>excludeEnd("ctx");
  8601. $recv(stream)._nextPutAll_(" subclass: #");
  8602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8603. $ctx2.sendIdx["nextPutAll:"]=2;
  8604. //>>excludeEnd("ctx");
  8605. $recv(stream)._nextPutAll_(self._name());
  8606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8607. $ctx2.sendIdx["nextPutAll:"]=3;
  8608. //>>excludeEnd("ctx");
  8609. $3=$recv($String())._lf();
  8610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8611. $ctx2.sendIdx["lf"]=1;
  8612. //>>excludeEnd("ctx");
  8613. $4=$recv($String())._tab();
  8614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8615. $ctx2.sendIdx["tab"]=1;
  8616. //>>excludeEnd("ctx");
  8617. $2=$recv($3).__comma($4);
  8618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8619. $ctx2.sendIdx[","]=1;
  8620. //>>excludeEnd("ctx");
  8621. $recv(stream)._nextPutAll_($2);
  8622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8623. $ctx2.sendIdx["nextPutAll:"]=4;
  8624. //>>excludeEnd("ctx");
  8625. $5=$recv(stream)._nextPutAll_("instanceVariableNames: '");
  8626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8627. $ctx2.sendIdx["nextPutAll:"]=5;
  8628. //>>excludeEnd("ctx");
  8629. $5;
  8630. $recv(self._instanceVariableNames())._do_separatedBy_((function(each){
  8631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8632. return $core.withContext(function($ctx3) {
  8633. //>>excludeEnd("ctx");
  8634. return $recv(stream)._nextPutAll_(each);
  8635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8636. $ctx3.sendIdx["nextPutAll:"]=6;
  8637. //>>excludeEnd("ctx");
  8638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8639. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  8640. //>>excludeEnd("ctx");
  8641. }),(function(){
  8642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8643. return $core.withContext(function($ctx3) {
  8644. //>>excludeEnd("ctx");
  8645. return $recv(stream)._nextPutAll_(" ");
  8646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8647. $ctx3.sendIdx["nextPutAll:"]=7;
  8648. //>>excludeEnd("ctx");
  8649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8650. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  8651. //>>excludeEnd("ctx");
  8652. }));
  8653. $6=$recv("'".__comma($recv($String())._lf())).__comma($recv($String())._tab());
  8654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8655. $ctx2.sendIdx[","]=2;
  8656. //>>excludeEnd("ctx");
  8657. $recv(stream)._nextPutAll_($6);
  8658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8659. $ctx2.sendIdx["nextPutAll:"]=8;
  8660. //>>excludeEnd("ctx");
  8661. $recv(stream)._nextPutAll_("package: '");
  8662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8663. $ctx2.sendIdx["nextPutAll:"]=9;
  8664. //>>excludeEnd("ctx");
  8665. $recv(stream)._nextPutAll_(self._category());
  8666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8667. $ctx2.sendIdx["nextPutAll:"]=10;
  8668. //>>excludeEnd("ctx");
  8669. $7=$recv(stream)._nextPutAll_("'");
  8670. return $7;
  8671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8672. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  8673. //>>excludeEnd("ctx");
  8674. }));
  8675. return $1;
  8676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8677. }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.Class)});
  8678. //>>excludeEnd("ctx");
  8679. },
  8680. //>>excludeStart("ide", pragmas.excludeIdeData);
  8681. args: [],
  8682. 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: '''' ]",
  8683. referencedClasses: ["String"],
  8684. //>>excludeEnd("ide");
  8685. messageSends: ["streamContents:", "nextPutAll:", "asString", "superclass", "name", ",", "lf", "tab", "do:separatedBy:", "instanceVariableNames", "category"]
  8686. }),
  8687. $globals.Class);
  8688. $core.addMethod(
  8689. $core.method({
  8690. selector: "isClass",
  8691. protocol: 'testing',
  8692. fn: function (){
  8693. var self=this;
  8694. return true;
  8695. },
  8696. //>>excludeStart("ide", pragmas.excludeIdeData);
  8697. args: [],
  8698. source: "isClass\x0a\x09^ true",
  8699. referencedClasses: [],
  8700. //>>excludeEnd("ide");
  8701. messageSends: []
  8702. }),
  8703. $globals.Class);
  8704. $core.addMethod(
  8705. $core.method({
  8706. selector: "package",
  8707. protocol: 'accessing',
  8708. fn: function (){
  8709. var self=this;
  8710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8711. return $core.withContext(function($ctx1) {
  8712. //>>excludeEnd("ctx");
  8713. var $1;
  8714. $1=self._basicAt_("pkg");
  8715. return $1;
  8716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8717. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.Class)});
  8718. //>>excludeEnd("ctx");
  8719. },
  8720. //>>excludeStart("ide", pragmas.excludeIdeData);
  8721. args: [],
  8722. source: "package\x0a\x09^ self basicAt: 'pkg'",
  8723. referencedClasses: [],
  8724. //>>excludeEnd("ide");
  8725. messageSends: ["basicAt:"]
  8726. }),
  8727. $globals.Class);
  8728. $core.addMethod(
  8729. $core.method({
  8730. selector: "package:",
  8731. protocol: 'accessing',
  8732. fn: function (aPackage){
  8733. var self=this;
  8734. var oldPackage;
  8735. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  8736. function $ClassMoved(){return $globals.ClassMoved||(typeof ClassMoved=="undefined"?nil:ClassMoved)}
  8737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8738. return $core.withContext(function($ctx1) {
  8739. //>>excludeEnd("ctx");
  8740. var $2,$1,$3,$4,$5;
  8741. $2=self._package();
  8742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8743. $ctx1.sendIdx["package"]=1;
  8744. //>>excludeEnd("ctx");
  8745. $1=$recv($2).__eq(aPackage);
  8746. if($core.assert($1)){
  8747. return self;
  8748. };
  8749. oldPackage=self._package();
  8750. self._basicAt_put_("pkg",aPackage);
  8751. $3=$recv(oldPackage)._organization();
  8752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8753. $ctx1.sendIdx["organization"]=1;
  8754. //>>excludeEnd("ctx");
  8755. $recv($3)._removeElement_(self);
  8756. $recv($recv(aPackage)._organization())._addElement_(self);
  8757. $4=$recv($ClassMoved())._new();
  8758. $recv($4)._theClass_(self);
  8759. $recv($4)._oldPackage_(oldPackage);
  8760. $5=$recv($4)._yourself();
  8761. $recv($recv($SystemAnnouncer())._current())._announce_($5);
  8762. return self;
  8763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8764. }, function($ctx1) {$ctx1.fill(self,"package:",{aPackage:aPackage,oldPackage:oldPackage},$globals.Class)});
  8765. //>>excludeEnd("ctx");
  8766. },
  8767. //>>excludeStart("ide", pragmas.excludeIdeData);
  8768. args: ["aPackage"],
  8769. 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)",
  8770. referencedClasses: ["SystemAnnouncer", "ClassMoved"],
  8771. //>>excludeEnd("ide");
  8772. messageSends: ["ifTrue:", "=", "package", "basicAt:put:", "removeElement:", "organization", "addElement:", "announce:", "current", "theClass:", "new", "oldPackage:", "yourself"]
  8773. }),
  8774. $globals.Class);
  8775. $core.addMethod(
  8776. $core.method({
  8777. selector: "printOn:",
  8778. protocol: 'printing',
  8779. fn: function (aStream){
  8780. var self=this;
  8781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8782. return $core.withContext(function($ctx1) {
  8783. //>>excludeEnd("ctx");
  8784. $recv(aStream)._nextPutAll_(self._name());
  8785. return self;
  8786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8787. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Class)});
  8788. //>>excludeEnd("ctx");
  8789. },
  8790. //>>excludeStart("ide", pragmas.excludeIdeData);
  8791. args: ["aStream"],
  8792. source: "printOn: aStream\x0a\x09aStream nextPutAll: self name",
  8793. referencedClasses: [],
  8794. //>>excludeEnd("ide");
  8795. messageSends: ["nextPutAll:", "name"]
  8796. }),
  8797. $globals.Class);
  8798. $core.addMethod(
  8799. $core.method({
  8800. selector: "rename:",
  8801. protocol: 'accessing',
  8802. fn: function (aString){
  8803. var self=this;
  8804. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  8805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8806. return $core.withContext(function($ctx1) {
  8807. //>>excludeEnd("ctx");
  8808. $recv($recv($ClassBuilder())._new())._renameClass_to_(self,aString);
  8809. return self;
  8810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8811. }, function($ctx1) {$ctx1.fill(self,"rename:",{aString:aString},$globals.Class)});
  8812. //>>excludeEnd("ctx");
  8813. },
  8814. //>>excludeStart("ide", pragmas.excludeIdeData);
  8815. args: ["aString"],
  8816. source: "rename: aString\x0a\x09ClassBuilder new renameClass: self to: aString",
  8817. referencedClasses: ["ClassBuilder"],
  8818. //>>excludeEnd("ide");
  8819. messageSends: ["renameClass:to:", "new"]
  8820. }),
  8821. $globals.Class);
  8822. $core.addMethod(
  8823. $core.method({
  8824. selector: "subclass:instanceVariableNames:",
  8825. protocol: 'class creation',
  8826. fn: function (aString,anotherString){
  8827. var self=this;
  8828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8829. return $core.withContext(function($ctx1) {
  8830. //>>excludeEnd("ctx");
  8831. var $1;
  8832. $1=self._subclass_instanceVariableNames_package_(aString,anotherString,nil);
  8833. return $1;
  8834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8835. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:",{aString:aString,anotherString:anotherString},$globals.Class)});
  8836. //>>excludeEnd("ctx");
  8837. },
  8838. //>>excludeStart("ide", pragmas.excludeIdeData);
  8839. args: ["aString", "anotherString"],
  8840. source: "subclass: aString instanceVariableNames: anotherString\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: anotherString package: nil",
  8841. referencedClasses: [],
  8842. //>>excludeEnd("ide");
  8843. messageSends: ["subclass:instanceVariableNames:package:"]
  8844. }),
  8845. $globals.Class);
  8846. $core.addMethod(
  8847. $core.method({
  8848. selector: "subclass:instanceVariableNames:category:",
  8849. protocol: 'class creation',
  8850. fn: function (aString,aString2,aString3){
  8851. var self=this;
  8852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8853. return $core.withContext(function($ctx1) {
  8854. //>>excludeEnd("ctx");
  8855. var $1;
  8856. $1=self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
  8857. return $1;
  8858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8859. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:category:",{aString:aString,aString2:aString2,aString3:aString3},$globals.Class)});
  8860. //>>excludeEnd("ctx");
  8861. },
  8862. //>>excludeStart("ide", pragmas.excludeIdeData);
  8863. args: ["aString", "aString2", "aString3"],
  8864. source: "subclass: aString instanceVariableNames: aString2 category: aString3\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: aString2 package: aString3",
  8865. referencedClasses: [],
  8866. //>>excludeEnd("ide");
  8867. messageSends: ["subclass:instanceVariableNames:package:"]
  8868. }),
  8869. $globals.Class);
  8870. $core.addMethod(
  8871. $core.method({
  8872. selector: "subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",
  8873. protocol: 'class creation',
  8874. fn: function (aString,aString2,classVars,pools,aString3){
  8875. var self=this;
  8876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8877. return $core.withContext(function($ctx1) {
  8878. //>>excludeEnd("ctx");
  8879. var $1;
  8880. $1=self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
  8881. return $1;
  8882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8883. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",{aString:aString,aString2:aString2,classVars:classVars,pools:pools,aString3:aString3},$globals.Class)});
  8884. //>>excludeEnd("ctx");
  8885. },
  8886. //>>excludeStart("ide", pragmas.excludeIdeData);
  8887. args: ["aString", "aString2", "classVars", "pools", "aString3"],
  8888. 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",
  8889. referencedClasses: [],
  8890. //>>excludeEnd("ide");
  8891. messageSends: ["subclass:instanceVariableNames:package:"]
  8892. }),
  8893. $globals.Class);
  8894. $core.addMethod(
  8895. $core.method({
  8896. selector: "subclass:instanceVariableNames:package:",
  8897. protocol: 'class creation',
  8898. fn: function (aString,aString2,aString3){
  8899. var self=this;
  8900. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  8901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8902. return $core.withContext(function($ctx1) {
  8903. //>>excludeEnd("ctx");
  8904. var $1;
  8905. $1=$recv($recv($ClassBuilder())._new())._superclass_subclass_instanceVariableNames_package_(self,$recv(aString)._asString(),aString2,aString3);
  8906. return $1;
  8907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8908. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:package:",{aString:aString,aString2:aString2,aString3:aString3},$globals.Class)});
  8909. //>>excludeEnd("ctx");
  8910. },
  8911. //>>excludeStart("ide", pragmas.excludeIdeData);
  8912. args: ["aString", "aString2", "aString3"],
  8913. source: "subclass: aString instanceVariableNames: aString2 package: aString3\x0a\x09^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString asString instanceVariableNames: aString2 package: aString3",
  8914. referencedClasses: ["ClassBuilder"],
  8915. //>>excludeEnd("ide");
  8916. messageSends: ["superclass:subclass:instanceVariableNames:package:", "new", "asString"]
  8917. }),
  8918. $globals.Class);
  8919. $core.addMethod(
  8920. $core.method({
  8921. selector: "subclasses",
  8922. protocol: 'accessing',
  8923. fn: function (){
  8924. var self=this;
  8925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8926. return $core.withContext(function($ctx1) {
  8927. //>>excludeEnd("ctx");
  8928. return self.subclasses._copy();
  8929. return self;
  8930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8931. }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Class)});
  8932. //>>excludeEnd("ctx");
  8933. },
  8934. //>>excludeStart("ide", pragmas.excludeIdeData);
  8935. args: [],
  8936. source: "subclasses\x0a\x09<return self.subclasses._copy()>",
  8937. referencedClasses: [],
  8938. //>>excludeEnd("ide");
  8939. messageSends: []
  8940. }),
  8941. $globals.Class);
  8942. $core.addMethod(
  8943. $core.method({
  8944. selector: "theMetaClass",
  8945. protocol: 'accessing',
  8946. fn: function (){
  8947. var self=this;
  8948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8949. return $core.withContext(function($ctx1) {
  8950. //>>excludeEnd("ctx");
  8951. var $1;
  8952. $1=self._class();
  8953. return $1;
  8954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8955. }, function($ctx1) {$ctx1.fill(self,"theMetaClass",{},$globals.Class)});
  8956. //>>excludeEnd("ctx");
  8957. },
  8958. //>>excludeStart("ide", pragmas.excludeIdeData);
  8959. args: [],
  8960. source: "theMetaClass\x0a\x09^ self class",
  8961. referencedClasses: [],
  8962. //>>excludeEnd("ide");
  8963. messageSends: ["class"]
  8964. }),
  8965. $globals.Class);
  8966. $core.addMethod(
  8967. $core.method({
  8968. selector: "theNonMetaClass",
  8969. protocol: 'accessing',
  8970. fn: function (){
  8971. var self=this;
  8972. return self;
  8973. },
  8974. //>>excludeStart("ide", pragmas.excludeIdeData);
  8975. args: [],
  8976. source: "theNonMetaClass\x0a\x09^ self",
  8977. referencedClasses: [],
  8978. //>>excludeEnd("ide");
  8979. messageSends: []
  8980. }),
  8981. $globals.Class);
  8982. $core.addClass('Metaclass', $globals.Behavior, [], 'Kernel-Classes');
  8983. //>>excludeStart("ide", pragmas.excludeIdeData);
  8984. $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.";
  8985. //>>excludeEnd("ide");
  8986. $core.addMethod(
  8987. $core.method({
  8988. selector: "asJavascript",
  8989. protocol: 'converting',
  8990. fn: function (){
  8991. var self=this;
  8992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8993. return $core.withContext(function($ctx1) {
  8994. //>>excludeEnd("ctx");
  8995. var $1;
  8996. $1=$recv("$globals.".__comma($recv(self._instanceClass())._name())).__comma(".klass");
  8997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8998. $ctx1.sendIdx[","]=1;
  8999. //>>excludeEnd("ctx");
  9000. return $1;
  9001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9002. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Metaclass)});
  9003. //>>excludeEnd("ctx");
  9004. },
  9005. //>>excludeStart("ide", pragmas.excludeIdeData);
  9006. args: [],
  9007. source: "asJavascript\x0a\x09^ '$globals.', self instanceClass name, '.klass'",
  9008. referencedClasses: [],
  9009. //>>excludeEnd("ide");
  9010. messageSends: [",", "name", "instanceClass"]
  9011. }),
  9012. $globals.Metaclass);
  9013. $core.addMethod(
  9014. $core.method({
  9015. selector: "definition",
  9016. protocol: 'accessing',
  9017. fn: function (){
  9018. var self=this;
  9019. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  9020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9021. return $core.withContext(function($ctx1) {
  9022. //>>excludeEnd("ctx");
  9023. var $2,$1;
  9024. $1=$recv($String())._streamContents_((function(stream){
  9025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9026. return $core.withContext(function($ctx2) {
  9027. //>>excludeEnd("ctx");
  9028. $recv(stream)._nextPutAll_(self._asString());
  9029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9030. $ctx2.sendIdx["nextPutAll:"]=1;
  9031. //>>excludeEnd("ctx");
  9032. $2=$recv(stream)._nextPutAll_(" instanceVariableNames: '");
  9033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9034. $ctx2.sendIdx["nextPutAll:"]=2;
  9035. //>>excludeEnd("ctx");
  9036. $2;
  9037. $recv(self._instanceVariableNames())._do_separatedBy_((function(each){
  9038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9039. return $core.withContext(function($ctx3) {
  9040. //>>excludeEnd("ctx");
  9041. return $recv(stream)._nextPutAll_(each);
  9042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9043. $ctx3.sendIdx["nextPutAll:"]=3;
  9044. //>>excludeEnd("ctx");
  9045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9046. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  9047. //>>excludeEnd("ctx");
  9048. }),(function(){
  9049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9050. return $core.withContext(function($ctx3) {
  9051. //>>excludeEnd("ctx");
  9052. return $recv(stream)._nextPutAll_(" ");
  9053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9054. $ctx3.sendIdx["nextPutAll:"]=4;
  9055. //>>excludeEnd("ctx");
  9056. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9057. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  9058. //>>excludeEnd("ctx");
  9059. }));
  9060. return $recv(stream)._nextPutAll_("'");
  9061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9062. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  9063. //>>excludeEnd("ctx");
  9064. }));
  9065. return $1;
  9066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9067. }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.Metaclass)});
  9068. //>>excludeEnd("ctx");
  9069. },
  9070. //>>excludeStart("ide", pragmas.excludeIdeData);
  9071. args: [],
  9072. 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: '''' ]",
  9073. referencedClasses: ["String"],
  9074. //>>excludeEnd("ide");
  9075. messageSends: ["streamContents:", "nextPutAll:", "asString", "do:separatedBy:", "instanceVariableNames"]
  9076. }),
  9077. $globals.Metaclass);
  9078. $core.addMethod(
  9079. $core.method({
  9080. selector: "instanceClass",
  9081. protocol: 'accessing',
  9082. fn: function (){
  9083. var self=this;
  9084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9085. return $core.withContext(function($ctx1) {
  9086. //>>excludeEnd("ctx");
  9087. return self.instanceClass;
  9088. return self;
  9089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9090. }, function($ctx1) {$ctx1.fill(self,"instanceClass",{},$globals.Metaclass)});
  9091. //>>excludeEnd("ctx");
  9092. },
  9093. //>>excludeStart("ide", pragmas.excludeIdeData);
  9094. args: [],
  9095. source: "instanceClass\x0a\x09<return self.instanceClass>",
  9096. referencedClasses: [],
  9097. //>>excludeEnd("ide");
  9098. messageSends: []
  9099. }),
  9100. $globals.Metaclass);
  9101. $core.addMethod(
  9102. $core.method({
  9103. selector: "instanceVariableNames:",
  9104. protocol: 'accessing',
  9105. fn: function (aCollection){
  9106. var self=this;
  9107. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  9108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9109. return $core.withContext(function($ctx1) {
  9110. //>>excludeEnd("ctx");
  9111. $recv($recv($ClassBuilder())._new())._class_instanceVariableNames_(self,aCollection);
  9112. return self;
  9113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9114. }, function($ctx1) {$ctx1.fill(self,"instanceVariableNames:",{aCollection:aCollection},$globals.Metaclass)});
  9115. //>>excludeEnd("ctx");
  9116. },
  9117. //>>excludeStart("ide", pragmas.excludeIdeData);
  9118. args: ["aCollection"],
  9119. source: "instanceVariableNames: aCollection\x0a\x09ClassBuilder new\x0a\x09\x09class: self instanceVariableNames: aCollection",
  9120. referencedClasses: ["ClassBuilder"],
  9121. //>>excludeEnd("ide");
  9122. messageSends: ["class:instanceVariableNames:", "new"]
  9123. }),
  9124. $globals.Metaclass);
  9125. $core.addMethod(
  9126. $core.method({
  9127. selector: "isMetaclass",
  9128. protocol: 'testing',
  9129. fn: function (){
  9130. var self=this;
  9131. return true;
  9132. },
  9133. //>>excludeStart("ide", pragmas.excludeIdeData);
  9134. args: [],
  9135. source: "isMetaclass\x0a\x09^ true",
  9136. referencedClasses: [],
  9137. //>>excludeEnd("ide");
  9138. messageSends: []
  9139. }),
  9140. $globals.Metaclass);
  9141. $core.addMethod(
  9142. $core.method({
  9143. selector: "package",
  9144. protocol: 'accessing',
  9145. fn: function (){
  9146. var self=this;
  9147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9148. return $core.withContext(function($ctx1) {
  9149. //>>excludeEnd("ctx");
  9150. var $1;
  9151. $1=$recv(self._instanceClass())._package();
  9152. return $1;
  9153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9154. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.Metaclass)});
  9155. //>>excludeEnd("ctx");
  9156. },
  9157. //>>excludeStart("ide", pragmas.excludeIdeData);
  9158. args: [],
  9159. source: "package\x0a\x09^ self instanceClass package",
  9160. referencedClasses: [],
  9161. //>>excludeEnd("ide");
  9162. messageSends: ["package", "instanceClass"]
  9163. }),
  9164. $globals.Metaclass);
  9165. $core.addMethod(
  9166. $core.method({
  9167. selector: "printOn:",
  9168. protocol: 'printing',
  9169. fn: function (aStream){
  9170. var self=this;
  9171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9172. return $core.withContext(function($ctx1) {
  9173. //>>excludeEnd("ctx");
  9174. var $1;
  9175. $recv(aStream)._nextPutAll_($recv(self._instanceClass())._name());
  9176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9177. $ctx1.sendIdx["nextPutAll:"]=1;
  9178. //>>excludeEnd("ctx");
  9179. $1=$recv(aStream)._nextPutAll_(" class");
  9180. return self;
  9181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9182. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Metaclass)});
  9183. //>>excludeEnd("ctx");
  9184. },
  9185. //>>excludeStart("ide", pragmas.excludeIdeData);
  9186. args: ["aStream"],
  9187. source: "printOn: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: self instanceClass name;\x0a\x09\x09nextPutAll: ' class'",
  9188. referencedClasses: [],
  9189. //>>excludeEnd("ide");
  9190. messageSends: ["nextPutAll:", "name", "instanceClass"]
  9191. }),
  9192. $globals.Metaclass);
  9193. $core.addMethod(
  9194. $core.method({
  9195. selector: "subclasses",
  9196. protocol: 'accessing',
  9197. fn: function (){
  9198. var self=this;
  9199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9200. return $core.withContext(function($ctx1) {
  9201. //>>excludeEnd("ctx");
  9202. var $1;
  9203. $1=$recv($recv($recv(self._instanceClass())._subclasses())._select_((function(each){
  9204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9205. return $core.withContext(function($ctx2) {
  9206. //>>excludeEnd("ctx");
  9207. return $recv($recv(each)._isMetaclass())._not();
  9208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9209. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  9210. //>>excludeEnd("ctx");
  9211. })))._collect_((function(each){
  9212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9213. return $core.withContext(function($ctx2) {
  9214. //>>excludeEnd("ctx");
  9215. return $recv(each)._theMetaClass();
  9216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9217. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  9218. //>>excludeEnd("ctx");
  9219. }));
  9220. return $1;
  9221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9222. }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Metaclass)});
  9223. //>>excludeEnd("ctx");
  9224. },
  9225. //>>excludeStart("ide", pragmas.excludeIdeData);
  9226. args: [],
  9227. source: "subclasses\x0a\x09^ (self instanceClass subclasses \x0a\x09\x09select: [ :each | each isMetaclass not ])\x0a\x09\x09collect: [ :each | each theMetaClass ]",
  9228. referencedClasses: [],
  9229. //>>excludeEnd("ide");
  9230. messageSends: ["collect:", "select:", "subclasses", "instanceClass", "not", "isMetaclass", "theMetaClass"]
  9231. }),
  9232. $globals.Metaclass);
  9233. $core.addMethod(
  9234. $core.method({
  9235. selector: "theMetaClass",
  9236. protocol: 'accessing',
  9237. fn: function (){
  9238. var self=this;
  9239. return self;
  9240. },
  9241. //>>excludeStart("ide", pragmas.excludeIdeData);
  9242. args: [],
  9243. source: "theMetaClass\x0a\x09^ self",
  9244. referencedClasses: [],
  9245. //>>excludeEnd("ide");
  9246. messageSends: []
  9247. }),
  9248. $globals.Metaclass);
  9249. $core.addMethod(
  9250. $core.method({
  9251. selector: "theNonMetaClass",
  9252. protocol: 'accessing',
  9253. fn: function (){
  9254. var self=this;
  9255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9256. return $core.withContext(function($ctx1) {
  9257. //>>excludeEnd("ctx");
  9258. var $1;
  9259. $1=self._instanceClass();
  9260. return $1;
  9261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9262. }, function($ctx1) {$ctx1.fill(self,"theNonMetaClass",{},$globals.Metaclass)});
  9263. //>>excludeEnd("ctx");
  9264. },
  9265. //>>excludeStart("ide", pragmas.excludeIdeData);
  9266. args: [],
  9267. source: "theNonMetaClass\x0a\x09^ self instanceClass",
  9268. referencedClasses: [],
  9269. //>>excludeEnd("ide");
  9270. messageSends: ["instanceClass"]
  9271. }),
  9272. $globals.Metaclass);
  9273. $core.addClass('ClassBuilder', $globals.Object, [], 'Kernel-Classes');
  9274. //>>excludeStart("ide", pragmas.excludeIdeData);
  9275. $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:`.";
  9276. //>>excludeEnd("ide");
  9277. $core.addMethod(
  9278. $core.method({
  9279. selector: "addSubclassOf:named:instanceVariableNames:package:",
  9280. protocol: 'class definition',
  9281. fn: function (aClass,className,aCollection,packageName){
  9282. var self=this;
  9283. var theClass,thePackage;
  9284. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  9285. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  9286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9287. return $core.withContext(function($ctx1) {
  9288. //>>excludeEnd("ctx");
  9289. var $1,$2,$3,$4,$receiver;
  9290. theClass=$recv($recv($Smalltalk())._globals())._at_(className);
  9291. thePackage=$recv($Package())._named_(packageName);
  9292. $1=theClass;
  9293. if(($receiver = $1) == null || $receiver.isNil){
  9294. $1;
  9295. } else {
  9296. $recv(theClass)._package_(thePackage);
  9297. $2=$recv($recv(theClass)._superclass()).__eq_eq(aClass);
  9298. if(!$core.assert($2)){
  9299. $3=self._migrateClassNamed_superclass_instanceVariableNames_package_(className,aClass,aCollection,packageName);
  9300. return $3;
  9301. };
  9302. };
  9303. $4=self._basicAddSubclassOf_named_instanceVariableNames_package_(aClass,className,aCollection,packageName);
  9304. return $4;
  9305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9306. }, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,theClass:theClass,thePackage:thePackage},$globals.ClassBuilder)});
  9307. //>>excludeEnd("ctx");
  9308. },
  9309. //>>excludeStart("ide", pragmas.excludeIdeData);
  9310. args: ["aClass", "className", "aCollection", "packageName"],
  9311. 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",
  9312. referencedClasses: ["Smalltalk", "Package"],
  9313. //>>excludeEnd("ide");
  9314. messageSends: ["at:", "globals", "named:", "ifNotNil:", "package:", "ifFalse:", "==", "superclass", "migrateClassNamed:superclass:instanceVariableNames:package:", "basicAddSubclassOf:named:instanceVariableNames:package:"]
  9315. }),
  9316. $globals.ClassBuilder);
  9317. $core.addMethod(
  9318. $core.method({
  9319. selector: "basicAddSubclassOf:named:instanceVariableNames:package:",
  9320. protocol: 'private',
  9321. fn: function (aClass,aString,aCollection,packageName){
  9322. var self=this;
  9323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9324. return $core.withContext(function($ctx1) {
  9325. //>>excludeEnd("ctx");
  9326. $core.addClass(aString, aClass, aCollection, packageName);
  9327. return $globals[aString]
  9328. ;
  9329. return self;
  9330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9331. }, function($ctx1) {$ctx1.fill(self,"basicAddSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,aString:aString,aCollection:aCollection,packageName:packageName},$globals.ClassBuilder)});
  9332. //>>excludeEnd("ctx");
  9333. },
  9334. //>>excludeStart("ide", pragmas.excludeIdeData);
  9335. args: ["aClass", "aString", "aCollection", "packageName"],
  9336. 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>",
  9337. referencedClasses: [],
  9338. //>>excludeEnd("ide");
  9339. messageSends: []
  9340. }),
  9341. $globals.ClassBuilder);
  9342. $core.addMethod(
  9343. $core.method({
  9344. selector: "basicClass:instanceVariableNames:",
  9345. protocol: 'private',
  9346. fn: function (aClass,aString){
  9347. var self=this;
  9348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9349. return $core.withContext(function($ctx1) {
  9350. //>>excludeEnd("ctx");
  9351. self._basicClass_instanceVariables_(aClass,self._instanceVariableNamesFor_(aString));
  9352. return self;
  9353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9354. }, function($ctx1) {$ctx1.fill(self,"basicClass:instanceVariableNames:",{aClass:aClass,aString:aString},$globals.ClassBuilder)});
  9355. //>>excludeEnd("ctx");
  9356. },
  9357. //>>excludeStart("ide", pragmas.excludeIdeData);
  9358. args: ["aClass", "aString"],
  9359. source: "basicClass: aClass instanceVariableNames: aString\x0a\x09self basicClass: aClass instanceVariables: (self instanceVariableNamesFor: aString)",
  9360. referencedClasses: [],
  9361. //>>excludeEnd("ide");
  9362. messageSends: ["basicClass:instanceVariables:", "instanceVariableNamesFor:"]
  9363. }),
  9364. $globals.ClassBuilder);
  9365. $core.addMethod(
  9366. $core.method({
  9367. selector: "basicClass:instanceVariables:",
  9368. protocol: 'private',
  9369. fn: function (aClass,aCollection){
  9370. var self=this;
  9371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9372. return $core.withContext(function($ctx1) {
  9373. //>>excludeEnd("ctx");
  9374. var $1;
  9375. $1=$recv(aClass)._isMetaclass();
  9376. if(!$core.assert($1)){
  9377. self._error_($recv($recv(aClass)._name()).__comma(" is not a metaclass"));
  9378. };
  9379. $recv(aClass)._basicAt_put_("iVarNames",aCollection);
  9380. return self;
  9381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9382. }, function($ctx1) {$ctx1.fill(self,"basicClass:instanceVariables:",{aClass:aClass,aCollection:aCollection},$globals.ClassBuilder)});
  9383. //>>excludeEnd("ctx");
  9384. },
  9385. //>>excludeStart("ide", pragmas.excludeIdeData);
  9386. args: ["aClass", "aCollection"],
  9387. source: "basicClass: aClass instanceVariables: aCollection\x0a\x0a\x09aClass isMetaclass ifFalse: [ self error: aClass name, ' is not a metaclass' ].\x0a\x09aClass basicAt: 'iVarNames' put: aCollection",
  9388. referencedClasses: [],
  9389. //>>excludeEnd("ide");
  9390. messageSends: ["ifFalse:", "isMetaclass", "error:", ",", "name", "basicAt:put:"]
  9391. }),
  9392. $globals.ClassBuilder);
  9393. $core.addMethod(
  9394. $core.method({
  9395. selector: "basicRemoveClass:",
  9396. protocol: 'private',
  9397. fn: function (aClass){
  9398. var self=this;
  9399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9400. return $core.withContext(function($ctx1) {
  9401. //>>excludeEnd("ctx");
  9402. $core.removeClass(aClass);
  9403. return self;
  9404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9405. }, function($ctx1) {$ctx1.fill(self,"basicRemoveClass:",{aClass:aClass},$globals.ClassBuilder)});
  9406. //>>excludeEnd("ctx");
  9407. },
  9408. //>>excludeStart("ide", pragmas.excludeIdeData);
  9409. args: ["aClass"],
  9410. source: "basicRemoveClass: aClass\x0a\x09<$core.removeClass(aClass)>",
  9411. referencedClasses: [],
  9412. //>>excludeEnd("ide");
  9413. messageSends: []
  9414. }),
  9415. $globals.ClassBuilder);
  9416. $core.addMethod(
  9417. $core.method({
  9418. selector: "basicRenameClass:to:",
  9419. protocol: 'private',
  9420. fn: function (aClass,aString){
  9421. var self=this;
  9422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9423. return $core.withContext(function($ctx1) {
  9424. //>>excludeEnd("ctx");
  9425. $globals[aString] = aClass;
  9426. delete $globals[aClass.className];
  9427. aClass.className = aString;
  9428. ;
  9429. return self;
  9430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9431. }, function($ctx1) {$ctx1.fill(self,"basicRenameClass:to:",{aClass:aClass,aString:aString},$globals.ClassBuilder)});
  9432. //>>excludeEnd("ctx");
  9433. },
  9434. //>>excludeStart("ide", pragmas.excludeIdeData);
  9435. args: ["aClass", "aString"],
  9436. 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>",
  9437. referencedClasses: [],
  9438. //>>excludeEnd("ide");
  9439. messageSends: []
  9440. }),
  9441. $globals.ClassBuilder);
  9442. $core.addMethod(
  9443. $core.method({
  9444. selector: "basicSwapClassNames:with:",
  9445. protocol: 'private',
  9446. fn: function (aClass,anotherClass){
  9447. var self=this;
  9448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9449. return $core.withContext(function($ctx1) {
  9450. //>>excludeEnd("ctx");
  9451. var tmp = aClass.className;
  9452. aClass.className = anotherClass.className;
  9453. anotherClass.className = tmp;
  9454. ;
  9455. return self;
  9456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9457. }, function($ctx1) {$ctx1.fill(self,"basicSwapClassNames:with:",{aClass:aClass,anotherClass:anotherClass},$globals.ClassBuilder)});
  9458. //>>excludeEnd("ctx");
  9459. },
  9460. //>>excludeStart("ide", pragmas.excludeIdeData);
  9461. args: ["aClass", "anotherClass"],
  9462. 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>",
  9463. referencedClasses: [],
  9464. //>>excludeEnd("ide");
  9465. messageSends: []
  9466. }),
  9467. $globals.ClassBuilder);
  9468. $core.addMethod(
  9469. $core.method({
  9470. selector: "class:instanceVariableNames:",
  9471. protocol: 'class definition',
  9472. fn: function (aClass,ivarNames){
  9473. var self=this;
  9474. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9475. function $ClassDefinitionChanged(){return $globals.ClassDefinitionChanged||(typeof ClassDefinitionChanged=="undefined"?nil:ClassDefinitionChanged)}
  9476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9477. return $core.withContext(function($ctx1) {
  9478. //>>excludeEnd("ctx");
  9479. var $1,$2;
  9480. self._basicClass_instanceVariableNames_(aClass,ivarNames);
  9481. self._setupClass_(aClass);
  9482. $1=$recv($ClassDefinitionChanged())._new();
  9483. $recv($1)._theClass_(aClass);
  9484. $2=$recv($1)._yourself();
  9485. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  9486. return self;
  9487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9488. }, function($ctx1) {$ctx1.fill(self,"class:instanceVariableNames:",{aClass:aClass,ivarNames:ivarNames},$globals.ClassBuilder)});
  9489. //>>excludeEnd("ctx");
  9490. },
  9491. //>>excludeStart("ide", pragmas.excludeIdeData);
  9492. args: ["aClass", "ivarNames"],
  9493. 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)",
  9494. referencedClasses: ["SystemAnnouncer", "ClassDefinitionChanged"],
  9495. //>>excludeEnd("ide");
  9496. messageSends: ["basicClass:instanceVariableNames:", "setupClass:", "announce:", "current", "theClass:", "new", "yourself"]
  9497. }),
  9498. $globals.ClassBuilder);
  9499. $core.addMethod(
  9500. $core.method({
  9501. selector: "copyClass:named:",
  9502. protocol: 'copying',
  9503. fn: function (aClass,className){
  9504. var self=this;
  9505. var newClass;
  9506. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9507. function $ClassAdded(){return $globals.ClassAdded||(typeof ClassAdded=="undefined"?nil:ClassAdded)}
  9508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9509. return $core.withContext(function($ctx1) {
  9510. //>>excludeEnd("ctx");
  9511. var $1,$2,$3;
  9512. newClass=self._addSubclassOf_named_instanceVariableNames_package_($recv(aClass)._superclass(),className,$recv(aClass)._instanceVariableNames(),$recv($recv(aClass)._package())._name());
  9513. self._copyClass_to_(aClass,newClass);
  9514. $1=$recv($ClassAdded())._new();
  9515. $recv($1)._theClass_(newClass);
  9516. $2=$recv($1)._yourself();
  9517. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  9518. $3=newClass;
  9519. return $3;
  9520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9521. }, function($ctx1) {$ctx1.fill(self,"copyClass:named:",{aClass:aClass,className:className,newClass:newClass},$globals.ClassBuilder)});
  9522. //>>excludeEnd("ctx");
  9523. },
  9524. //>>excludeStart("ide", pragmas.excludeIdeData);
  9525. args: ["aClass", "className"],
  9526. 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",
  9527. referencedClasses: ["SystemAnnouncer", "ClassAdded"],
  9528. //>>excludeEnd("ide");
  9529. messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "superclass", "instanceVariableNames", "name", "package", "copyClass:to:", "announce:", "current", "theClass:", "new", "yourself"]
  9530. }),
  9531. $globals.ClassBuilder);
  9532. $core.addMethod(
  9533. $core.method({
  9534. selector: "copyClass:to:",
  9535. protocol: 'copying',
  9536. fn: function (aClass,anotherClass){
  9537. var self=this;
  9538. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  9539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9540. return $core.withContext(function($ctx1) {
  9541. //>>excludeEnd("ctx");
  9542. var $1,$2,$3,$4,$5,$7,$6,$9,$8;
  9543. $recv(anotherClass)._comment_($recv(aClass)._comment());
  9544. $1=$recv(aClass)._methodDictionary();
  9545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9546. $ctx1.sendIdx["methodDictionary"]=1;
  9547. //>>excludeEnd("ctx");
  9548. $recv($1)._valuesDo_((function(each){
  9549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9550. return $core.withContext(function($ctx2) {
  9551. //>>excludeEnd("ctx");
  9552. $2=$recv($Compiler())._new();
  9553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9554. $ctx2.sendIdx["new"]=1;
  9555. //>>excludeEnd("ctx");
  9556. $3=$recv(each)._source();
  9557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9558. $ctx2.sendIdx["source"]=1;
  9559. //>>excludeEnd("ctx");
  9560. $4=$recv(each)._protocol();
  9561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9562. $ctx2.sendIdx["protocol"]=1;
  9563. //>>excludeEnd("ctx");
  9564. return $recv($2)._install_forClass_protocol_($3,anotherClass,$4);
  9565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9566. $ctx2.sendIdx["install:forClass:protocol:"]=1;
  9567. //>>excludeEnd("ctx");
  9568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9569. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  9570. //>>excludeEnd("ctx");
  9571. }));
  9572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9573. $ctx1.sendIdx["valuesDo:"]=1;
  9574. //>>excludeEnd("ctx");
  9575. $5=$recv(anotherClass)._class();
  9576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9577. $ctx1.sendIdx["class"]=1;
  9578. //>>excludeEnd("ctx");
  9579. $7=$recv(aClass)._class();
  9580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9581. $ctx1.sendIdx["class"]=2;
  9582. //>>excludeEnd("ctx");
  9583. $6=$recv($7)._instanceVariableNames();
  9584. self._basicClass_instanceVariables_($5,$6);
  9585. $9=$recv(aClass)._class();
  9586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9587. $ctx1.sendIdx["class"]=3;
  9588. //>>excludeEnd("ctx");
  9589. $8=$recv($9)._methodDictionary();
  9590. $recv($8)._valuesDo_((function(each){
  9591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9592. return $core.withContext(function($ctx2) {
  9593. //>>excludeEnd("ctx");
  9594. return $recv($recv($Compiler())._new())._install_forClass_protocol_($recv(each)._source(),$recv(anotherClass)._class(),$recv(each)._protocol());
  9595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9596. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  9597. //>>excludeEnd("ctx");
  9598. }));
  9599. self._setupClass_(anotherClass);
  9600. return self;
  9601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9602. }, function($ctx1) {$ctx1.fill(self,"copyClass:to:",{aClass:aClass,anotherClass:anotherClass},$globals.ClassBuilder)});
  9603. //>>excludeEnd("ctx");
  9604. },
  9605. //>>excludeStart("ide", pragmas.excludeIdeData);
  9606. args: ["aClass", "anotherClass"],
  9607. 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",
  9608. referencedClasses: ["Compiler"],
  9609. //>>excludeEnd("ide");
  9610. messageSends: ["comment:", "comment", "valuesDo:", "methodDictionary", "install:forClass:protocol:", "new", "source", "protocol", "basicClass:instanceVariables:", "class", "instanceVariableNames", "setupClass:"]
  9611. }),
  9612. $globals.ClassBuilder);
  9613. $core.addMethod(
  9614. $core.method({
  9615. selector: "installMethod:forClass:protocol:",
  9616. protocol: 'method definition',
  9617. fn: function (aCompiledMethod,aBehavior,aString){
  9618. var self=this;
  9619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9620. return $core.withContext(function($ctx1) {
  9621. //>>excludeEnd("ctx");
  9622. $recv(aCompiledMethod)._protocol_(aString);
  9623. $recv(aBehavior)._addCompiledMethod_(aCompiledMethod);
  9624. return aCompiledMethod;
  9625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9626. }, function($ctx1) {$ctx1.fill(self,"installMethod:forClass:protocol:",{aCompiledMethod:aCompiledMethod,aBehavior:aBehavior,aString:aString},$globals.ClassBuilder)});
  9627. //>>excludeEnd("ctx");
  9628. },
  9629. //>>excludeStart("ide", pragmas.excludeIdeData);
  9630. args: ["aCompiledMethod", "aBehavior", "aString"],
  9631. source: "installMethod: aCompiledMethod forClass: aBehavior protocol: aString\x0a\x09aCompiledMethod protocol: aString.\x0a\x09aBehavior addCompiledMethod: aCompiledMethod.\x0a\x09^ aCompiledMethod",
  9632. referencedClasses: [],
  9633. //>>excludeEnd("ide");
  9634. messageSends: ["protocol:", "addCompiledMethod:"]
  9635. }),
  9636. $globals.ClassBuilder);
  9637. $core.addMethod(
  9638. $core.method({
  9639. selector: "instanceVariableNamesFor:",
  9640. protocol: 'accessing',
  9641. fn: function (aString){
  9642. var self=this;
  9643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9644. return $core.withContext(function($ctx1) {
  9645. //>>excludeEnd("ctx");
  9646. var $1;
  9647. $1=$recv($recv(aString)._tokenize_(" "))._reject_((function(each){
  9648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9649. return $core.withContext(function($ctx2) {
  9650. //>>excludeEnd("ctx");
  9651. return $recv(each)._isEmpty();
  9652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9653. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  9654. //>>excludeEnd("ctx");
  9655. }));
  9656. return $1;
  9657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9658. }, function($ctx1) {$ctx1.fill(self,"instanceVariableNamesFor:",{aString:aString},$globals.ClassBuilder)});
  9659. //>>excludeEnd("ctx");
  9660. },
  9661. //>>excludeStart("ide", pragmas.excludeIdeData);
  9662. args: ["aString"],
  9663. source: "instanceVariableNamesFor: aString\x0a\x09^ (aString tokenize: ' ') reject: [ :each | each isEmpty ]",
  9664. referencedClasses: [],
  9665. //>>excludeEnd("ide");
  9666. messageSends: ["reject:", "tokenize:", "isEmpty"]
  9667. }),
  9668. $globals.ClassBuilder);
  9669. $core.addMethod(
  9670. $core.method({
  9671. selector: "migrateClass:superclass:",
  9672. protocol: 'class migration',
  9673. fn: function (aClass,anotherClass){
  9674. var self=this;
  9675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9676. return $core.withContext(function($ctx1) {
  9677. //>>excludeEnd("ctx");
  9678. var $2,$1;
  9679. $2=$recv(aClass)._name();
  9680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9681. $ctx1.sendIdx["name"]=1;
  9682. //>>excludeEnd("ctx");
  9683. $1=self._migrateClassNamed_superclass_instanceVariableNames_package_($2,anotherClass,$recv(aClass)._instanceVariableNames(),$recv($recv(aClass)._package())._name());
  9684. return $1;
  9685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9686. }, function($ctx1) {$ctx1.fill(self,"migrateClass:superclass:",{aClass:aClass,anotherClass:anotherClass},$globals.ClassBuilder)});
  9687. //>>excludeEnd("ctx");
  9688. },
  9689. //>>excludeStart("ide", pragmas.excludeIdeData);
  9690. args: ["aClass", "anotherClass"],
  9691. 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",
  9692. referencedClasses: [],
  9693. //>>excludeEnd("ide");
  9694. messageSends: ["migrateClassNamed:superclass:instanceVariableNames:package:", "name", "instanceVariableNames", "package"]
  9695. }),
  9696. $globals.ClassBuilder);
  9697. $core.addMethod(
  9698. $core.method({
  9699. selector: "migrateClassNamed:superclass:instanceVariableNames:package:",
  9700. protocol: 'class migration',
  9701. fn: function (className,aClass,aCollection,packageName){
  9702. var self=this;
  9703. var oldClass,newClass,tmp;
  9704. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  9705. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  9706. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9707. function $ClassMigrated(){return $globals.ClassMigrated||(typeof ClassMigrated=="undefined"?nil:ClassMigrated)}
  9708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9709. return $core.withContext(function($ctx1) {
  9710. //>>excludeEnd("ctx");
  9711. var $1,$2,$3,$4,$5;
  9712. tmp="new*".__comma(className);
  9713. oldClass=$recv($recv($Smalltalk())._globals())._at_(className);
  9714. newClass=self._addSubclassOf_named_instanceVariableNames_package_(aClass,tmp,aCollection,packageName);
  9715. self._basicSwapClassNames_with_(oldClass,newClass);
  9716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9717. $ctx1.sendIdx["basicSwapClassNames:with:"]=1;
  9718. //>>excludeEnd("ctx");
  9719. $recv((function(){
  9720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9721. return $core.withContext(function($ctx2) {
  9722. //>>excludeEnd("ctx");
  9723. return self._copyClass_to_(oldClass,newClass);
  9724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9725. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  9726. //>>excludeEnd("ctx");
  9727. }))._on_do_($Error(),(function(exception){
  9728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9729. return $core.withContext(function($ctx2) {
  9730. //>>excludeEnd("ctx");
  9731. self._basicSwapClassNames_with_(oldClass,newClass);
  9732. $1=self._basicRemoveClass_(newClass);
  9733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9734. $ctx2.sendIdx["basicRemoveClass:"]=1;
  9735. //>>excludeEnd("ctx");
  9736. $1;
  9737. return $recv(exception)._resignal();
  9738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9739. }, function($ctx2) {$ctx2.fillBlock({exception:exception},$ctx1,2)});
  9740. //>>excludeEnd("ctx");
  9741. }));
  9742. self._rawRenameClass_to_(oldClass,tmp);
  9743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9744. $ctx1.sendIdx["rawRenameClass:to:"]=1;
  9745. //>>excludeEnd("ctx");
  9746. $2=self._rawRenameClass_to_(newClass,className);
  9747. $recv($recv(oldClass)._subclasses())._do_((function(each){
  9748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9749. return $core.withContext(function($ctx2) {
  9750. //>>excludeEnd("ctx");
  9751. return self._migrateClass_superclass_(each,newClass);
  9752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9753. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  9754. //>>excludeEnd("ctx");
  9755. }));
  9756. self._basicRemoveClass_(oldClass);
  9757. $3=$recv($ClassMigrated())._new();
  9758. $recv($3)._theClass_(newClass);
  9759. $recv($3)._oldClass_(oldClass);
  9760. $4=$recv($3)._yourself();
  9761. $recv($recv($SystemAnnouncer())._current())._announce_($4);
  9762. $5=newClass;
  9763. return $5;
  9764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9765. }, 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)});
  9766. //>>excludeEnd("ctx");
  9767. },
  9768. //>>excludeStart("ide", pragmas.excludeIdeData);
  9769. args: ["className", "aClass", "aCollection", "packageName"],
  9770. 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\x09\x09exception resignal ].\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",
  9771. referencedClasses: ["Smalltalk", "Error", "SystemAnnouncer", "ClassMigrated"],
  9772. //>>excludeEnd("ide");
  9773. messageSends: [",", "at:", "globals", "addSubclassOf:named:instanceVariableNames:package:", "basicSwapClassNames:with:", "on:do:", "copyClass:to:", "basicRemoveClass:", "resignal", "rawRenameClass:to:", "do:", "subclasses", "migrateClass:superclass:", "announce:", "current", "theClass:", "new", "oldClass:", "yourself"]
  9774. }),
  9775. $globals.ClassBuilder);
  9776. $core.addMethod(
  9777. $core.method({
  9778. selector: "rawRenameClass:to:",
  9779. protocol: 'private',
  9780. fn: function (aClass,aString){
  9781. var self=this;
  9782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9783. return $core.withContext(function($ctx1) {
  9784. //>>excludeEnd("ctx");
  9785. $globals[aString] = aClass;
  9786. ;
  9787. return self;
  9788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9789. }, function($ctx1) {$ctx1.fill(self,"rawRenameClass:to:",{aClass:aClass,aString:aString},$globals.ClassBuilder)});
  9790. //>>excludeEnd("ctx");
  9791. },
  9792. //>>excludeStart("ide", pragmas.excludeIdeData);
  9793. args: ["aClass", "aString"],
  9794. source: "rawRenameClass: aClass to: aString\x0a\x09<\x0a\x09\x09$globals[aString] = aClass;\x0a\x09>",
  9795. referencedClasses: [],
  9796. //>>excludeEnd("ide");
  9797. messageSends: []
  9798. }),
  9799. $globals.ClassBuilder);
  9800. $core.addMethod(
  9801. $core.method({
  9802. selector: "renameClass:to:",
  9803. protocol: 'class migration',
  9804. fn: function (aClass,className){
  9805. var self=this;
  9806. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9807. function $ClassRenamed(){return $globals.ClassRenamed||(typeof ClassRenamed=="undefined"?nil:ClassRenamed)}
  9808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9809. return $core.withContext(function($ctx1) {
  9810. //>>excludeEnd("ctx");
  9811. var $1,$2;
  9812. self._basicRenameClass_to_(aClass,className);
  9813. $recv(aClass)._recompile();
  9814. $1=$recv($ClassRenamed())._new();
  9815. $recv($1)._theClass_(aClass);
  9816. $2=$recv($1)._yourself();
  9817. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  9818. return self;
  9819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9820. }, function($ctx1) {$ctx1.fill(self,"renameClass:to:",{aClass:aClass,className:className},$globals.ClassBuilder)});
  9821. //>>excludeEnd("ctx");
  9822. },
  9823. //>>excludeStart("ide", pragmas.excludeIdeData);
  9824. args: ["aClass", "className"],
  9825. 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)",
  9826. referencedClasses: ["SystemAnnouncer", "ClassRenamed"],
  9827. //>>excludeEnd("ide");
  9828. messageSends: ["basicRenameClass:to:", "recompile", "announce:", "current", "theClass:", "new", "yourself"]
  9829. }),
  9830. $globals.ClassBuilder);
  9831. $core.addMethod(
  9832. $core.method({
  9833. selector: "setupClass:",
  9834. protocol: 'public',
  9835. fn: function (aClass){
  9836. var self=this;
  9837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9838. return $core.withContext(function($ctx1) {
  9839. //>>excludeEnd("ctx");
  9840. $core.init(aClass);;
  9841. return self;
  9842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9843. }, function($ctx1) {$ctx1.fill(self,"setupClass:",{aClass:aClass},$globals.ClassBuilder)});
  9844. //>>excludeEnd("ctx");
  9845. },
  9846. //>>excludeStart("ide", pragmas.excludeIdeData);
  9847. args: ["aClass"],
  9848. source: "setupClass: aClass\x0a\x09<$core.init(aClass);>",
  9849. referencedClasses: [],
  9850. //>>excludeEnd("ide");
  9851. messageSends: []
  9852. }),
  9853. $globals.ClassBuilder);
  9854. $core.addMethod(
  9855. $core.method({
  9856. selector: "superclass:subclass:",
  9857. protocol: 'class definition',
  9858. fn: function (aClass,className){
  9859. var self=this;
  9860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9861. return $core.withContext(function($ctx1) {
  9862. //>>excludeEnd("ctx");
  9863. var $1;
  9864. $1=self._superclass_subclass_instanceVariableNames_package_(aClass,className,"",nil);
  9865. return $1;
  9866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9867. }, function($ctx1) {$ctx1.fill(self,"superclass:subclass:",{aClass:aClass,className:className},$globals.ClassBuilder)});
  9868. //>>excludeEnd("ctx");
  9869. },
  9870. //>>excludeStart("ide", pragmas.excludeIdeData);
  9871. args: ["aClass", "className"],
  9872. source: "superclass: aClass subclass: className\x0a\x09^ self superclass: aClass subclass: className instanceVariableNames: '' package: nil",
  9873. referencedClasses: [],
  9874. //>>excludeEnd("ide");
  9875. messageSends: ["superclass:subclass:instanceVariableNames:package:"]
  9876. }),
  9877. $globals.ClassBuilder);
  9878. $core.addMethod(
  9879. $core.method({
  9880. selector: "superclass:subclass:instanceVariableNames:package:",
  9881. protocol: 'class definition',
  9882. fn: function (aClass,className,ivarNames,packageName){
  9883. var self=this;
  9884. var newClass;
  9885. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9886. function $ClassAdded(){return $globals.ClassAdded||(typeof ClassAdded=="undefined"?nil:ClassAdded)}
  9887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9888. return $core.withContext(function($ctx1) {
  9889. //>>excludeEnd("ctx");
  9890. var $1,$2,$3,$4,$5,$receiver;
  9891. $1=self._instanceVariableNamesFor_(ivarNames);
  9892. if(($receiver = packageName) == null || $receiver.isNil){
  9893. $2="unclassified";
  9894. } else {
  9895. $2=packageName;
  9896. };
  9897. newClass=self._addSubclassOf_named_instanceVariableNames_package_(aClass,className,$1,$2);
  9898. self._setupClass_(newClass);
  9899. $3=$recv($ClassAdded())._new();
  9900. $recv($3)._theClass_(newClass);
  9901. $4=$recv($3)._yourself();
  9902. $recv($recv($SystemAnnouncer())._current())._announce_($4);
  9903. $5=newClass;
  9904. return $5;
  9905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9906. }, function($ctx1) {$ctx1.fill(self,"superclass:subclass:instanceVariableNames:package:",{aClass:aClass,className:className,ivarNames:ivarNames,packageName:packageName,newClass:newClass},$globals.ClassBuilder)});
  9907. //>>excludeEnd("ctx");
  9908. },
  9909. //>>excludeStart("ide", pragmas.excludeIdeData);
  9910. args: ["aClass", "className", "ivarNames", "packageName"],
  9911. 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",
  9912. referencedClasses: ["SystemAnnouncer", "ClassAdded"],
  9913. //>>excludeEnd("ide");
  9914. messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "instanceVariableNamesFor:", "ifNil:", "setupClass:", "announce:", "current", "theClass:", "new", "yourself"]
  9915. }),
  9916. $globals.ClassBuilder);
  9917. $core.addClass('ClassCategoryReader', $globals.Object, ['class', 'category'], 'Kernel-Classes');
  9918. //>>excludeStart("ide", pragmas.excludeIdeData);
  9919. $globals.ClassCategoryReader.comment="I provide a mechanism for retrieving class descriptions stored on a file in the Smalltalk chunk format.";
  9920. //>>excludeEnd("ide");
  9921. $core.addMethod(
  9922. $core.method({
  9923. selector: "class:category:",
  9924. protocol: 'accessing',
  9925. fn: function (aClass,aString){
  9926. var self=this;
  9927. self["@class"]=aClass;
  9928. self["@category"]=aString;
  9929. return self;
  9930. },
  9931. //>>excludeStart("ide", pragmas.excludeIdeData);
  9932. args: ["aClass", "aString"],
  9933. source: "class: aClass category: aString\x0a\x09class := aClass.\x0a\x09category := aString",
  9934. referencedClasses: [],
  9935. //>>excludeEnd("ide");
  9936. messageSends: []
  9937. }),
  9938. $globals.ClassCategoryReader);
  9939. $core.addMethod(
  9940. $core.method({
  9941. selector: "compileMethod:",
  9942. protocol: 'private',
  9943. fn: function (aString){
  9944. var self=this;
  9945. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  9946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9947. return $core.withContext(function($ctx1) {
  9948. //>>excludeEnd("ctx");
  9949. $recv($recv($Compiler())._new())._install_forClass_protocol_(aString,self["@class"],self["@category"]);
  9950. return self;
  9951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9952. }, function($ctx1) {$ctx1.fill(self,"compileMethod:",{aString:aString},$globals.ClassCategoryReader)});
  9953. //>>excludeEnd("ctx");
  9954. },
  9955. //>>excludeStart("ide", pragmas.excludeIdeData);
  9956. args: ["aString"],
  9957. source: "compileMethod: aString\x0a\x09Compiler new install: aString forClass: class protocol: category",
  9958. referencedClasses: ["Compiler"],
  9959. //>>excludeEnd("ide");
  9960. messageSends: ["install:forClass:protocol:", "new"]
  9961. }),
  9962. $globals.ClassCategoryReader);
  9963. $core.addMethod(
  9964. $core.method({
  9965. selector: "initialize",
  9966. protocol: 'initialization',
  9967. fn: function (){
  9968. var self=this;
  9969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9970. return $core.withContext(function($ctx1) {
  9971. //>>excludeEnd("ctx");
  9972. (
  9973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9974. $ctx1.supercall = true,
  9975. //>>excludeEnd("ctx");
  9976. $globals.ClassCategoryReader.superclass.fn.prototype._initialize.apply($recv(self), []));
  9977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9978. $ctx1.supercall = false;
  9979. //>>excludeEnd("ctx");;
  9980. return self;
  9981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9982. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ClassCategoryReader)});
  9983. //>>excludeEnd("ctx");
  9984. },
  9985. //>>excludeStart("ide", pragmas.excludeIdeData);
  9986. args: [],
  9987. source: "initialize\x0a\x09super initialize.",
  9988. referencedClasses: [],
  9989. //>>excludeEnd("ide");
  9990. messageSends: ["initialize"]
  9991. }),
  9992. $globals.ClassCategoryReader);
  9993. $core.addMethod(
  9994. $core.method({
  9995. selector: "scanFrom:",
  9996. protocol: 'fileIn',
  9997. fn: function (aChunkParser){
  9998. var self=this;
  9999. var chunk;
  10000. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  10001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10002. return $core.withContext(function($ctx1) {
  10003. //>>excludeEnd("ctx");
  10004. $recv((function(){
  10005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10006. return $core.withContext(function($ctx2) {
  10007. //>>excludeEnd("ctx");
  10008. chunk=$recv(aChunkParser)._nextChunk();
  10009. chunk;
  10010. return $recv(chunk)._isEmpty();
  10011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10012. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  10013. //>>excludeEnd("ctx");
  10014. }))._whileFalse_((function(){
  10015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10016. return $core.withContext(function($ctx2) {
  10017. //>>excludeEnd("ctx");
  10018. return self._compileMethod_(chunk);
  10019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10020. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  10021. //>>excludeEnd("ctx");
  10022. }));
  10023. $recv($recv($ClassBuilder())._new())._setupClass_(self["@class"]);
  10024. return self;
  10025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10026. }, function($ctx1) {$ctx1.fill(self,"scanFrom:",{aChunkParser:aChunkParser,chunk:chunk},$globals.ClassCategoryReader)});
  10027. //>>excludeEnd("ctx");
  10028. },
  10029. //>>excludeStart("ide", pragmas.excludeIdeData);
  10030. args: ["aChunkParser"],
  10031. 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",
  10032. referencedClasses: ["ClassBuilder"],
  10033. //>>excludeEnd("ide");
  10034. messageSends: ["whileFalse:", "nextChunk", "isEmpty", "compileMethod:", "setupClass:", "new"]
  10035. }),
  10036. $globals.ClassCategoryReader);
  10037. $core.addClass('ClassCommentReader', $globals.Object, ['class'], 'Kernel-Classes');
  10038. //>>excludeStart("ide", pragmas.excludeIdeData);
  10039. $globals.ClassCommentReader.comment="I provide a mechanism for retrieving class comments stored on a file.\x0a\x0aSee also `ClassCategoryReader`.";
  10040. //>>excludeEnd("ide");
  10041. $core.addMethod(
  10042. $core.method({
  10043. selector: "class:",
  10044. protocol: 'accessing',
  10045. fn: function (aClass){
  10046. var self=this;
  10047. self["@class"]=aClass;
  10048. return self;
  10049. },
  10050. //>>excludeStart("ide", pragmas.excludeIdeData);
  10051. args: ["aClass"],
  10052. source: "class: aClass\x0a\x09class := aClass",
  10053. referencedClasses: [],
  10054. //>>excludeEnd("ide");
  10055. messageSends: []
  10056. }),
  10057. $globals.ClassCommentReader);
  10058. $core.addMethod(
  10059. $core.method({
  10060. selector: "initialize",
  10061. protocol: 'initialization',
  10062. fn: function (){
  10063. var self=this;
  10064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10065. return $core.withContext(function($ctx1) {
  10066. //>>excludeEnd("ctx");
  10067. (
  10068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10069. $ctx1.supercall = true,
  10070. //>>excludeEnd("ctx");
  10071. $globals.ClassCommentReader.superclass.fn.prototype._initialize.apply($recv(self), []));
  10072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10073. $ctx1.supercall = false;
  10074. //>>excludeEnd("ctx");;
  10075. return self;
  10076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10077. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ClassCommentReader)});
  10078. //>>excludeEnd("ctx");
  10079. },
  10080. //>>excludeStart("ide", pragmas.excludeIdeData);
  10081. args: [],
  10082. source: "initialize\x0a\x09super initialize.",
  10083. referencedClasses: [],
  10084. //>>excludeEnd("ide");
  10085. messageSends: ["initialize"]
  10086. }),
  10087. $globals.ClassCommentReader);
  10088. $core.addMethod(
  10089. $core.method({
  10090. selector: "scanFrom:",
  10091. protocol: 'fileIn',
  10092. fn: function (aChunkParser){
  10093. var self=this;
  10094. var chunk;
  10095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10096. return $core.withContext(function($ctx1) {
  10097. //>>excludeEnd("ctx");
  10098. var $1;
  10099. chunk=$recv(aChunkParser)._nextChunk();
  10100. $1=$recv(chunk)._isEmpty();
  10101. if(!$core.assert($1)){
  10102. self._setComment_(chunk);
  10103. };
  10104. return self;
  10105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10106. }, function($ctx1) {$ctx1.fill(self,"scanFrom:",{aChunkParser:aChunkParser,chunk:chunk},$globals.ClassCommentReader)});
  10107. //>>excludeEnd("ctx");
  10108. },
  10109. //>>excludeStart("ide", pragmas.excludeIdeData);
  10110. args: ["aChunkParser"],
  10111. source: "scanFrom: aChunkParser\x0a\x09| chunk |\x0a\x09chunk := aChunkParser nextChunk.\x0a\x09chunk isEmpty ifFalse: [\x0a\x09\x09self setComment: chunk ].",
  10112. referencedClasses: [],
  10113. //>>excludeEnd("ide");
  10114. messageSends: ["nextChunk", "ifFalse:", "isEmpty", "setComment:"]
  10115. }),
  10116. $globals.ClassCommentReader);
  10117. $core.addMethod(
  10118. $core.method({
  10119. selector: "setComment:",
  10120. protocol: 'private',
  10121. fn: function (aString){
  10122. var self=this;
  10123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10124. return $core.withContext(function($ctx1) {
  10125. //>>excludeEnd("ctx");
  10126. $recv(self["@class"])._comment_(aString);
  10127. return self;
  10128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10129. }, function($ctx1) {$ctx1.fill(self,"setComment:",{aString:aString},$globals.ClassCommentReader)});
  10130. //>>excludeEnd("ctx");
  10131. },
  10132. //>>excludeStart("ide", pragmas.excludeIdeData);
  10133. args: ["aString"],
  10134. source: "setComment: aString\x0a\x09class comment: aString",
  10135. referencedClasses: [],
  10136. //>>excludeEnd("ide");
  10137. messageSends: ["comment:"]
  10138. }),
  10139. $globals.ClassCommentReader);
  10140. $core.addClass('ClassSorterNode', $globals.Object, ['theClass', 'level', 'nodes'], 'Kernel-Classes');
  10141. //>>excludeStart("ide", pragmas.excludeIdeData);
  10142. $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.";
  10143. //>>excludeEnd("ide");
  10144. $core.addMethod(
  10145. $core.method({
  10146. selector: "getNodesFrom:",
  10147. protocol: 'accessing',
  10148. fn: function (aCollection){
  10149. var self=this;
  10150. var children,others;
  10151. function $ClassSorterNode(){return $globals.ClassSorterNode||(typeof ClassSorterNode=="undefined"?nil:ClassSorterNode)}
  10152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10153. return $core.withContext(function($ctx1) {
  10154. //>>excludeEnd("ctx");
  10155. var $1;
  10156. children=[];
  10157. others=[];
  10158. $recv(aCollection)._do_((function(each){
  10159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10160. return $core.withContext(function($ctx2) {
  10161. //>>excludeEnd("ctx");
  10162. $1=$recv($recv(each)._superclass()).__eq(self._theClass());
  10163. if($core.assert($1)){
  10164. return $recv(children)._add_(each);
  10165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10166. $ctx2.sendIdx["add:"]=1;
  10167. //>>excludeEnd("ctx");
  10168. } else {
  10169. return $recv(others)._add_(each);
  10170. };
  10171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10172. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  10173. //>>excludeEnd("ctx");
  10174. }));
  10175. self["@nodes"]=$recv(children)._collect_((function(each){
  10176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10177. return $core.withContext(function($ctx2) {
  10178. //>>excludeEnd("ctx");
  10179. return $recv($ClassSorterNode())._on_classes_level_(each,others,$recv(self._level()).__plus((1)));
  10180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10181. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  10182. //>>excludeEnd("ctx");
  10183. }));
  10184. return self;
  10185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10186. }, function($ctx1) {$ctx1.fill(self,"getNodesFrom:",{aCollection:aCollection,children:children,others:others},$globals.ClassSorterNode)});
  10187. //>>excludeEnd("ctx");
  10188. },
  10189. //>>excludeStart("ide", pragmas.excludeIdeData);
  10190. args: ["aCollection"],
  10191. 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 ]",
  10192. referencedClasses: ["ClassSorterNode"],
  10193. //>>excludeEnd("ide");
  10194. messageSends: ["do:", "ifTrue:ifFalse:", "=", "superclass", "theClass", "add:", "collect:", "on:classes:level:", "+", "level"]
  10195. }),
  10196. $globals.ClassSorterNode);
  10197. $core.addMethod(
  10198. $core.method({
  10199. selector: "level",
  10200. protocol: 'accessing',
  10201. fn: function (){
  10202. var self=this;
  10203. var $1;
  10204. $1=self["@level"];
  10205. return $1;
  10206. },
  10207. //>>excludeStart("ide", pragmas.excludeIdeData);
  10208. args: [],
  10209. source: "level\x0a\x09^ level",
  10210. referencedClasses: [],
  10211. //>>excludeEnd("ide");
  10212. messageSends: []
  10213. }),
  10214. $globals.ClassSorterNode);
  10215. $core.addMethod(
  10216. $core.method({
  10217. selector: "level:",
  10218. protocol: 'accessing',
  10219. fn: function (anInteger){
  10220. var self=this;
  10221. self["@level"]=anInteger;
  10222. return self;
  10223. },
  10224. //>>excludeStart("ide", pragmas.excludeIdeData);
  10225. args: ["anInteger"],
  10226. source: "level: anInteger\x0a\x09level := anInteger",
  10227. referencedClasses: [],
  10228. //>>excludeEnd("ide");
  10229. messageSends: []
  10230. }),
  10231. $globals.ClassSorterNode);
  10232. $core.addMethod(
  10233. $core.method({
  10234. selector: "nodes",
  10235. protocol: 'accessing',
  10236. fn: function (){
  10237. var self=this;
  10238. var $1;
  10239. $1=self["@nodes"];
  10240. return $1;
  10241. },
  10242. //>>excludeStart("ide", pragmas.excludeIdeData);
  10243. args: [],
  10244. source: "nodes\x0a\x09^ nodes",
  10245. referencedClasses: [],
  10246. //>>excludeEnd("ide");
  10247. messageSends: []
  10248. }),
  10249. $globals.ClassSorterNode);
  10250. $core.addMethod(
  10251. $core.method({
  10252. selector: "theClass",
  10253. protocol: 'accessing',
  10254. fn: function (){
  10255. var self=this;
  10256. var $1;
  10257. $1=self["@theClass"];
  10258. return $1;
  10259. },
  10260. //>>excludeStart("ide", pragmas.excludeIdeData);
  10261. args: [],
  10262. source: "theClass\x0a\x09^ theClass",
  10263. referencedClasses: [],
  10264. //>>excludeEnd("ide");
  10265. messageSends: []
  10266. }),
  10267. $globals.ClassSorterNode);
  10268. $core.addMethod(
  10269. $core.method({
  10270. selector: "theClass:",
  10271. protocol: 'accessing',
  10272. fn: function (aClass){
  10273. var self=this;
  10274. self["@theClass"]=aClass;
  10275. return self;
  10276. },
  10277. //>>excludeStart("ide", pragmas.excludeIdeData);
  10278. args: ["aClass"],
  10279. source: "theClass: aClass\x0a\x09theClass := aClass",
  10280. referencedClasses: [],
  10281. //>>excludeEnd("ide");
  10282. messageSends: []
  10283. }),
  10284. $globals.ClassSorterNode);
  10285. $core.addMethod(
  10286. $core.method({
  10287. selector: "traverseClassesWith:",
  10288. protocol: 'visiting',
  10289. fn: function (aCollection){
  10290. var self=this;
  10291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10292. return $core.withContext(function($ctx1) {
  10293. //>>excludeEnd("ctx");
  10294. var $1,$3,$2;
  10295. $1=self._theClass();
  10296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10297. $ctx1.sendIdx["theClass"]=1;
  10298. //>>excludeEnd("ctx");
  10299. $recv(aCollection)._add_($1);
  10300. $recv($recv(self._nodes())._sorted_((function(a,b){
  10301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10302. return $core.withContext(function($ctx2) {
  10303. //>>excludeEnd("ctx");
  10304. $3=$recv(a)._theClass();
  10305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10306. $ctx2.sendIdx["theClass"]=2;
  10307. //>>excludeEnd("ctx");
  10308. $2=$recv($3)._name();
  10309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10310. $ctx2.sendIdx["name"]=1;
  10311. //>>excludeEnd("ctx");
  10312. return $recv($2).__lt_eq($recv($recv(b)._theClass())._name());
  10313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10314. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  10315. //>>excludeEnd("ctx");
  10316. })))._do_((function(aNode){
  10317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10318. return $core.withContext(function($ctx2) {
  10319. //>>excludeEnd("ctx");
  10320. return $recv(aNode)._traverseClassesWith_(aCollection);
  10321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10322. }, function($ctx2) {$ctx2.fillBlock({aNode:aNode},$ctx1,2)});
  10323. //>>excludeEnd("ctx");
  10324. }));
  10325. return self;
  10326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10327. }, function($ctx1) {$ctx1.fill(self,"traverseClassesWith:",{aCollection:aCollection},$globals.ClassSorterNode)});
  10328. //>>excludeEnd("ctx");
  10329. },
  10330. //>>excludeStart("ide", pragmas.excludeIdeData);
  10331. args: ["aCollection"],
  10332. 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 ].",
  10333. referencedClasses: [],
  10334. //>>excludeEnd("ide");
  10335. messageSends: ["add:", "theClass", "do:", "sorted:", "nodes", "<=", "name", "traverseClassesWith:"]
  10336. }),
  10337. $globals.ClassSorterNode);
  10338. $core.addMethod(
  10339. $core.method({
  10340. selector: "on:classes:level:",
  10341. protocol: 'instance creation',
  10342. fn: function (aClass,aCollection,anInteger){
  10343. var self=this;
  10344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10345. return $core.withContext(function($ctx1) {
  10346. //>>excludeEnd("ctx");
  10347. var $2,$3,$1;
  10348. $2=self._new();
  10349. $recv($2)._theClass_(aClass);
  10350. $recv($2)._level_(anInteger);
  10351. $recv($2)._getNodesFrom_(aCollection);
  10352. $3=$recv($2)._yourself();
  10353. $1=$3;
  10354. return $1;
  10355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10356. }, function($ctx1) {$ctx1.fill(self,"on:classes:level:",{aClass:aClass,aCollection:aCollection,anInteger:anInteger},$globals.ClassSorterNode.klass)});
  10357. //>>excludeEnd("ctx");
  10358. },
  10359. //>>excludeStart("ide", pragmas.excludeIdeData);
  10360. args: ["aClass", "aCollection", "anInteger"],
  10361. 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",
  10362. referencedClasses: [],
  10363. //>>excludeEnd("ide");
  10364. messageSends: ["theClass:", "new", "level:", "getNodesFrom:", "yourself"]
  10365. }),
  10366. $globals.ClassSorterNode.klass);
  10367. });
  10368. define("amber_core/Kernel-Methods", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  10369. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  10370. $core.addPackage('Kernel-Methods');
  10371. $core.packages["Kernel-Methods"].innerEval = function (expr) { return eval(expr); };
  10372. $core.packages["Kernel-Methods"].transport = {"type":"amd","amdNamespace":"amber_core"};
  10373. $core.addClass('BlockClosure', $globals.Object, [], 'Kernel-Methods');
  10374. //>>excludeStart("ide", pragmas.excludeIdeData);
  10375. $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 | ... ] `";
  10376. //>>excludeEnd("ide");
  10377. $core.addMethod(
  10378. $core.method({
  10379. selector: "applyTo:arguments:",
  10380. protocol: 'evaluating',
  10381. fn: function (anObject,aCollection){
  10382. var self=this;
  10383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10384. return $core.withContext(function($ctx1) {
  10385. //>>excludeEnd("ctx");
  10386. return self.apply(anObject, aCollection);
  10387. return self;
  10388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10389. }, function($ctx1) {$ctx1.fill(self,"applyTo:arguments:",{anObject:anObject,aCollection:aCollection},$globals.BlockClosure)});
  10390. //>>excludeEnd("ctx");
  10391. },
  10392. //>>excludeStart("ide", pragmas.excludeIdeData);
  10393. args: ["anObject", "aCollection"],
  10394. source: "applyTo: anObject arguments: aCollection\x0a\x09<return self.apply(anObject, aCollection)>",
  10395. referencedClasses: [],
  10396. //>>excludeEnd("ide");
  10397. messageSends: []
  10398. }),
  10399. $globals.BlockClosure);
  10400. $core.addMethod(
  10401. $core.method({
  10402. selector: "asCompiledMethod:",
  10403. protocol: 'converting',
  10404. fn: function (aString){
  10405. var self=this;
  10406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10407. return $core.withContext(function($ctx1) {
  10408. //>>excludeEnd("ctx");
  10409. return $core.method({selector:aString, fn:self});;
  10410. return self;
  10411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10412. }, function($ctx1) {$ctx1.fill(self,"asCompiledMethod:",{aString:aString},$globals.BlockClosure)});
  10413. //>>excludeEnd("ctx");
  10414. },
  10415. //>>excludeStart("ide", pragmas.excludeIdeData);
  10416. args: ["aString"],
  10417. source: "asCompiledMethod: aString\x0a\x09<return $core.method({selector:aString, fn:self});>",
  10418. referencedClasses: [],
  10419. //>>excludeEnd("ide");
  10420. messageSends: []
  10421. }),
  10422. $globals.BlockClosure);
  10423. $core.addMethod(
  10424. $core.method({
  10425. selector: "compiledSource",
  10426. protocol: 'accessing',
  10427. fn: function (){
  10428. var self=this;
  10429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10430. return $core.withContext(function($ctx1) {
  10431. //>>excludeEnd("ctx");
  10432. return self.toString();
  10433. return self;
  10434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10435. }, function($ctx1) {$ctx1.fill(self,"compiledSource",{},$globals.BlockClosure)});
  10436. //>>excludeEnd("ctx");
  10437. },
  10438. //>>excludeStart("ide", pragmas.excludeIdeData);
  10439. args: [],
  10440. source: "compiledSource\x0a\x09<return self.toString()>",
  10441. referencedClasses: [],
  10442. //>>excludeEnd("ide");
  10443. messageSends: []
  10444. }),
  10445. $globals.BlockClosure);
  10446. $core.addMethod(
  10447. $core.method({
  10448. selector: "currySelf",
  10449. protocol: 'converting',
  10450. fn: function (){
  10451. var self=this;
  10452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10453. return $core.withContext(function($ctx1) {
  10454. //>>excludeEnd("ctx");
  10455. return function () {
  10456. var args = [ this ];
  10457. args.push.apply(args, arguments);
  10458. return self.apply(null, args);
  10459. }
  10460. ;
  10461. return self;
  10462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10463. }, function($ctx1) {$ctx1.fill(self,"currySelf",{},$globals.BlockClosure)});
  10464. //>>excludeEnd("ctx");
  10465. },
  10466. //>>excludeStart("ide", pragmas.excludeIdeData);
  10467. args: [],
  10468. 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>",
  10469. referencedClasses: [],
  10470. //>>excludeEnd("ide");
  10471. messageSends: []
  10472. }),
  10473. $globals.BlockClosure);
  10474. $core.addMethod(
  10475. $core.method({
  10476. selector: "ensure:",
  10477. protocol: 'evaluating',
  10478. fn: function (aBlock){
  10479. var self=this;
  10480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10481. return $core.withContext(function($ctx1) {
  10482. //>>excludeEnd("ctx");
  10483. try{return self._value()}finally{aBlock._value()};
  10484. return self;
  10485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10486. }, function($ctx1) {$ctx1.fill(self,"ensure:",{aBlock:aBlock},$globals.BlockClosure)});
  10487. //>>excludeEnd("ctx");
  10488. },
  10489. //>>excludeStart("ide", pragmas.excludeIdeData);
  10490. args: ["aBlock"],
  10491. source: "ensure: aBlock\x0a\x09<try{return self._value()}finally{aBlock._value()}>",
  10492. referencedClasses: [],
  10493. //>>excludeEnd("ide");
  10494. messageSends: []
  10495. }),
  10496. $globals.BlockClosure);
  10497. $core.addMethod(
  10498. $core.method({
  10499. selector: "fork",
  10500. protocol: 'timeout/interval',
  10501. fn: function (){
  10502. var self=this;
  10503. function $ForkPool(){return $globals.ForkPool||(typeof ForkPool=="undefined"?nil:ForkPool)}
  10504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10505. return $core.withContext(function($ctx1) {
  10506. //>>excludeEnd("ctx");
  10507. $recv($recv($ForkPool())._default())._fork_(self);
  10508. return self;
  10509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10510. }, function($ctx1) {$ctx1.fill(self,"fork",{},$globals.BlockClosure)});
  10511. //>>excludeEnd("ctx");
  10512. },
  10513. //>>excludeStart("ide", pragmas.excludeIdeData);
  10514. args: [],
  10515. source: "fork\x0a\x09ForkPool default fork: self",
  10516. referencedClasses: ["ForkPool"],
  10517. //>>excludeEnd("ide");
  10518. messageSends: ["fork:", "default"]
  10519. }),
  10520. $globals.BlockClosure);
  10521. $core.addMethod(
  10522. $core.method({
  10523. selector: "new",
  10524. protocol: 'evaluating',
  10525. fn: function (){
  10526. var self=this;
  10527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10528. return $core.withContext(function($ctx1) {
  10529. //>>excludeEnd("ctx");
  10530. return new self();
  10531. return self;
  10532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10533. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.BlockClosure)});
  10534. //>>excludeEnd("ctx");
  10535. },
  10536. //>>excludeStart("ide", pragmas.excludeIdeData);
  10537. args: [],
  10538. 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()>",
  10539. referencedClasses: [],
  10540. //>>excludeEnd("ide");
  10541. messageSends: []
  10542. }),
  10543. $globals.BlockClosure);
  10544. $core.addMethod(
  10545. $core.method({
  10546. selector: "newValue:",
  10547. protocol: 'evaluating',
  10548. fn: function (anObject){
  10549. var self=this;
  10550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10551. return $core.withContext(function($ctx1) {
  10552. //>>excludeEnd("ctx");
  10553. var $1;
  10554. $1=self._newWithValues_([anObject]);
  10555. return $1;
  10556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10557. }, function($ctx1) {$ctx1.fill(self,"newValue:",{anObject:anObject},$globals.BlockClosure)});
  10558. //>>excludeEnd("ctx");
  10559. },
  10560. //>>excludeStart("ide", pragmas.excludeIdeData);
  10561. args: ["anObject"],
  10562. source: "newValue: anObject\x0a\x09^ self newWithValues: { anObject }",
  10563. referencedClasses: [],
  10564. //>>excludeEnd("ide");
  10565. messageSends: ["newWithValues:"]
  10566. }),
  10567. $globals.BlockClosure);
  10568. $core.addMethod(
  10569. $core.method({
  10570. selector: "newValue:value:",
  10571. protocol: 'evaluating',
  10572. fn: function (anObject,anObject2){
  10573. var self=this;
  10574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10575. return $core.withContext(function($ctx1) {
  10576. //>>excludeEnd("ctx");
  10577. var $1;
  10578. $1=self._newWithValues_([anObject,anObject2]);
  10579. return $1;
  10580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10581. }, function($ctx1) {$ctx1.fill(self,"newValue:value:",{anObject:anObject,anObject2:anObject2},$globals.BlockClosure)});
  10582. //>>excludeEnd("ctx");
  10583. },
  10584. //>>excludeStart("ide", pragmas.excludeIdeData);
  10585. args: ["anObject", "anObject2"],
  10586. source: "newValue: anObject value: anObject2\x0a\x09^ self newWithValues: { anObject. anObject2 }.",
  10587. referencedClasses: [],
  10588. //>>excludeEnd("ide");
  10589. messageSends: ["newWithValues:"]
  10590. }),
  10591. $globals.BlockClosure);
  10592. $core.addMethod(
  10593. $core.method({
  10594. selector: "newValue:value:value:",
  10595. protocol: 'evaluating',
  10596. fn: function (anObject,anObject2,anObject3){
  10597. var self=this;
  10598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10599. return $core.withContext(function($ctx1) {
  10600. //>>excludeEnd("ctx");
  10601. var $1;
  10602. $1=self._newWithValues_([anObject,anObject2,anObject3]);
  10603. return $1;
  10604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10605. }, function($ctx1) {$ctx1.fill(self,"newValue:value:value:",{anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.BlockClosure)});
  10606. //>>excludeEnd("ctx");
  10607. },
  10608. //>>excludeStart("ide", pragmas.excludeIdeData);
  10609. args: ["anObject", "anObject2", "anObject3"],
  10610. source: "newValue: anObject value: anObject2 value: anObject3\x0a\x09^ self newWithValues: { anObject. anObject2. anObject3 }.",
  10611. referencedClasses: [],
  10612. //>>excludeEnd("ide");
  10613. messageSends: ["newWithValues:"]
  10614. }),
  10615. $globals.BlockClosure);
  10616. $core.addMethod(
  10617. $core.method({
  10618. selector: "newWithValues:",
  10619. protocol: 'evaluating',
  10620. fn: function (aCollection){
  10621. var self=this;
  10622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10623. return $core.withContext(function($ctx1) {
  10624. //>>excludeEnd("ctx");
  10625. var object = Object.create(self.prototype);
  10626. var result = self.apply(object, aCollection);
  10627. return typeof result === "object" ? result : object;
  10628. ;
  10629. return self;
  10630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10631. }, function($ctx1) {$ctx1.fill(self,"newWithValues:",{aCollection:aCollection},$globals.BlockClosure)});
  10632. //>>excludeEnd("ctx");
  10633. },
  10634. //>>excludeStart("ide", pragmas.excludeIdeData);
  10635. args: ["aCollection"],
  10636. 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>",
  10637. referencedClasses: [],
  10638. //>>excludeEnd("ide");
  10639. messageSends: []
  10640. }),
  10641. $globals.BlockClosure);
  10642. $core.addMethod(
  10643. $core.method({
  10644. selector: "numArgs",
  10645. protocol: 'accessing',
  10646. fn: function (){
  10647. var self=this;
  10648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10649. return $core.withContext(function($ctx1) {
  10650. //>>excludeEnd("ctx");
  10651. return self.length;
  10652. return self;
  10653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10654. }, function($ctx1) {$ctx1.fill(self,"numArgs",{},$globals.BlockClosure)});
  10655. //>>excludeEnd("ctx");
  10656. },
  10657. //>>excludeStart("ide", pragmas.excludeIdeData);
  10658. args: [],
  10659. source: "numArgs\x0a\x09<return self.length>",
  10660. referencedClasses: [],
  10661. //>>excludeEnd("ide");
  10662. messageSends: []
  10663. }),
  10664. $globals.BlockClosure);
  10665. $core.addMethod(
  10666. $core.method({
  10667. selector: "on:do:",
  10668. protocol: 'error handling',
  10669. fn: function (anErrorClass,aBlock){
  10670. var self=this;
  10671. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  10672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10673. return $core.withContext(function($ctx1) {
  10674. //>>excludeEnd("ctx");
  10675. var $2,$1;
  10676. $1=self._tryCatch_((function(error){
  10677. var smalltalkError;
  10678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10679. return $core.withContext(function($ctx2) {
  10680. //>>excludeEnd("ctx");
  10681. smalltalkError=$recv($Smalltalk())._asSmalltalkException_(error);
  10682. smalltalkError;
  10683. $2=$recv(smalltalkError)._isKindOf_(anErrorClass);
  10684. if($core.assert($2)){
  10685. return $recv(aBlock)._value_(smalltalkError);
  10686. } else {
  10687. return $recv(smalltalkError)._resignal();
  10688. };
  10689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10690. }, function($ctx2) {$ctx2.fillBlock({error:error,smalltalkError:smalltalkError},$ctx1,1)});
  10691. //>>excludeEnd("ctx");
  10692. }));
  10693. return $1;
  10694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10695. }, function($ctx1) {$ctx1.fill(self,"on:do:",{anErrorClass:anErrorClass,aBlock:aBlock},$globals.BlockClosure)});
  10696. //>>excludeEnd("ctx");
  10697. },
  10698. //>>excludeStart("ide", pragmas.excludeIdeData);
  10699. args: ["anErrorClass", "aBlock"],
  10700. 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 ] ]",
  10701. referencedClasses: ["Smalltalk"],
  10702. //>>excludeEnd("ide");
  10703. messageSends: ["tryCatch:", "asSmalltalkException:", "ifTrue:ifFalse:", "isKindOf:", "value:", "resignal"]
  10704. }),
  10705. $globals.BlockClosure);
  10706. $core.addMethod(
  10707. $core.method({
  10708. selector: "receiver",
  10709. protocol: 'accessing',
  10710. fn: function (){
  10711. var self=this;
  10712. return nil;
  10713. },
  10714. //>>excludeStart("ide", pragmas.excludeIdeData);
  10715. args: [],
  10716. source: "receiver\x0a\x09^ nil",
  10717. referencedClasses: [],
  10718. //>>excludeEnd("ide");
  10719. messageSends: []
  10720. }),
  10721. $globals.BlockClosure);
  10722. $core.addMethod(
  10723. $core.method({
  10724. selector: "timeToRun",
  10725. protocol: 'evaluating',
  10726. fn: function (){
  10727. var self=this;
  10728. function $Date(){return $globals.Date||(typeof Date=="undefined"?nil:Date)}
  10729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10730. return $core.withContext(function($ctx1) {
  10731. //>>excludeEnd("ctx");
  10732. var $1;
  10733. $1=$recv($Date())._millisecondsToRun_(self);
  10734. return $1;
  10735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10736. }, function($ctx1) {$ctx1.fill(self,"timeToRun",{},$globals.BlockClosure)});
  10737. //>>excludeEnd("ctx");
  10738. },
  10739. //>>excludeStart("ide", pragmas.excludeIdeData);
  10740. args: [],
  10741. source: "timeToRun\x0a\x09\x22Answer the number of milliseconds taken to execute this block.\x22\x0a\x0a\x09^ Date millisecondsToRun: self",
  10742. referencedClasses: ["Date"],
  10743. //>>excludeEnd("ide");
  10744. messageSends: ["millisecondsToRun:"]
  10745. }),
  10746. $globals.BlockClosure);
  10747. $core.addMethod(
  10748. $core.method({
  10749. selector: "tryCatch:",
  10750. protocol: 'error handling',
  10751. fn: function (aBlock){
  10752. var self=this;
  10753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10754. return $core.withContext(function($ctx1) {
  10755. //>>excludeEnd("ctx");
  10756. try {
  10757. return self._value();
  10758. } catch(error) {
  10759. // pass non-local returns undetected
  10760. if (Array.isArray(error) && error.length === 1) throw error;
  10761. return aBlock._value_(error);
  10762. }
  10763. ;
  10764. return self;
  10765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10766. }, function($ctx1) {$ctx1.fill(self,"tryCatch:",{aBlock:aBlock},$globals.BlockClosure)});
  10767. //>>excludeEnd("ctx");
  10768. },
  10769. //>>excludeStart("ide", pragmas.excludeIdeData);
  10770. args: ["aBlock"],
  10771. source: "tryCatch: aBlock\x0a\x09<\x0a\x09\x09try {\x0a\x09\x09\x09return self._value();\x0a\x09\x09} catch(error) {\x0a\x09\x09\x09// pass non-local returns undetected\x0a\x09\x09\x09if (Array.isArray(error) && error.length === 1) throw error;\x0a\x09\x09\x09return aBlock._value_(error);\x0a\x09\x09}\x0a\x09>",
  10772. referencedClasses: [],
  10773. //>>excludeEnd("ide");
  10774. messageSends: []
  10775. }),
  10776. $globals.BlockClosure);
  10777. $core.addMethod(
  10778. $core.method({
  10779. selector: "value",
  10780. protocol: 'evaluating',
  10781. fn: function (){
  10782. var self=this;
  10783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10784. return $core.withContext(function($ctx1) {
  10785. //>>excludeEnd("ctx");
  10786. return self();;
  10787. return self;
  10788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10789. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.BlockClosure)});
  10790. //>>excludeEnd("ctx");
  10791. },
  10792. //>>excludeStart("ide", pragmas.excludeIdeData);
  10793. args: [],
  10794. source: "value\x0a\x09<return self();>",
  10795. referencedClasses: [],
  10796. //>>excludeEnd("ide");
  10797. messageSends: []
  10798. }),
  10799. $globals.BlockClosure);
  10800. $core.addMethod(
  10801. $core.method({
  10802. selector: "value:",
  10803. protocol: 'evaluating',
  10804. fn: function (anArg){
  10805. var self=this;
  10806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10807. return $core.withContext(function($ctx1) {
  10808. //>>excludeEnd("ctx");
  10809. return self(anArg);;
  10810. return self;
  10811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10812. }, function($ctx1) {$ctx1.fill(self,"value:",{anArg:anArg},$globals.BlockClosure)});
  10813. //>>excludeEnd("ctx");
  10814. },
  10815. //>>excludeStart("ide", pragmas.excludeIdeData);
  10816. args: ["anArg"],
  10817. source: "value: anArg\x0a\x09<return self(anArg);>",
  10818. referencedClasses: [],
  10819. //>>excludeEnd("ide");
  10820. messageSends: []
  10821. }),
  10822. $globals.BlockClosure);
  10823. $core.addMethod(
  10824. $core.method({
  10825. selector: "value:value:",
  10826. protocol: 'evaluating',
  10827. fn: function (firstArg,secondArg){
  10828. var self=this;
  10829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10830. return $core.withContext(function($ctx1) {
  10831. //>>excludeEnd("ctx");
  10832. return self(firstArg, secondArg);;
  10833. return self;
  10834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10835. }, function($ctx1) {$ctx1.fill(self,"value:value:",{firstArg:firstArg,secondArg:secondArg},$globals.BlockClosure)});
  10836. //>>excludeEnd("ctx");
  10837. },
  10838. //>>excludeStart("ide", pragmas.excludeIdeData);
  10839. args: ["firstArg", "secondArg"],
  10840. source: "value: firstArg value: secondArg\x0a\x09<return self(firstArg, secondArg);>",
  10841. referencedClasses: [],
  10842. //>>excludeEnd("ide");
  10843. messageSends: []
  10844. }),
  10845. $globals.BlockClosure);
  10846. $core.addMethod(
  10847. $core.method({
  10848. selector: "value:value:value:",
  10849. protocol: 'evaluating',
  10850. fn: function (firstArg,secondArg,thirdArg){
  10851. var self=this;
  10852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10853. return $core.withContext(function($ctx1) {
  10854. //>>excludeEnd("ctx");
  10855. return self(firstArg, secondArg, thirdArg);;
  10856. return self;
  10857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10858. }, function($ctx1) {$ctx1.fill(self,"value:value:value:",{firstArg:firstArg,secondArg:secondArg,thirdArg:thirdArg},$globals.BlockClosure)});
  10859. //>>excludeEnd("ctx");
  10860. },
  10861. //>>excludeStart("ide", pragmas.excludeIdeData);
  10862. args: ["firstArg", "secondArg", "thirdArg"],
  10863. source: "value: firstArg value: secondArg value: thirdArg\x0a\x09<return self(firstArg, secondArg, thirdArg);>",
  10864. referencedClasses: [],
  10865. //>>excludeEnd("ide");
  10866. messageSends: []
  10867. }),
  10868. $globals.BlockClosure);
  10869. $core.addMethod(
  10870. $core.method({
  10871. selector: "valueWithInterval:",
  10872. protocol: 'timeout/interval',
  10873. fn: function (aNumber){
  10874. var self=this;
  10875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10876. return $core.withContext(function($ctx1) {
  10877. //>>excludeEnd("ctx");
  10878. var interval = setInterval(self, aNumber);
  10879. return $globals.Timeout._on_(interval);
  10880. ;
  10881. return self;
  10882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10883. }, function($ctx1) {$ctx1.fill(self,"valueWithInterval:",{aNumber:aNumber},$globals.BlockClosure)});
  10884. //>>excludeEnd("ctx");
  10885. },
  10886. //>>excludeStart("ide", pragmas.excludeIdeData);
  10887. args: ["aNumber"],
  10888. source: "valueWithInterval: aNumber\x0a\x09<\x0a\x09\x09var interval = setInterval(self, aNumber);\x0a\x09\x09return $globals.Timeout._on_(interval);\x0a\x09>",
  10889. referencedClasses: [],
  10890. //>>excludeEnd("ide");
  10891. messageSends: []
  10892. }),
  10893. $globals.BlockClosure);
  10894. $core.addMethod(
  10895. $core.method({
  10896. selector: "valueWithPossibleArguments:",
  10897. protocol: 'evaluating',
  10898. fn: function (aCollection){
  10899. var self=this;
  10900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10901. return $core.withContext(function($ctx1) {
  10902. //>>excludeEnd("ctx");
  10903. return self.apply(null, aCollection);;
  10904. return self;
  10905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10906. }, function($ctx1) {$ctx1.fill(self,"valueWithPossibleArguments:",{aCollection:aCollection},$globals.BlockClosure)});
  10907. //>>excludeEnd("ctx");
  10908. },
  10909. //>>excludeStart("ide", pragmas.excludeIdeData);
  10910. args: ["aCollection"],
  10911. source: "valueWithPossibleArguments: aCollection\x0a\x09<return self.apply(null, aCollection);>",
  10912. referencedClasses: [],
  10913. //>>excludeEnd("ide");
  10914. messageSends: []
  10915. }),
  10916. $globals.BlockClosure);
  10917. $core.addMethod(
  10918. $core.method({
  10919. selector: "valueWithTimeout:",
  10920. protocol: 'timeout/interval',
  10921. fn: function (aNumber){
  10922. var self=this;
  10923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10924. return $core.withContext(function($ctx1) {
  10925. //>>excludeEnd("ctx");
  10926. var timeout = setTimeout(self, aNumber);
  10927. return $globals.Timeout._on_(timeout);
  10928. ;
  10929. return self;
  10930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10931. }, function($ctx1) {$ctx1.fill(self,"valueWithTimeout:",{aNumber:aNumber},$globals.BlockClosure)});
  10932. //>>excludeEnd("ctx");
  10933. },
  10934. //>>excludeStart("ide", pragmas.excludeIdeData);
  10935. args: ["aNumber"],
  10936. source: "valueWithTimeout: aNumber\x0a\x09<\x0a\x09\x09var timeout = setTimeout(self, aNumber);\x0a\x09\x09return $globals.Timeout._on_(timeout);\x0a\x09>",
  10937. referencedClasses: [],
  10938. //>>excludeEnd("ide");
  10939. messageSends: []
  10940. }),
  10941. $globals.BlockClosure);
  10942. $core.addMethod(
  10943. $core.method({
  10944. selector: "whileFalse",
  10945. protocol: 'controlling',
  10946. fn: function (){
  10947. var self=this;
  10948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10949. return $core.withContext(function($ctx1) {
  10950. //>>excludeEnd("ctx");
  10951. self._whileFalse_((function(){
  10952. }));
  10953. return self;
  10954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10955. }, function($ctx1) {$ctx1.fill(self,"whileFalse",{},$globals.BlockClosure)});
  10956. //>>excludeEnd("ctx");
  10957. },
  10958. //>>excludeStart("ide", pragmas.excludeIdeData);
  10959. args: [],
  10960. source: "whileFalse\x0a\x09self whileFalse: []",
  10961. referencedClasses: [],
  10962. //>>excludeEnd("ide");
  10963. messageSends: ["whileFalse:"]
  10964. }),
  10965. $globals.BlockClosure);
  10966. $core.addMethod(
  10967. $core.method({
  10968. selector: "whileFalse:",
  10969. protocol: 'controlling',
  10970. fn: function (aBlock){
  10971. var self=this;
  10972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10973. return $core.withContext(function($ctx1) {
  10974. //>>excludeEnd("ctx");
  10975. while(!$core.assert(self._value())) {aBlock._value()};
  10976. return self;
  10977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10978. }, function($ctx1) {$ctx1.fill(self,"whileFalse:",{aBlock:aBlock},$globals.BlockClosure)});
  10979. //>>excludeEnd("ctx");
  10980. },
  10981. //>>excludeStart("ide", pragmas.excludeIdeData);
  10982. args: ["aBlock"],
  10983. source: "whileFalse: aBlock\x0a\x09<while(!$core.assert(self._value())) {aBlock._value()}>",
  10984. referencedClasses: [],
  10985. //>>excludeEnd("ide");
  10986. messageSends: []
  10987. }),
  10988. $globals.BlockClosure);
  10989. $core.addMethod(
  10990. $core.method({
  10991. selector: "whileTrue",
  10992. protocol: 'controlling',
  10993. fn: function (){
  10994. var self=this;
  10995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10996. return $core.withContext(function($ctx1) {
  10997. //>>excludeEnd("ctx");
  10998. self._whileTrue_((function(){
  10999. }));
  11000. return self;
  11001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11002. }, function($ctx1) {$ctx1.fill(self,"whileTrue",{},$globals.BlockClosure)});
  11003. //>>excludeEnd("ctx");
  11004. },
  11005. //>>excludeStart("ide", pragmas.excludeIdeData);
  11006. args: [],
  11007. source: "whileTrue\x0a\x09self whileTrue: []",
  11008. referencedClasses: [],
  11009. //>>excludeEnd("ide");
  11010. messageSends: ["whileTrue:"]
  11011. }),
  11012. $globals.BlockClosure);
  11013. $core.addMethod(
  11014. $core.method({
  11015. selector: "whileTrue:",
  11016. protocol: 'controlling',
  11017. fn: function (aBlock){
  11018. var self=this;
  11019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11020. return $core.withContext(function($ctx1) {
  11021. //>>excludeEnd("ctx");
  11022. while($core.assert(self._value())) {aBlock._value()};
  11023. return self;
  11024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11025. }, function($ctx1) {$ctx1.fill(self,"whileTrue:",{aBlock:aBlock},$globals.BlockClosure)});
  11026. //>>excludeEnd("ctx");
  11027. },
  11028. //>>excludeStart("ide", pragmas.excludeIdeData);
  11029. args: ["aBlock"],
  11030. source: "whileTrue: aBlock\x0a\x09<while($core.assert(self._value())) {aBlock._value()}>",
  11031. referencedClasses: [],
  11032. //>>excludeEnd("ide");
  11033. messageSends: []
  11034. }),
  11035. $globals.BlockClosure);
  11036. $core.addClass('CompiledMethod', $globals.Object, [], 'Kernel-Methods');
  11037. //>>excludeStart("ide", pragmas.excludeIdeData);
  11038. $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";
  11039. //>>excludeEnd("ide");
  11040. $core.addMethod(
  11041. $core.method({
  11042. selector: "arguments",
  11043. protocol: 'accessing',
  11044. fn: function (){
  11045. var self=this;
  11046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11047. return $core.withContext(function($ctx1) {
  11048. //>>excludeEnd("ctx");
  11049. return self.args || [];
  11050. return self;
  11051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11052. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.CompiledMethod)});
  11053. //>>excludeEnd("ctx");
  11054. },
  11055. //>>excludeStart("ide", pragmas.excludeIdeData);
  11056. args: [],
  11057. source: "arguments\x0a\x09<return self.args || []>",
  11058. referencedClasses: [],
  11059. //>>excludeEnd("ide");
  11060. messageSends: []
  11061. }),
  11062. $globals.CompiledMethod);
  11063. $core.addMethod(
  11064. $core.method({
  11065. selector: "browse",
  11066. protocol: 'browsing',
  11067. fn: function (){
  11068. var self=this;
  11069. function $Finder(){return $globals.Finder||(typeof Finder=="undefined"?nil:Finder)}
  11070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11071. return $core.withContext(function($ctx1) {
  11072. //>>excludeEnd("ctx");
  11073. $recv($Finder())._findMethod_(self);
  11074. return self;
  11075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11076. }, function($ctx1) {$ctx1.fill(self,"browse",{},$globals.CompiledMethod)});
  11077. //>>excludeEnd("ctx");
  11078. },
  11079. //>>excludeStart("ide", pragmas.excludeIdeData);
  11080. args: [],
  11081. source: "browse\x0a\x09Finder findMethod: self",
  11082. referencedClasses: ["Finder"],
  11083. //>>excludeEnd("ide");
  11084. messageSends: ["findMethod:"]
  11085. }),
  11086. $globals.CompiledMethod);
  11087. $core.addMethod(
  11088. $core.method({
  11089. selector: "category",
  11090. protocol: 'accessing',
  11091. fn: function (){
  11092. var self=this;
  11093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11094. return $core.withContext(function($ctx1) {
  11095. //>>excludeEnd("ctx");
  11096. var $1;
  11097. $1=self._protocol();
  11098. return $1;
  11099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11100. }, function($ctx1) {$ctx1.fill(self,"category",{},$globals.CompiledMethod)});
  11101. //>>excludeEnd("ctx");
  11102. },
  11103. //>>excludeStart("ide", pragmas.excludeIdeData);
  11104. args: [],
  11105. source: "category\x0a\x09^ self protocol",
  11106. referencedClasses: [],
  11107. //>>excludeEnd("ide");
  11108. messageSends: ["protocol"]
  11109. }),
  11110. $globals.CompiledMethod);
  11111. $core.addMethod(
  11112. $core.method({
  11113. selector: "defaultProtocol",
  11114. protocol: 'defaults',
  11115. fn: function (){
  11116. var self=this;
  11117. return "as yet unclassified";
  11118. },
  11119. //>>excludeStart("ide", pragmas.excludeIdeData);
  11120. args: [],
  11121. source: "defaultProtocol\x0a\x09^ 'as yet unclassified'",
  11122. referencedClasses: [],
  11123. //>>excludeEnd("ide");
  11124. messageSends: []
  11125. }),
  11126. $globals.CompiledMethod);
  11127. $core.addMethod(
  11128. $core.method({
  11129. selector: "fn",
  11130. protocol: 'accessing',
  11131. fn: function (){
  11132. var self=this;
  11133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11134. return $core.withContext(function($ctx1) {
  11135. //>>excludeEnd("ctx");
  11136. var $1;
  11137. $1=self._basicAt_("fn");
  11138. return $1;
  11139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11140. }, function($ctx1) {$ctx1.fill(self,"fn",{},$globals.CompiledMethod)});
  11141. //>>excludeEnd("ctx");
  11142. },
  11143. //>>excludeStart("ide", pragmas.excludeIdeData);
  11144. args: [],
  11145. source: "fn\x0a\x09^ self basicAt: 'fn'",
  11146. referencedClasses: [],
  11147. //>>excludeEnd("ide");
  11148. messageSends: ["basicAt:"]
  11149. }),
  11150. $globals.CompiledMethod);
  11151. $core.addMethod(
  11152. $core.method({
  11153. selector: "fn:",
  11154. protocol: 'accessing',
  11155. fn: function (aBlock){
  11156. var self=this;
  11157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11158. return $core.withContext(function($ctx1) {
  11159. //>>excludeEnd("ctx");
  11160. self._basicAt_put_("fn",aBlock);
  11161. return self;
  11162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11163. }, function($ctx1) {$ctx1.fill(self,"fn:",{aBlock:aBlock},$globals.CompiledMethod)});
  11164. //>>excludeEnd("ctx");
  11165. },
  11166. //>>excludeStart("ide", pragmas.excludeIdeData);
  11167. args: ["aBlock"],
  11168. source: "fn: aBlock\x0a\x09self basicAt: 'fn' put: aBlock",
  11169. referencedClasses: [],
  11170. //>>excludeEnd("ide");
  11171. messageSends: ["basicAt:put:"]
  11172. }),
  11173. $globals.CompiledMethod);
  11174. $core.addMethod(
  11175. $core.method({
  11176. selector: "isCompiledMethod",
  11177. protocol: 'testing',
  11178. fn: function (){
  11179. var self=this;
  11180. return true;
  11181. },
  11182. //>>excludeStart("ide", pragmas.excludeIdeData);
  11183. args: [],
  11184. source: "isCompiledMethod\x0a\x09^ true",
  11185. referencedClasses: [],
  11186. //>>excludeEnd("ide");
  11187. messageSends: []
  11188. }),
  11189. $globals.CompiledMethod);
  11190. $core.addMethod(
  11191. $core.method({
  11192. selector: "isOverridden",
  11193. protocol: 'testing',
  11194. fn: function (){
  11195. var self=this;
  11196. var selector;
  11197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11198. return $core.withContext(function($ctx1) {
  11199. //>>excludeEnd("ctx");
  11200. var $1;
  11201. var $early={};
  11202. try {
  11203. selector=self._selector();
  11204. $recv(self._methodClass())._allSubclassesDo_((function(each){
  11205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11206. return $core.withContext(function($ctx2) {
  11207. //>>excludeEnd("ctx");
  11208. $1=$recv(each)._includesSelector_(selector);
  11209. if($core.assert($1)){
  11210. throw $early=[true];
  11211. };
  11212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11213. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  11214. //>>excludeEnd("ctx");
  11215. }));
  11216. return false;
  11217. }
  11218. catch(e) {if(e===$early)return e[0]; throw e}
  11219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11220. }, function($ctx1) {$ctx1.fill(self,"isOverridden",{selector:selector},$globals.CompiledMethod)});
  11221. //>>excludeEnd("ctx");
  11222. },
  11223. //>>excludeStart("ide", pragmas.excludeIdeData);
  11224. args: [],
  11225. 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",
  11226. referencedClasses: [],
  11227. //>>excludeEnd("ide");
  11228. messageSends: ["selector", "allSubclassesDo:", "methodClass", "ifTrue:", "includesSelector:"]
  11229. }),
  11230. $globals.CompiledMethod);
  11231. $core.addMethod(
  11232. $core.method({
  11233. selector: "isOverride",
  11234. protocol: 'testing',
  11235. fn: function (){
  11236. var self=this;
  11237. var superclass;
  11238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11239. return $core.withContext(function($ctx1) {
  11240. //>>excludeEnd("ctx");
  11241. var $1,$2,$3,$receiver;
  11242. $1=self._methodClass();
  11243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11244. $ctx1.sendIdx["methodClass"]=1;
  11245. //>>excludeEnd("ctx");
  11246. superclass=$recv($1)._superclass();
  11247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11248. $ctx1.sendIdx["superclass"]=1;
  11249. //>>excludeEnd("ctx");
  11250. $2=superclass;
  11251. if(($receiver = $2) == null || $receiver.isNil){
  11252. return false;
  11253. } else {
  11254. $2;
  11255. };
  11256. $3=$recv($recv($recv(self._methodClass())._superclass())._lookupSelector_(self._selector()))._notNil();
  11257. return $3;
  11258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11259. }, function($ctx1) {$ctx1.fill(self,"isOverride",{superclass:superclass},$globals.CompiledMethod)});
  11260. //>>excludeEnd("ctx");
  11261. },
  11262. //>>excludeStart("ide", pragmas.excludeIdeData);
  11263. args: [],
  11264. 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",
  11265. referencedClasses: [],
  11266. //>>excludeEnd("ide");
  11267. messageSends: ["superclass", "methodClass", "ifNil:", "notNil", "lookupSelector:", "selector"]
  11268. }),
  11269. $globals.CompiledMethod);
  11270. $core.addMethod(
  11271. $core.method({
  11272. selector: "messageSends",
  11273. protocol: 'accessing',
  11274. fn: function (){
  11275. var self=this;
  11276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11277. return $core.withContext(function($ctx1) {
  11278. //>>excludeEnd("ctx");
  11279. var $1;
  11280. $1=self._basicAt_("messageSends");
  11281. return $1;
  11282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11283. }, function($ctx1) {$ctx1.fill(self,"messageSends",{},$globals.CompiledMethod)});
  11284. //>>excludeEnd("ctx");
  11285. },
  11286. //>>excludeStart("ide", pragmas.excludeIdeData);
  11287. args: [],
  11288. source: "messageSends\x0a\x09^ self basicAt: 'messageSends'",
  11289. referencedClasses: [],
  11290. //>>excludeEnd("ide");
  11291. messageSends: ["basicAt:"]
  11292. }),
  11293. $globals.CompiledMethod);
  11294. $core.addMethod(
  11295. $core.method({
  11296. selector: "methodClass",
  11297. protocol: 'accessing',
  11298. fn: function (){
  11299. var self=this;
  11300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11301. return $core.withContext(function($ctx1) {
  11302. //>>excludeEnd("ctx");
  11303. var $1;
  11304. $1=self._basicAt_("methodClass");
  11305. return $1;
  11306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11307. }, function($ctx1) {$ctx1.fill(self,"methodClass",{},$globals.CompiledMethod)});
  11308. //>>excludeEnd("ctx");
  11309. },
  11310. //>>excludeStart("ide", pragmas.excludeIdeData);
  11311. args: [],
  11312. source: "methodClass\x0a\x09^ self basicAt: 'methodClass'",
  11313. referencedClasses: [],
  11314. //>>excludeEnd("ide");
  11315. messageSends: ["basicAt:"]
  11316. }),
  11317. $globals.CompiledMethod);
  11318. $core.addMethod(
  11319. $core.method({
  11320. selector: "package",
  11321. protocol: 'accessing',
  11322. fn: function (){
  11323. var self=this;
  11324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11325. return $core.withContext(function($ctx1) {
  11326. //>>excludeEnd("ctx");
  11327. var $2,$1,$receiver;
  11328. $2=self._methodClass();
  11329. if(($receiver = $2) == null || $receiver.isNil){
  11330. $1=$2;
  11331. } else {
  11332. var class_;
  11333. class_=$receiver;
  11334. $1=$recv(class_)._packageOfProtocol_(self._protocol());
  11335. };
  11336. return $1;
  11337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11338. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.CompiledMethod)});
  11339. //>>excludeEnd("ctx");
  11340. },
  11341. //>>excludeStart("ide", pragmas.excludeIdeData);
  11342. args: [],
  11343. 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\x09^ self methodClass ifNotNil: [ :class | class packageOfProtocol: self protocol ]",
  11344. referencedClasses: [],
  11345. //>>excludeEnd("ide");
  11346. messageSends: ["ifNotNil:", "methodClass", "packageOfProtocol:", "protocol"]
  11347. }),
  11348. $globals.CompiledMethod);
  11349. $core.addMethod(
  11350. $core.method({
  11351. selector: "protocol",
  11352. protocol: 'accessing',
  11353. fn: function (){
  11354. var self=this;
  11355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11356. return $core.withContext(function($ctx1) {
  11357. //>>excludeEnd("ctx");
  11358. var $2,$1,$receiver;
  11359. $2=self._basicAt_("protocol");
  11360. if(($receiver = $2) == null || $receiver.isNil){
  11361. $1=self._defaultProtocol();
  11362. } else {
  11363. $1=$2;
  11364. };
  11365. return $1;
  11366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11367. }, function($ctx1) {$ctx1.fill(self,"protocol",{},$globals.CompiledMethod)});
  11368. //>>excludeEnd("ctx");
  11369. },
  11370. //>>excludeStart("ide", pragmas.excludeIdeData);
  11371. args: [],
  11372. source: "protocol\x0a\x09^ (self basicAt: 'protocol') ifNil: [ self defaultProtocol ]",
  11373. referencedClasses: [],
  11374. //>>excludeEnd("ide");
  11375. messageSends: ["ifNil:", "basicAt:", "defaultProtocol"]
  11376. }),
  11377. $globals.CompiledMethod);
  11378. $core.addMethod(
  11379. $core.method({
  11380. selector: "protocol:",
  11381. protocol: 'accessing',
  11382. fn: function (aString){
  11383. var self=this;
  11384. var oldProtocol;
  11385. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  11386. function $MethodMoved(){return $globals.MethodMoved||(typeof MethodMoved=="undefined"?nil:MethodMoved)}
  11387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11388. return $core.withContext(function($ctx1) {
  11389. //>>excludeEnd("ctx");
  11390. var $1,$2,$3,$receiver;
  11391. oldProtocol=self._protocol();
  11392. self._basicAt_put_("protocol",aString);
  11393. $1=$recv($MethodMoved())._new();
  11394. $recv($1)._method_(self);
  11395. $recv($1)._oldProtocol_(oldProtocol);
  11396. $2=$recv($1)._yourself();
  11397. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  11398. $3=self._methodClass();
  11399. if(($receiver = $3) == null || $receiver.isNil){
  11400. $3;
  11401. } else {
  11402. var methodClass;
  11403. methodClass=$receiver;
  11404. $recv($recv(methodClass)._organization())._addElement_(aString);
  11405. $recv(methodClass)._removeProtocolIfEmpty_(oldProtocol);
  11406. };
  11407. return self;
  11408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11409. }, function($ctx1) {$ctx1.fill(self,"protocol:",{aString:aString,oldProtocol:oldProtocol},$globals.CompiledMethod)});
  11410. //>>excludeEnd("ctx");
  11411. },
  11412. //>>excludeStart("ide", pragmas.excludeIdeData);
  11413. args: ["aString"],
  11414. 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 ]",
  11415. referencedClasses: ["SystemAnnouncer", "MethodMoved"],
  11416. //>>excludeEnd("ide");
  11417. messageSends: ["protocol", "basicAt:put:", "announce:", "current", "method:", "new", "oldProtocol:", "yourself", "ifNotNil:", "methodClass", "addElement:", "organization", "removeProtocolIfEmpty:"]
  11418. }),
  11419. $globals.CompiledMethod);
  11420. $core.addMethod(
  11421. $core.method({
  11422. selector: "referencedClasses",
  11423. protocol: 'accessing',
  11424. fn: function (){
  11425. var self=this;
  11426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11427. return $core.withContext(function($ctx1) {
  11428. //>>excludeEnd("ctx");
  11429. var $1;
  11430. $1=self._basicAt_("referencedClasses");
  11431. return $1;
  11432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11433. }, function($ctx1) {$ctx1.fill(self,"referencedClasses",{},$globals.CompiledMethod)});
  11434. //>>excludeEnd("ctx");
  11435. },
  11436. //>>excludeStart("ide", pragmas.excludeIdeData);
  11437. args: [],
  11438. source: "referencedClasses\x0a\x09^ self basicAt: 'referencedClasses'",
  11439. referencedClasses: [],
  11440. //>>excludeEnd("ide");
  11441. messageSends: ["basicAt:"]
  11442. }),
  11443. $globals.CompiledMethod);
  11444. $core.addMethod(
  11445. $core.method({
  11446. selector: "selector",
  11447. protocol: 'accessing',
  11448. fn: function (){
  11449. var self=this;
  11450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11451. return $core.withContext(function($ctx1) {
  11452. //>>excludeEnd("ctx");
  11453. var $1;
  11454. $1=self._basicAt_("selector");
  11455. return $1;
  11456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11457. }, function($ctx1) {$ctx1.fill(self,"selector",{},$globals.CompiledMethod)});
  11458. //>>excludeEnd("ctx");
  11459. },
  11460. //>>excludeStart("ide", pragmas.excludeIdeData);
  11461. args: [],
  11462. source: "selector\x0a\x09^ self basicAt: 'selector'",
  11463. referencedClasses: [],
  11464. //>>excludeEnd("ide");
  11465. messageSends: ["basicAt:"]
  11466. }),
  11467. $globals.CompiledMethod);
  11468. $core.addMethod(
  11469. $core.method({
  11470. selector: "selector:",
  11471. protocol: 'accessing',
  11472. fn: function (aString){
  11473. var self=this;
  11474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11475. return $core.withContext(function($ctx1) {
  11476. //>>excludeEnd("ctx");
  11477. self._basicAt_put_("selector",aString);
  11478. return self;
  11479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11480. }, function($ctx1) {$ctx1.fill(self,"selector:",{aString:aString},$globals.CompiledMethod)});
  11481. //>>excludeEnd("ctx");
  11482. },
  11483. //>>excludeStart("ide", pragmas.excludeIdeData);
  11484. args: ["aString"],
  11485. source: "selector: aString\x0a\x09self basicAt: 'selector' put: aString",
  11486. referencedClasses: [],
  11487. //>>excludeEnd("ide");
  11488. messageSends: ["basicAt:put:"]
  11489. }),
  11490. $globals.CompiledMethod);
  11491. $core.addMethod(
  11492. $core.method({
  11493. selector: "sendTo:arguments:",
  11494. protocol: 'evaluating',
  11495. fn: function (anObject,aCollection){
  11496. var self=this;
  11497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11498. return $core.withContext(function($ctx1) {
  11499. //>>excludeEnd("ctx");
  11500. var $1;
  11501. $1=$recv(self._fn())._applyTo_arguments_(anObject,aCollection);
  11502. return $1;
  11503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11504. }, function($ctx1) {$ctx1.fill(self,"sendTo:arguments:",{anObject:anObject,aCollection:aCollection},$globals.CompiledMethod)});
  11505. //>>excludeEnd("ctx");
  11506. },
  11507. //>>excludeStart("ide", pragmas.excludeIdeData);
  11508. args: ["anObject", "aCollection"],
  11509. source: "sendTo: anObject arguments: aCollection\x0a\x09^ self fn applyTo: anObject arguments: aCollection",
  11510. referencedClasses: [],
  11511. //>>excludeEnd("ide");
  11512. messageSends: ["applyTo:arguments:", "fn"]
  11513. }),
  11514. $globals.CompiledMethod);
  11515. $core.addMethod(
  11516. $core.method({
  11517. selector: "source",
  11518. protocol: 'accessing',
  11519. fn: function (){
  11520. var self=this;
  11521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11522. return $core.withContext(function($ctx1) {
  11523. //>>excludeEnd("ctx");
  11524. var $2,$1,$receiver;
  11525. $2=self._basicAt_("source");
  11526. if(($receiver = $2) == null || $receiver.isNil){
  11527. $1="";
  11528. } else {
  11529. $1=$2;
  11530. };
  11531. return $1;
  11532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11533. }, function($ctx1) {$ctx1.fill(self,"source",{},$globals.CompiledMethod)});
  11534. //>>excludeEnd("ctx");
  11535. },
  11536. //>>excludeStart("ide", pragmas.excludeIdeData);
  11537. args: [],
  11538. source: "source\x0a\x09^ (self basicAt: 'source') ifNil: [ '' ]",
  11539. referencedClasses: [],
  11540. //>>excludeEnd("ide");
  11541. messageSends: ["ifNil:", "basicAt:"]
  11542. }),
  11543. $globals.CompiledMethod);
  11544. $core.addMethod(
  11545. $core.method({
  11546. selector: "source:",
  11547. protocol: 'accessing',
  11548. fn: function (aString){
  11549. var self=this;
  11550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11551. return $core.withContext(function($ctx1) {
  11552. //>>excludeEnd("ctx");
  11553. self._basicAt_put_("source",aString);
  11554. return self;
  11555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11556. }, function($ctx1) {$ctx1.fill(self,"source:",{aString:aString},$globals.CompiledMethod)});
  11557. //>>excludeEnd("ctx");
  11558. },
  11559. //>>excludeStart("ide", pragmas.excludeIdeData);
  11560. args: ["aString"],
  11561. source: "source: aString\x0a\x09self basicAt: 'source' put: aString",
  11562. referencedClasses: [],
  11563. //>>excludeEnd("ide");
  11564. messageSends: ["basicAt:put:"]
  11565. }),
  11566. $globals.CompiledMethod);
  11567. $core.addClass('ForkPool', $globals.Object, ['poolSize', 'maxPoolSize', 'queue', 'worker'], 'Kernel-Methods');
  11568. //>>excludeStart("ide", pragmas.excludeIdeData);
  11569. $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`";
  11570. //>>excludeEnd("ide");
  11571. $core.addMethod(
  11572. $core.method({
  11573. selector: "addWorker",
  11574. protocol: 'private',
  11575. fn: function (){
  11576. var self=this;
  11577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11578. return $core.withContext(function($ctx1) {
  11579. //>>excludeEnd("ctx");
  11580. $recv(self["@worker"])._valueWithTimeout_((0));
  11581. self["@poolSize"]=$recv(self["@poolSize"]).__plus((1));
  11582. return self;
  11583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11584. }, function($ctx1) {$ctx1.fill(self,"addWorker",{},$globals.ForkPool)});
  11585. //>>excludeEnd("ctx");
  11586. },
  11587. //>>excludeStart("ide", pragmas.excludeIdeData);
  11588. args: [],
  11589. source: "addWorker\x0a\x09worker valueWithTimeout: 0.\x0a\x09poolSize := poolSize + 1",
  11590. referencedClasses: [],
  11591. //>>excludeEnd("ide");
  11592. messageSends: ["valueWithTimeout:", "+"]
  11593. }),
  11594. $globals.ForkPool);
  11595. $core.addMethod(
  11596. $core.method({
  11597. selector: "defaultMaxPoolSize",
  11598. protocol: 'defaults',
  11599. fn: function (){
  11600. var self=this;
  11601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11602. return $core.withContext(function($ctx1) {
  11603. //>>excludeEnd("ctx");
  11604. var $1;
  11605. $1=$recv(self._class())._defaultMaxPoolSize();
  11606. return $1;
  11607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11608. }, function($ctx1) {$ctx1.fill(self,"defaultMaxPoolSize",{},$globals.ForkPool)});
  11609. //>>excludeEnd("ctx");
  11610. },
  11611. //>>excludeStart("ide", pragmas.excludeIdeData);
  11612. args: [],
  11613. source: "defaultMaxPoolSize\x0a\x09^ self class defaultMaxPoolSize",
  11614. referencedClasses: [],
  11615. //>>excludeEnd("ide");
  11616. messageSends: ["defaultMaxPoolSize", "class"]
  11617. }),
  11618. $globals.ForkPool);
  11619. $core.addMethod(
  11620. $core.method({
  11621. selector: "fork:",
  11622. protocol: 'actions',
  11623. fn: function (aBlock){
  11624. var self=this;
  11625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11626. return $core.withContext(function($ctx1) {
  11627. //>>excludeEnd("ctx");
  11628. var $1;
  11629. $1=$recv(self["@poolSize"]).__lt(self._maxPoolSize());
  11630. if($core.assert($1)){
  11631. self._addWorker();
  11632. };
  11633. $recv(self["@queue"])._nextPut_(aBlock);
  11634. return self;
  11635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11636. }, function($ctx1) {$ctx1.fill(self,"fork:",{aBlock:aBlock},$globals.ForkPool)});
  11637. //>>excludeEnd("ctx");
  11638. },
  11639. //>>excludeStart("ide", pragmas.excludeIdeData);
  11640. args: ["aBlock"],
  11641. source: "fork: aBlock\x0a\x09poolSize < self maxPoolSize ifTrue: [ self addWorker ].\x0a\x09queue nextPut: aBlock",
  11642. referencedClasses: [],
  11643. //>>excludeEnd("ide");
  11644. messageSends: ["ifTrue:", "<", "maxPoolSize", "addWorker", "nextPut:"]
  11645. }),
  11646. $globals.ForkPool);
  11647. $core.addMethod(
  11648. $core.method({
  11649. selector: "initialize",
  11650. protocol: 'initialization',
  11651. fn: function (){
  11652. var self=this;
  11653. function $Queue(){return $globals.Queue||(typeof Queue=="undefined"?nil:Queue)}
  11654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11655. return $core.withContext(function($ctx1) {
  11656. //>>excludeEnd("ctx");
  11657. (
  11658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11659. $ctx1.supercall = true,
  11660. //>>excludeEnd("ctx");
  11661. $globals.ForkPool.superclass.fn.prototype._initialize.apply($recv(self), []));
  11662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11663. $ctx1.supercall = false;
  11664. //>>excludeEnd("ctx");;
  11665. self["@poolSize"]=(0);
  11666. self["@queue"]=$recv($Queue())._new();
  11667. self["@worker"]=self._makeWorker();
  11668. return self;
  11669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11670. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ForkPool)});
  11671. //>>excludeEnd("ctx");
  11672. },
  11673. //>>excludeStart("ide", pragmas.excludeIdeData);
  11674. args: [],
  11675. source: "initialize\x0a\x09super initialize.\x0a\x09\x0a\x09poolSize := 0.\x0a\x09queue := Queue new.\x0a\x09worker := self makeWorker",
  11676. referencedClasses: ["Queue"],
  11677. //>>excludeEnd("ide");
  11678. messageSends: ["initialize", "new", "makeWorker"]
  11679. }),
  11680. $globals.ForkPool);
  11681. $core.addMethod(
  11682. $core.method({
  11683. selector: "makeWorker",
  11684. protocol: 'initialization',
  11685. fn: function (){
  11686. var self=this;
  11687. var sentinel;
  11688. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  11689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11690. return $core.withContext(function($ctx1) {
  11691. //>>excludeEnd("ctx");
  11692. var $2,$1;
  11693. sentinel=$recv($Object())._new();
  11694. $1=(function(){
  11695. var block;
  11696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11697. return $core.withContext(function($ctx2) {
  11698. //>>excludeEnd("ctx");
  11699. self["@poolSize"]=$recv(self["@poolSize"]).__minus((1));
  11700. self["@poolSize"];
  11701. block=$recv(self["@queue"])._nextIfAbsent_((function(){
  11702. return sentinel;
  11703. }));
  11704. block;
  11705. $2=$recv(block).__eq_eq(sentinel);
  11706. if(!$core.assert($2)){
  11707. return $recv((function(){
  11708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11709. return $core.withContext(function($ctx3) {
  11710. //>>excludeEnd("ctx");
  11711. return $recv(block)._value();
  11712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11713. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,4)});
  11714. //>>excludeEnd("ctx");
  11715. }))._ensure_((function(){
  11716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11717. return $core.withContext(function($ctx3) {
  11718. //>>excludeEnd("ctx");
  11719. return self._addWorker();
  11720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11721. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)});
  11722. //>>excludeEnd("ctx");
  11723. }));
  11724. };
  11725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11726. }, function($ctx2) {$ctx2.fillBlock({block:block},$ctx1,1)});
  11727. //>>excludeEnd("ctx");
  11728. });
  11729. return $1;
  11730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11731. }, function($ctx1) {$ctx1.fill(self,"makeWorker",{sentinel:sentinel},$globals.ForkPool)});
  11732. //>>excludeEnd("ctx");
  11733. },
  11734. //>>excludeStart("ide", pragmas.excludeIdeData);
  11735. args: [],
  11736. 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 ] ]]",
  11737. referencedClasses: ["Object"],
  11738. //>>excludeEnd("ide");
  11739. messageSends: ["new", "-", "nextIfAbsent:", "ifFalse:", "==", "ensure:", "value", "addWorker"]
  11740. }),
  11741. $globals.ForkPool);
  11742. $core.addMethod(
  11743. $core.method({
  11744. selector: "maxPoolSize",
  11745. protocol: 'accessing',
  11746. fn: function (){
  11747. var self=this;
  11748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11749. return $core.withContext(function($ctx1) {
  11750. //>>excludeEnd("ctx");
  11751. var $2,$1,$receiver;
  11752. $2=self["@maxPoolSize"];
  11753. if(($receiver = $2) == null || $receiver.isNil){
  11754. $1=self._defaultMaxPoolSize();
  11755. } else {
  11756. $1=$2;
  11757. };
  11758. return $1;
  11759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11760. }, function($ctx1) {$ctx1.fill(self,"maxPoolSize",{},$globals.ForkPool)});
  11761. //>>excludeEnd("ctx");
  11762. },
  11763. //>>excludeStart("ide", pragmas.excludeIdeData);
  11764. args: [],
  11765. source: "maxPoolSize\x0a\x09^ maxPoolSize ifNil: [ self defaultMaxPoolSize ]",
  11766. referencedClasses: [],
  11767. //>>excludeEnd("ide");
  11768. messageSends: ["ifNil:", "defaultMaxPoolSize"]
  11769. }),
  11770. $globals.ForkPool);
  11771. $core.addMethod(
  11772. $core.method({
  11773. selector: "maxPoolSize:",
  11774. protocol: 'accessing',
  11775. fn: function (anInteger){
  11776. var self=this;
  11777. self["@maxPoolSize"]=anInteger;
  11778. return self;
  11779. },
  11780. //>>excludeStart("ide", pragmas.excludeIdeData);
  11781. args: ["anInteger"],
  11782. source: "maxPoolSize: anInteger\x0a\x09maxPoolSize := anInteger",
  11783. referencedClasses: [],
  11784. //>>excludeEnd("ide");
  11785. messageSends: []
  11786. }),
  11787. $globals.ForkPool);
  11788. $globals.ForkPool.klass.iVarNames = ['default'];
  11789. $core.addMethod(
  11790. $core.method({
  11791. selector: "default",
  11792. protocol: 'accessing',
  11793. fn: function (){
  11794. var self=this;
  11795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11796. return $core.withContext(function($ctx1) {
  11797. //>>excludeEnd("ctx");
  11798. var $2,$1,$receiver;
  11799. $2=self["@default"];
  11800. if(($receiver = $2) == null || $receiver.isNil){
  11801. self["@default"]=self._new();
  11802. $1=self["@default"];
  11803. } else {
  11804. $1=$2;
  11805. };
  11806. return $1;
  11807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11808. }, function($ctx1) {$ctx1.fill(self,"default",{},$globals.ForkPool.klass)});
  11809. //>>excludeEnd("ctx");
  11810. },
  11811. //>>excludeStart("ide", pragmas.excludeIdeData);
  11812. args: [],
  11813. source: "default\x0a\x09^ default ifNil: [ default := self new ]",
  11814. referencedClasses: [],
  11815. //>>excludeEnd("ide");
  11816. messageSends: ["ifNil:", "new"]
  11817. }),
  11818. $globals.ForkPool.klass);
  11819. $core.addMethod(
  11820. $core.method({
  11821. selector: "defaultMaxPoolSize",
  11822. protocol: 'accessing',
  11823. fn: function (){
  11824. var self=this;
  11825. return (100);
  11826. },
  11827. //>>excludeStart("ide", pragmas.excludeIdeData);
  11828. args: [],
  11829. source: "defaultMaxPoolSize\x0a\x09^ 100",
  11830. referencedClasses: [],
  11831. //>>excludeEnd("ide");
  11832. messageSends: []
  11833. }),
  11834. $globals.ForkPool.klass);
  11835. $core.addMethod(
  11836. $core.method({
  11837. selector: "resetDefault",
  11838. protocol: 'accessing',
  11839. fn: function (){
  11840. var self=this;
  11841. self["@default"]=nil;
  11842. return self;
  11843. },
  11844. //>>excludeStart("ide", pragmas.excludeIdeData);
  11845. args: [],
  11846. source: "resetDefault\x0a\x09default := nil",
  11847. referencedClasses: [],
  11848. //>>excludeEnd("ide");
  11849. messageSends: []
  11850. }),
  11851. $globals.ForkPool.klass);
  11852. $core.addClass('Message', $globals.Object, ['selector', 'arguments'], 'Kernel-Methods');
  11853. //>>excludeStart("ide", pragmas.excludeIdeData);
  11854. $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.";
  11855. //>>excludeEnd("ide");
  11856. $core.addMethod(
  11857. $core.method({
  11858. selector: "arguments",
  11859. protocol: 'accessing',
  11860. fn: function (){
  11861. var self=this;
  11862. var $1;
  11863. $1=self["@arguments"];
  11864. return $1;
  11865. },
  11866. //>>excludeStart("ide", pragmas.excludeIdeData);
  11867. args: [],
  11868. source: "arguments\x0a\x09^ arguments",
  11869. referencedClasses: [],
  11870. //>>excludeEnd("ide");
  11871. messageSends: []
  11872. }),
  11873. $globals.Message);
  11874. $core.addMethod(
  11875. $core.method({
  11876. selector: "arguments:",
  11877. protocol: 'accessing',
  11878. fn: function (anArray){
  11879. var self=this;
  11880. self["@arguments"]=anArray;
  11881. return self;
  11882. },
  11883. //>>excludeStart("ide", pragmas.excludeIdeData);
  11884. args: ["anArray"],
  11885. source: "arguments: anArray\x0a\x09arguments := anArray",
  11886. referencedClasses: [],
  11887. //>>excludeEnd("ide");
  11888. messageSends: []
  11889. }),
  11890. $globals.Message);
  11891. $core.addMethod(
  11892. $core.method({
  11893. selector: "printOn:",
  11894. protocol: 'printing',
  11895. fn: function (aStream){
  11896. var self=this;
  11897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11898. return $core.withContext(function($ctx1) {
  11899. //>>excludeEnd("ctx");
  11900. var $1;
  11901. (
  11902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11903. $ctx1.supercall = true,
  11904. //>>excludeEnd("ctx");
  11905. $globals.Message.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  11906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11907. $ctx1.supercall = false;
  11908. //>>excludeEnd("ctx");;
  11909. $recv(aStream)._nextPutAll_("(");
  11910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11911. $ctx1.sendIdx["nextPutAll:"]=1;
  11912. //>>excludeEnd("ctx");
  11913. $recv(aStream)._nextPutAll_(self._selector());
  11914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11915. $ctx1.sendIdx["nextPutAll:"]=2;
  11916. //>>excludeEnd("ctx");
  11917. $1=$recv(aStream)._nextPutAll_(")");
  11918. return self;
  11919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11920. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Message)});
  11921. //>>excludeEnd("ctx");
  11922. },
  11923. //>>excludeStart("ide", pragmas.excludeIdeData);
  11924. args: ["aStream"],
  11925. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream\x0a\x09\x09nextPutAll: '(';\x0a\x09\x09nextPutAll: self selector;\x0a\x09\x09nextPutAll: ')'",
  11926. referencedClasses: [],
  11927. //>>excludeEnd("ide");
  11928. messageSends: ["printOn:", "nextPutAll:", "selector"]
  11929. }),
  11930. $globals.Message);
  11931. $core.addMethod(
  11932. $core.method({
  11933. selector: "selector",
  11934. protocol: 'accessing',
  11935. fn: function (){
  11936. var self=this;
  11937. var $1;
  11938. $1=self["@selector"];
  11939. return $1;
  11940. },
  11941. //>>excludeStart("ide", pragmas.excludeIdeData);
  11942. args: [],
  11943. source: "selector\x0a\x09^ selector",
  11944. referencedClasses: [],
  11945. //>>excludeEnd("ide");
  11946. messageSends: []
  11947. }),
  11948. $globals.Message);
  11949. $core.addMethod(
  11950. $core.method({
  11951. selector: "selector:",
  11952. protocol: 'accessing',
  11953. fn: function (aString){
  11954. var self=this;
  11955. self["@selector"]=aString;
  11956. return self;
  11957. },
  11958. //>>excludeStart("ide", pragmas.excludeIdeData);
  11959. args: ["aString"],
  11960. source: "selector: aString\x0a\x09selector := aString",
  11961. referencedClasses: [],
  11962. //>>excludeEnd("ide");
  11963. messageSends: []
  11964. }),
  11965. $globals.Message);
  11966. $core.addMethod(
  11967. $core.method({
  11968. selector: "sendTo:",
  11969. protocol: 'actions',
  11970. fn: function (anObject){
  11971. var self=this;
  11972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11973. return $core.withContext(function($ctx1) {
  11974. //>>excludeEnd("ctx");
  11975. var $1;
  11976. $1=$recv(anObject)._perform_withArguments_(self._selector(),self._arguments());
  11977. return $1;
  11978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11979. }, function($ctx1) {$ctx1.fill(self,"sendTo:",{anObject:anObject},$globals.Message)});
  11980. //>>excludeEnd("ctx");
  11981. },
  11982. //>>excludeStart("ide", pragmas.excludeIdeData);
  11983. args: ["anObject"],
  11984. source: "sendTo: anObject\x0a\x09^ anObject perform: self selector withArguments: self arguments",
  11985. referencedClasses: [],
  11986. //>>excludeEnd("ide");
  11987. messageSends: ["perform:withArguments:", "selector", "arguments"]
  11988. }),
  11989. $globals.Message);
  11990. $core.addMethod(
  11991. $core.method({
  11992. selector: "selector:arguments:",
  11993. protocol: 'instance creation',
  11994. fn: function (aString,anArray){
  11995. var self=this;
  11996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11997. return $core.withContext(function($ctx1) {
  11998. //>>excludeEnd("ctx");
  11999. var $2,$3,$1;
  12000. $2=self._new();
  12001. $recv($2)._selector_(aString);
  12002. $recv($2)._arguments_(anArray);
  12003. $3=$recv($2)._yourself();
  12004. $1=$3;
  12005. return $1;
  12006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12007. }, function($ctx1) {$ctx1.fill(self,"selector:arguments:",{aString:aString,anArray:anArray},$globals.Message.klass)});
  12008. //>>excludeEnd("ctx");
  12009. },
  12010. //>>excludeStart("ide", pragmas.excludeIdeData);
  12011. args: ["aString", "anArray"],
  12012. source: "selector: aString arguments: anArray\x0a\x09^ self new\x0a\x09\x09selector: aString;\x0a\x09\x09arguments: anArray;\x0a\x09\x09yourself",
  12013. referencedClasses: [],
  12014. //>>excludeEnd("ide");
  12015. messageSends: ["selector:", "new", "arguments:", "yourself"]
  12016. }),
  12017. $globals.Message.klass);
  12018. $core.addClass('MessageSend', $globals.Object, ['receiver', 'message'], 'Kernel-Methods');
  12019. //>>excludeStart("ide", pragmas.excludeIdeData);
  12020. $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.";
  12021. //>>excludeEnd("ide");
  12022. $core.addMethod(
  12023. $core.method({
  12024. selector: "arguments",
  12025. protocol: 'accessing',
  12026. fn: function (){
  12027. var self=this;
  12028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12029. return $core.withContext(function($ctx1) {
  12030. //>>excludeEnd("ctx");
  12031. var $1;
  12032. $1=$recv(self["@message"])._arguments();
  12033. return $1;
  12034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12035. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.MessageSend)});
  12036. //>>excludeEnd("ctx");
  12037. },
  12038. //>>excludeStart("ide", pragmas.excludeIdeData);
  12039. args: [],
  12040. source: "arguments\x0a\x09^ message arguments",
  12041. referencedClasses: [],
  12042. //>>excludeEnd("ide");
  12043. messageSends: ["arguments"]
  12044. }),
  12045. $globals.MessageSend);
  12046. $core.addMethod(
  12047. $core.method({
  12048. selector: "arguments:",
  12049. protocol: 'accessing',
  12050. fn: function (aCollection){
  12051. var self=this;
  12052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12053. return $core.withContext(function($ctx1) {
  12054. //>>excludeEnd("ctx");
  12055. $recv(self["@message"])._arguments_(aCollection);
  12056. return self;
  12057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12058. }, function($ctx1) {$ctx1.fill(self,"arguments:",{aCollection:aCollection},$globals.MessageSend)});
  12059. //>>excludeEnd("ctx");
  12060. },
  12061. //>>excludeStart("ide", pragmas.excludeIdeData);
  12062. args: ["aCollection"],
  12063. source: "arguments: aCollection\x0a\x09message arguments: aCollection",
  12064. referencedClasses: [],
  12065. //>>excludeEnd("ide");
  12066. messageSends: ["arguments:"]
  12067. }),
  12068. $globals.MessageSend);
  12069. $core.addMethod(
  12070. $core.method({
  12071. selector: "initialize",
  12072. protocol: 'initialization',
  12073. fn: function (){
  12074. var self=this;
  12075. function $Message(){return $globals.Message||(typeof Message=="undefined"?nil:Message)}
  12076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12077. return $core.withContext(function($ctx1) {
  12078. //>>excludeEnd("ctx");
  12079. (
  12080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12081. $ctx1.supercall = true,
  12082. //>>excludeEnd("ctx");
  12083. $globals.MessageSend.superclass.fn.prototype._initialize.apply($recv(self), []));
  12084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12085. $ctx1.supercall = false;
  12086. //>>excludeEnd("ctx");;
  12087. self["@message"]=$recv($Message())._new();
  12088. return self;
  12089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12090. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.MessageSend)});
  12091. //>>excludeEnd("ctx");
  12092. },
  12093. //>>excludeStart("ide", pragmas.excludeIdeData);
  12094. args: [],
  12095. source: "initialize\x0a\x09super initialize.\x0a\x09message := Message new",
  12096. referencedClasses: ["Message"],
  12097. //>>excludeEnd("ide");
  12098. messageSends: ["initialize", "new"]
  12099. }),
  12100. $globals.MessageSend);
  12101. $core.addMethod(
  12102. $core.method({
  12103. selector: "printOn:",
  12104. protocol: 'printing',
  12105. fn: function (aStream){
  12106. var self=this;
  12107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12108. return $core.withContext(function($ctx1) {
  12109. //>>excludeEnd("ctx");
  12110. var $1;
  12111. (
  12112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12113. $ctx1.supercall = true,
  12114. //>>excludeEnd("ctx");
  12115. $globals.MessageSend.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  12116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12117. $ctx1.supercall = false;
  12118. //>>excludeEnd("ctx");;
  12119. $recv(aStream)._nextPutAll_("(");
  12120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12121. $ctx1.sendIdx["nextPutAll:"]=1;
  12122. //>>excludeEnd("ctx");
  12123. $recv(aStream)._nextPutAll_(self._receiver());
  12124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12125. $ctx1.sendIdx["nextPutAll:"]=2;
  12126. //>>excludeEnd("ctx");
  12127. $recv(aStream)._nextPutAll_(" >> ");
  12128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12129. $ctx1.sendIdx["nextPutAll:"]=3;
  12130. //>>excludeEnd("ctx");
  12131. $recv(aStream)._nextPutAll_(self._selector());
  12132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12133. $ctx1.sendIdx["nextPutAll:"]=4;
  12134. //>>excludeEnd("ctx");
  12135. $1=$recv(aStream)._nextPutAll_(")");
  12136. return self;
  12137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12138. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.MessageSend)});
  12139. //>>excludeEnd("ctx");
  12140. },
  12141. //>>excludeStart("ide", pragmas.excludeIdeData);
  12142. args: ["aStream"],
  12143. 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: ')'",
  12144. referencedClasses: [],
  12145. //>>excludeEnd("ide");
  12146. messageSends: ["printOn:", "nextPutAll:", "receiver", "selector"]
  12147. }),
  12148. $globals.MessageSend);
  12149. $core.addMethod(
  12150. $core.method({
  12151. selector: "receiver",
  12152. protocol: 'accessing',
  12153. fn: function (){
  12154. var self=this;
  12155. var $1;
  12156. $1=self["@receiver"];
  12157. return $1;
  12158. },
  12159. //>>excludeStart("ide", pragmas.excludeIdeData);
  12160. args: [],
  12161. source: "receiver\x0a\x09^ receiver",
  12162. referencedClasses: [],
  12163. //>>excludeEnd("ide");
  12164. messageSends: []
  12165. }),
  12166. $globals.MessageSend);
  12167. $core.addMethod(
  12168. $core.method({
  12169. selector: "receiver:",
  12170. protocol: 'accessing',
  12171. fn: function (anObject){
  12172. var self=this;
  12173. self["@receiver"]=anObject;
  12174. return self;
  12175. },
  12176. //>>excludeStart("ide", pragmas.excludeIdeData);
  12177. args: ["anObject"],
  12178. source: "receiver: anObject\x0a\x09receiver := anObject",
  12179. referencedClasses: [],
  12180. //>>excludeEnd("ide");
  12181. messageSends: []
  12182. }),
  12183. $globals.MessageSend);
  12184. $core.addMethod(
  12185. $core.method({
  12186. selector: "selector",
  12187. protocol: 'accessing',
  12188. fn: function (){
  12189. var self=this;
  12190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12191. return $core.withContext(function($ctx1) {
  12192. //>>excludeEnd("ctx");
  12193. var $1;
  12194. $1=$recv(self["@message"])._selector();
  12195. return $1;
  12196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12197. }, function($ctx1) {$ctx1.fill(self,"selector",{},$globals.MessageSend)});
  12198. //>>excludeEnd("ctx");
  12199. },
  12200. //>>excludeStart("ide", pragmas.excludeIdeData);
  12201. args: [],
  12202. source: "selector\x0a\x09^ message selector",
  12203. referencedClasses: [],
  12204. //>>excludeEnd("ide");
  12205. messageSends: ["selector"]
  12206. }),
  12207. $globals.MessageSend);
  12208. $core.addMethod(
  12209. $core.method({
  12210. selector: "selector:",
  12211. protocol: 'accessing',
  12212. fn: function (aString){
  12213. var self=this;
  12214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12215. return $core.withContext(function($ctx1) {
  12216. //>>excludeEnd("ctx");
  12217. $recv(self["@message"])._selector_(aString);
  12218. return self;
  12219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12220. }, function($ctx1) {$ctx1.fill(self,"selector:",{aString:aString},$globals.MessageSend)});
  12221. //>>excludeEnd("ctx");
  12222. },
  12223. //>>excludeStart("ide", pragmas.excludeIdeData);
  12224. args: ["aString"],
  12225. source: "selector: aString\x0a\x09message selector: aString",
  12226. referencedClasses: [],
  12227. //>>excludeEnd("ide");
  12228. messageSends: ["selector:"]
  12229. }),
  12230. $globals.MessageSend);
  12231. $core.addMethod(
  12232. $core.method({
  12233. selector: "value",
  12234. protocol: 'evaluating',
  12235. fn: function (){
  12236. var self=this;
  12237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12238. return $core.withContext(function($ctx1) {
  12239. //>>excludeEnd("ctx");
  12240. var $1;
  12241. $1=$recv(self["@message"])._sendTo_(self._receiver());
  12242. return $1;
  12243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12244. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.MessageSend)});
  12245. //>>excludeEnd("ctx");
  12246. },
  12247. //>>excludeStart("ide", pragmas.excludeIdeData);
  12248. args: [],
  12249. source: "value\x0a\x09^ message sendTo: self receiver",
  12250. referencedClasses: [],
  12251. //>>excludeEnd("ide");
  12252. messageSends: ["sendTo:", "receiver"]
  12253. }),
  12254. $globals.MessageSend);
  12255. $core.addMethod(
  12256. $core.method({
  12257. selector: "value:",
  12258. protocol: 'evaluating',
  12259. fn: function (anObject){
  12260. var self=this;
  12261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12262. return $core.withContext(function($ctx1) {
  12263. //>>excludeEnd("ctx");
  12264. var $2,$3,$1;
  12265. $2=self["@message"];
  12266. $recv($2)._arguments_([anObject]);
  12267. $3=$recv($2)._sendTo_(self._receiver());
  12268. $1=$3;
  12269. return $1;
  12270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12271. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject},$globals.MessageSend)});
  12272. //>>excludeEnd("ctx");
  12273. },
  12274. //>>excludeStart("ide", pragmas.excludeIdeData);
  12275. args: ["anObject"],
  12276. source: "value: anObject\x0a\x09^ message \x0a\x09\x09arguments: { anObject };\x0a\x09\x09sendTo: self receiver",
  12277. referencedClasses: [],
  12278. //>>excludeEnd("ide");
  12279. messageSends: ["arguments:", "sendTo:", "receiver"]
  12280. }),
  12281. $globals.MessageSend);
  12282. $core.addMethod(
  12283. $core.method({
  12284. selector: "value:value:",
  12285. protocol: 'evaluating',
  12286. fn: function (firstArgument,secondArgument){
  12287. var self=this;
  12288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12289. return $core.withContext(function($ctx1) {
  12290. //>>excludeEnd("ctx");
  12291. var $2,$3,$1;
  12292. $2=self["@message"];
  12293. $recv($2)._arguments_([firstArgument,secondArgument]);
  12294. $3=$recv($2)._sendTo_(self._receiver());
  12295. $1=$3;
  12296. return $1;
  12297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12298. }, function($ctx1) {$ctx1.fill(self,"value:value:",{firstArgument:firstArgument,secondArgument:secondArgument},$globals.MessageSend)});
  12299. //>>excludeEnd("ctx");
  12300. },
  12301. //>>excludeStart("ide", pragmas.excludeIdeData);
  12302. args: ["firstArgument", "secondArgument"],
  12303. source: "value: firstArgument value: secondArgument\x0a\x09^ message \x0a\x09\x09arguments: { firstArgument. secondArgument };\x0a\x09\x09sendTo: self receiver",
  12304. referencedClasses: [],
  12305. //>>excludeEnd("ide");
  12306. messageSends: ["arguments:", "sendTo:", "receiver"]
  12307. }),
  12308. $globals.MessageSend);
  12309. $core.addMethod(
  12310. $core.method({
  12311. selector: "value:value:value:",
  12312. protocol: 'evaluating',
  12313. fn: function (firstArgument,secondArgument,thirdArgument){
  12314. var self=this;
  12315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12316. return $core.withContext(function($ctx1) {
  12317. //>>excludeEnd("ctx");
  12318. var $2,$3,$1;
  12319. $2=self["@message"];
  12320. $recv($2)._arguments_([firstArgument,secondArgument,thirdArgument]);
  12321. $3=$recv($2)._sendTo_(self._receiver());
  12322. $1=$3;
  12323. return $1;
  12324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12325. }, function($ctx1) {$ctx1.fill(self,"value:value:value:",{firstArgument:firstArgument,secondArgument:secondArgument,thirdArgument:thirdArgument},$globals.MessageSend)});
  12326. //>>excludeEnd("ctx");
  12327. },
  12328. //>>excludeStart("ide", pragmas.excludeIdeData);
  12329. args: ["firstArgument", "secondArgument", "thirdArgument"],
  12330. source: "value: firstArgument value: secondArgument value: thirdArgument\x0a\x09^ message \x0a\x09\x09arguments: { firstArgument. secondArgument. thirdArgument };\x0a\x09\x09sendTo: self receiver",
  12331. referencedClasses: [],
  12332. //>>excludeEnd("ide");
  12333. messageSends: ["arguments:", "sendTo:", "receiver"]
  12334. }),
  12335. $globals.MessageSend);
  12336. $core.addMethod(
  12337. $core.method({
  12338. selector: "valueWithPossibleArguments:",
  12339. protocol: 'evaluating',
  12340. fn: function (aCollection){
  12341. var self=this;
  12342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12343. return $core.withContext(function($ctx1) {
  12344. //>>excludeEnd("ctx");
  12345. var $1;
  12346. self._arguments_(aCollection);
  12347. $1=self._value();
  12348. return $1;
  12349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12350. }, function($ctx1) {$ctx1.fill(self,"valueWithPossibleArguments:",{aCollection:aCollection},$globals.MessageSend)});
  12351. //>>excludeEnd("ctx");
  12352. },
  12353. //>>excludeStart("ide", pragmas.excludeIdeData);
  12354. args: ["aCollection"],
  12355. source: "valueWithPossibleArguments: aCollection\x0a\x09self arguments: aCollection.\x0a\x09^ self value",
  12356. referencedClasses: [],
  12357. //>>excludeEnd("ide");
  12358. messageSends: ["arguments:", "value"]
  12359. }),
  12360. $globals.MessageSend);
  12361. $core.addClass('MethodContext', $globals.Object, [], 'Kernel-Methods');
  12362. //>>excludeStart("ide", pragmas.excludeIdeData);
  12363. $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`.";
  12364. //>>excludeEnd("ide");
  12365. $core.addMethod(
  12366. $core.method({
  12367. selector: "asString",
  12368. protocol: 'converting',
  12369. fn: function (){
  12370. var self=this;
  12371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12372. return $core.withContext(function($ctx1) {
  12373. //>>excludeEnd("ctx");
  12374. var $2,$3,$5,$7,$6,$4,$11,$10,$9,$8,$12,$16,$15,$14,$13,$1;
  12375. $2=self._isBlockContext();
  12376. if($core.assert($2)){
  12377. $3="a block (in ".__comma($recv(self._methodContext())._asString());
  12378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12379. $ctx1.sendIdx[","]=2;
  12380. //>>excludeEnd("ctx");
  12381. $1=$recv($3).__comma(")");
  12382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12383. $ctx1.sendIdx[","]=1;
  12384. //>>excludeEnd("ctx");
  12385. } else {
  12386. var methodClass;
  12387. methodClass=$recv(self._method())._methodClass();
  12388. methodClass;
  12389. $5=methodClass;
  12390. $7=self._receiver();
  12391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12392. $ctx1.sendIdx["receiver"]=1;
  12393. //>>excludeEnd("ctx");
  12394. $6=$recv($7)._class();
  12395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12396. $ctx1.sendIdx["class"]=1;
  12397. //>>excludeEnd("ctx");
  12398. $4=$recv($5).__eq($6);
  12399. if($core.assert($4)){
  12400. $11=self._receiver();
  12401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12402. $ctx1.sendIdx["receiver"]=2;
  12403. //>>excludeEnd("ctx");
  12404. $10=$recv($11)._class();
  12405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12406. $ctx1.sendIdx["class"]=2;
  12407. //>>excludeEnd("ctx");
  12408. $9=$recv($10)._name();
  12409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12410. $ctx1.sendIdx["name"]=1;
  12411. //>>excludeEnd("ctx");
  12412. $8=$recv($9).__comma(" >> ");
  12413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12414. $ctx1.sendIdx[","]=4;
  12415. //>>excludeEnd("ctx");
  12416. $12=self._selector();
  12417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12418. $ctx1.sendIdx["selector"]=1;
  12419. //>>excludeEnd("ctx");
  12420. $1=$recv($8).__comma($12);
  12421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12422. $ctx1.sendIdx[","]=3;
  12423. //>>excludeEnd("ctx");
  12424. } else {
  12425. $16=$recv($recv(self._receiver())._class())._name();
  12426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12427. $ctx1.sendIdx["name"]=2;
  12428. //>>excludeEnd("ctx");
  12429. $15=$recv($16).__comma("(");
  12430. $14=$recv($15).__comma($recv(methodClass)._name());
  12431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12432. $ctx1.sendIdx[","]=7;
  12433. //>>excludeEnd("ctx");
  12434. $13=$recv($14).__comma(") >> ");
  12435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12436. $ctx1.sendIdx[","]=6;
  12437. //>>excludeEnd("ctx");
  12438. $1=$recv($13).__comma(self._selector());
  12439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12440. $ctx1.sendIdx[","]=5;
  12441. //>>excludeEnd("ctx");
  12442. };
  12443. };
  12444. return $1;
  12445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12446. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.MethodContext)});
  12447. //>>excludeEnd("ctx");
  12448. },
  12449. //>>excludeStart("ide", pragmas.excludeIdeData);
  12450. args: [],
  12451. 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 ] ]",
  12452. referencedClasses: [],
  12453. //>>excludeEnd("ide");
  12454. messageSends: ["ifTrue:ifFalse:", "isBlockContext", ",", "asString", "methodContext", "methodClass", "method", "=", "class", "receiver", "name", "selector"]
  12455. }),
  12456. $globals.MethodContext);
  12457. $core.addMethod(
  12458. $core.method({
  12459. selector: "basicReceiver",
  12460. protocol: 'accessing',
  12461. fn: function (){
  12462. var self=this;
  12463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12464. return $core.withContext(function($ctx1) {
  12465. //>>excludeEnd("ctx");
  12466. return self.receiver;
  12467. return self;
  12468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12469. }, function($ctx1) {$ctx1.fill(self,"basicReceiver",{},$globals.MethodContext)});
  12470. //>>excludeEnd("ctx");
  12471. },
  12472. //>>excludeStart("ide", pragmas.excludeIdeData);
  12473. args: [],
  12474. source: "basicReceiver\x0a\x09<return self.receiver>",
  12475. referencedClasses: [],
  12476. //>>excludeEnd("ide");
  12477. messageSends: []
  12478. }),
  12479. $globals.MethodContext);
  12480. $core.addMethod(
  12481. $core.method({
  12482. selector: "evaluatedSelector",
  12483. protocol: 'accessing',
  12484. fn: function (){
  12485. var self=this;
  12486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12487. return $core.withContext(function($ctx1) {
  12488. //>>excludeEnd("ctx");
  12489. return self.evaluatedSelector;
  12490. return self;
  12491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12492. }, function($ctx1) {$ctx1.fill(self,"evaluatedSelector",{},$globals.MethodContext)});
  12493. //>>excludeEnd("ctx");
  12494. },
  12495. //>>excludeStart("ide", pragmas.excludeIdeData);
  12496. args: [],
  12497. source: "evaluatedSelector\x0a\x09<return self.evaluatedSelector>",
  12498. referencedClasses: [],
  12499. //>>excludeEnd("ide");
  12500. messageSends: []
  12501. }),
  12502. $globals.MethodContext);
  12503. $core.addMethod(
  12504. $core.method({
  12505. selector: "findContextSuchThat:",
  12506. protocol: 'accessing',
  12507. fn: function (testBlock){
  12508. var self=this;
  12509. var context;
  12510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12511. return $core.withContext(function($ctx1) {
  12512. //>>excludeEnd("ctx");
  12513. var $1,$2;
  12514. var $early={};
  12515. try {
  12516. context=self;
  12517. $recv((function(){
  12518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12519. return $core.withContext(function($ctx2) {
  12520. //>>excludeEnd("ctx");
  12521. return $recv(context)._isNil();
  12522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12523. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  12524. //>>excludeEnd("ctx");
  12525. }))._whileFalse_((function(){
  12526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12527. return $core.withContext(function($ctx2) {
  12528. //>>excludeEnd("ctx");
  12529. $1=$recv(testBlock)._value_(context);
  12530. if($core.assert($1)){
  12531. $2=context;
  12532. throw $early=[$2];
  12533. };
  12534. context=$recv(context)._outerContext();
  12535. return context;
  12536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12537. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  12538. //>>excludeEnd("ctx");
  12539. }));
  12540. return nil;
  12541. }
  12542. catch(e) {if(e===$early)return e[0]; throw e}
  12543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12544. }, function($ctx1) {$ctx1.fill(self,"findContextSuchThat:",{testBlock:testBlock,context:context},$globals.MethodContext)});
  12545. //>>excludeEnd("ctx");
  12546. },
  12547. //>>excludeStart("ide", pragmas.excludeIdeData);
  12548. args: ["testBlock"],
  12549. 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",
  12550. referencedClasses: [],
  12551. //>>excludeEnd("ide");
  12552. messageSends: ["whileFalse:", "isNil", "ifTrue:", "value:", "outerContext"]
  12553. }),
  12554. $globals.MethodContext);
  12555. $core.addMethod(
  12556. $core.method({
  12557. selector: "home",
  12558. protocol: 'accessing',
  12559. fn: function (){
  12560. var self=this;
  12561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12562. return $core.withContext(function($ctx1) {
  12563. //>>excludeEnd("ctx");
  12564. return self.homeContext;
  12565. return self;
  12566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12567. }, function($ctx1) {$ctx1.fill(self,"home",{},$globals.MethodContext)});
  12568. //>>excludeEnd("ctx");
  12569. },
  12570. //>>excludeStart("ide", pragmas.excludeIdeData);
  12571. args: [],
  12572. source: "home\x0a\x09<return self.homeContext>",
  12573. referencedClasses: [],
  12574. //>>excludeEnd("ide");
  12575. messageSends: []
  12576. }),
  12577. $globals.MethodContext);
  12578. $core.addMethod(
  12579. $core.method({
  12580. selector: "index",
  12581. protocol: 'accessing',
  12582. fn: function (){
  12583. var self=this;
  12584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12585. return $core.withContext(function($ctx1) {
  12586. //>>excludeEnd("ctx");
  12587. return self.index || 0;
  12588. return self;
  12589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12590. }, function($ctx1) {$ctx1.fill(self,"index",{},$globals.MethodContext)});
  12591. //>>excludeEnd("ctx");
  12592. },
  12593. //>>excludeStart("ide", pragmas.excludeIdeData);
  12594. args: [],
  12595. source: "index\x0a\x09<return self.index || 0>",
  12596. referencedClasses: [],
  12597. //>>excludeEnd("ide");
  12598. messageSends: []
  12599. }),
  12600. $globals.MethodContext);
  12601. $core.addMethod(
  12602. $core.method({
  12603. selector: "isBlockContext",
  12604. protocol: 'testing',
  12605. fn: function (){
  12606. var self=this;
  12607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12608. return $core.withContext(function($ctx1) {
  12609. //>>excludeEnd("ctx");
  12610. var $1;
  12611. $1=$recv(self._selector())._isNil();
  12612. return $1;
  12613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12614. }, function($ctx1) {$ctx1.fill(self,"isBlockContext",{},$globals.MethodContext)});
  12615. //>>excludeEnd("ctx");
  12616. },
  12617. //>>excludeStart("ide", pragmas.excludeIdeData);
  12618. args: [],
  12619. source: "isBlockContext\x0a\x09\x22Block context do not have selectors.\x22\x0a\x09\x0a\x09^ self selector isNil",
  12620. referencedClasses: [],
  12621. //>>excludeEnd("ide");
  12622. messageSends: ["isNil", "selector"]
  12623. }),
  12624. $globals.MethodContext);
  12625. $core.addMethod(
  12626. $core.method({
  12627. selector: "locals",
  12628. protocol: 'accessing',
  12629. fn: function (){
  12630. var self=this;
  12631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12632. return $core.withContext(function($ctx1) {
  12633. //>>excludeEnd("ctx");
  12634. return self.locals || {};
  12635. return self;
  12636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12637. }, function($ctx1) {$ctx1.fill(self,"locals",{},$globals.MethodContext)});
  12638. //>>excludeEnd("ctx");
  12639. },
  12640. //>>excludeStart("ide", pragmas.excludeIdeData);
  12641. args: [],
  12642. source: "locals\x0a\x09<return self.locals || {}>",
  12643. referencedClasses: [],
  12644. //>>excludeEnd("ide");
  12645. messageSends: []
  12646. }),
  12647. $globals.MethodContext);
  12648. $core.addMethod(
  12649. $core.method({
  12650. selector: "method",
  12651. protocol: 'accessing',
  12652. fn: function (){
  12653. var self=this;
  12654. var method,lookupClass,receiverClass,supercall;
  12655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12656. return $core.withContext(function($ctx1) {
  12657. //>>excludeEnd("ctx");
  12658. var $1,$3,$2,$4,$6,$5,$7,$9,$8,$receiver;
  12659. $1=self._methodContext();
  12660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12661. $ctx1.sendIdx["methodContext"]=1;
  12662. //>>excludeEnd("ctx");
  12663. if(($receiver = $1) == null || $receiver.isNil){
  12664. return nil;
  12665. } else {
  12666. $1;
  12667. };
  12668. $3=self._methodContext();
  12669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12670. $ctx1.sendIdx["methodContext"]=2;
  12671. //>>excludeEnd("ctx");
  12672. $2=$recv($3)._receiver();
  12673. receiverClass=$recv($2)._class();
  12674. $4=receiverClass;
  12675. $6=self._methodContext();
  12676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12677. $ctx1.sendIdx["methodContext"]=3;
  12678. //>>excludeEnd("ctx");
  12679. $5=$recv($6)._selector();
  12680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12681. $ctx1.sendIdx["selector"]=1;
  12682. //>>excludeEnd("ctx");
  12683. method=$recv($4)._lookupSelector_($5);
  12684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12685. $ctx1.sendIdx["lookupSelector:"]=1;
  12686. //>>excludeEnd("ctx");
  12687. $7=self._outerContext();
  12688. if(($receiver = $7) == null || $receiver.isNil){
  12689. supercall=false;
  12690. } else {
  12691. var outer;
  12692. outer=$receiver;
  12693. supercall=$recv(outer)._supercall();
  12694. };
  12695. $9=supercall;
  12696. if($core.assert($9)){
  12697. $8=$recv($recv($recv(method)._methodClass())._superclass())._lookupSelector_($recv(self._methodContext())._selector());
  12698. } else {
  12699. $8=method;
  12700. };
  12701. return $8;
  12702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12703. }, function($ctx1) {$ctx1.fill(self,"method",{method:method,lookupClass:lookupClass,receiverClass:receiverClass,supercall:supercall},$globals.MethodContext)});
  12704. //>>excludeEnd("ctx");
  12705. },
  12706. //>>excludeStart("ide", pragmas.excludeIdeData);
  12707. args: [],
  12708. 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 ]",
  12709. referencedClasses: [],
  12710. //>>excludeEnd("ide");
  12711. messageSends: ["ifNil:", "methodContext", "class", "receiver", "lookupSelector:", "selector", "ifNil:ifNotNil:", "outerContext", "supercall", "ifFalse:ifTrue:", "superclass", "methodClass"]
  12712. }),
  12713. $globals.MethodContext);
  12714. $core.addMethod(
  12715. $core.method({
  12716. selector: "methodContext",
  12717. protocol: 'accessing',
  12718. fn: function (){
  12719. var self=this;
  12720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12721. return $core.withContext(function($ctx1) {
  12722. //>>excludeEnd("ctx");
  12723. var $1,$3,$2,$receiver;
  12724. $1=self._isBlockContext();
  12725. if(!$core.assert($1)){
  12726. return self;
  12727. };
  12728. $3=self._outerContext();
  12729. if(($receiver = $3) == null || $receiver.isNil){
  12730. $2=$3;
  12731. } else {
  12732. var outer;
  12733. outer=$receiver;
  12734. $2=$recv(outer)._methodContext();
  12735. };
  12736. return $2;
  12737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12738. }, function($ctx1) {$ctx1.fill(self,"methodContext",{},$globals.MethodContext)});
  12739. //>>excludeEnd("ctx");
  12740. },
  12741. //>>excludeStart("ide", pragmas.excludeIdeData);
  12742. args: [],
  12743. source: "methodContext\x0a\x09self isBlockContext ifFalse: [ ^ self ].\x0a\x09\x0a\x09^ self outerContext ifNotNil: [ :outer |\x0a\x09\x09outer methodContext ]",
  12744. referencedClasses: [],
  12745. //>>excludeEnd("ide");
  12746. messageSends: ["ifFalse:", "isBlockContext", "ifNotNil:", "outerContext", "methodContext"]
  12747. }),
  12748. $globals.MethodContext);
  12749. $core.addMethod(
  12750. $core.method({
  12751. selector: "outerContext",
  12752. protocol: 'accessing',
  12753. fn: function (){
  12754. var self=this;
  12755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12756. return $core.withContext(function($ctx1) {
  12757. //>>excludeEnd("ctx");
  12758. return self.outerContext || self.homeContext;
  12759. return self;
  12760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12761. }, function($ctx1) {$ctx1.fill(self,"outerContext",{},$globals.MethodContext)});
  12762. //>>excludeEnd("ctx");
  12763. },
  12764. //>>excludeStart("ide", pragmas.excludeIdeData);
  12765. args: [],
  12766. source: "outerContext\x0a\x09<return self.outerContext || self.homeContext>",
  12767. referencedClasses: [],
  12768. //>>excludeEnd("ide");
  12769. messageSends: []
  12770. }),
  12771. $globals.MethodContext);
  12772. $core.addMethod(
  12773. $core.method({
  12774. selector: "printOn:",
  12775. protocol: 'printing',
  12776. fn: function (aStream){
  12777. var self=this;
  12778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12779. return $core.withContext(function($ctx1) {
  12780. //>>excludeEnd("ctx");
  12781. var $1;
  12782. (
  12783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12784. $ctx1.supercall = true,
  12785. //>>excludeEnd("ctx");
  12786. $globals.MethodContext.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  12787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12788. $ctx1.supercall = false;
  12789. //>>excludeEnd("ctx");;
  12790. $recv(aStream)._nextPutAll_("(");
  12791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12792. $ctx1.sendIdx["nextPutAll:"]=1;
  12793. //>>excludeEnd("ctx");
  12794. $recv(aStream)._nextPutAll_(self._asString());
  12795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12796. $ctx1.sendIdx["nextPutAll:"]=2;
  12797. //>>excludeEnd("ctx");
  12798. $1=$recv(aStream)._nextPutAll_(")");
  12799. return self;
  12800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12801. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.MethodContext)});
  12802. //>>excludeEnd("ctx");
  12803. },
  12804. //>>excludeStart("ide", pragmas.excludeIdeData);
  12805. args: ["aStream"],
  12806. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream \x0a\x09\x09nextPutAll: '(';\x0a\x09\x09nextPutAll: self asString;\x0a\x09\x09nextPutAll: ')'",
  12807. referencedClasses: [],
  12808. //>>excludeEnd("ide");
  12809. messageSends: ["printOn:", "nextPutAll:", "asString"]
  12810. }),
  12811. $globals.MethodContext);
  12812. $core.addMethod(
  12813. $core.method({
  12814. selector: "receiver",
  12815. protocol: 'accessing',
  12816. fn: function (){
  12817. var self=this;
  12818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12819. return $core.withContext(function($ctx1) {
  12820. //>>excludeEnd("ctx");
  12821. var $3,$2,$1;
  12822. $2=$recv(self._isBlockContext())._and_((function(){
  12823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12824. return $core.withContext(function($ctx2) {
  12825. //>>excludeEnd("ctx");
  12826. $3=self._outerContext();
  12827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12828. $ctx2.sendIdx["outerContext"]=1;
  12829. //>>excludeEnd("ctx");
  12830. return $recv($3)._notNil();
  12831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12832. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  12833. //>>excludeEnd("ctx");
  12834. }));
  12835. if($core.assert($2)){
  12836. $1=$recv(self._outerContext())._receiver();
  12837. } else {
  12838. $1=self._basicReceiver();
  12839. };
  12840. return $1;
  12841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12842. }, function($ctx1) {$ctx1.fill(self,"receiver",{},$globals.MethodContext)});
  12843. //>>excludeEnd("ctx");
  12844. },
  12845. //>>excludeStart("ide", pragmas.excludeIdeData);
  12846. args: [],
  12847. source: "receiver\x0a\x09^ (self isBlockContext and: [ self outerContext notNil ])\x0a\x09\x09ifTrue: [ self outerContext receiver ]\x0a\x09\x09ifFalse: [ self basicReceiver ]",
  12848. referencedClasses: [],
  12849. //>>excludeEnd("ide");
  12850. messageSends: ["ifTrue:ifFalse:", "and:", "isBlockContext", "notNil", "outerContext", "receiver", "basicReceiver"]
  12851. }),
  12852. $globals.MethodContext);
  12853. $core.addMethod(
  12854. $core.method({
  12855. selector: "selector",
  12856. protocol: 'accessing',
  12857. fn: function (){
  12858. var self=this;
  12859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12860. return $core.withContext(function($ctx1) {
  12861. //>>excludeEnd("ctx");
  12862. if(self.selector) {
  12863. return $core.js2st(self.selector);
  12864. } else {
  12865. return nil;
  12866. }
  12867. ;
  12868. return self;
  12869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12870. }, function($ctx1) {$ctx1.fill(self,"selector",{},$globals.MethodContext)});
  12871. //>>excludeEnd("ctx");
  12872. },
  12873. //>>excludeStart("ide", pragmas.excludeIdeData);
  12874. args: [],
  12875. 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>",
  12876. referencedClasses: [],
  12877. //>>excludeEnd("ide");
  12878. messageSends: []
  12879. }),
  12880. $globals.MethodContext);
  12881. $core.addMethod(
  12882. $core.method({
  12883. selector: "sendIndexAt:",
  12884. protocol: 'accessing',
  12885. fn: function (aSelector){
  12886. var self=this;
  12887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12888. return $core.withContext(function($ctx1) {
  12889. //>>excludeEnd("ctx");
  12890. return self.sendIdx[aSelector] || 0;
  12891. return self;
  12892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12893. }, function($ctx1) {$ctx1.fill(self,"sendIndexAt:",{aSelector:aSelector},$globals.MethodContext)});
  12894. //>>excludeEnd("ctx");
  12895. },
  12896. //>>excludeStart("ide", pragmas.excludeIdeData);
  12897. args: ["aSelector"],
  12898. source: "sendIndexAt: aSelector\x0a\x09<return self.sendIdx[aSelector] || 0>",
  12899. referencedClasses: [],
  12900. //>>excludeEnd("ide");
  12901. messageSends: []
  12902. }),
  12903. $globals.MethodContext);
  12904. $core.addMethod(
  12905. $core.method({
  12906. selector: "sendIndexes",
  12907. protocol: 'accessing',
  12908. fn: function (){
  12909. var self=this;
  12910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12911. return $core.withContext(function($ctx1) {
  12912. //>>excludeEnd("ctx");
  12913. return self.sendIdx;
  12914. return self;
  12915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12916. }, function($ctx1) {$ctx1.fill(self,"sendIndexes",{},$globals.MethodContext)});
  12917. //>>excludeEnd("ctx");
  12918. },
  12919. //>>excludeStart("ide", pragmas.excludeIdeData);
  12920. args: [],
  12921. source: "sendIndexes\x0a\x09<return self.sendIdx>",
  12922. referencedClasses: [],
  12923. //>>excludeEnd("ide");
  12924. messageSends: []
  12925. }),
  12926. $globals.MethodContext);
  12927. $core.addMethod(
  12928. $core.method({
  12929. selector: "supercall",
  12930. protocol: 'accessing',
  12931. fn: function (){
  12932. var self=this;
  12933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12934. return $core.withContext(function($ctx1) {
  12935. //>>excludeEnd("ctx");
  12936. return self.supercall == true;
  12937. return self;
  12938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12939. }, function($ctx1) {$ctx1.fill(self,"supercall",{},$globals.MethodContext)});
  12940. //>>excludeEnd("ctx");
  12941. },
  12942. //>>excludeStart("ide", pragmas.excludeIdeData);
  12943. args: [],
  12944. source: "supercall\x0a\x09<return self.supercall == true>",
  12945. referencedClasses: [],
  12946. //>>excludeEnd("ide");
  12947. messageSends: []
  12948. }),
  12949. $globals.MethodContext);
  12950. $core.addClass('NativeFunction', $globals.Object, [], 'Kernel-Methods');
  12951. //>>excludeStart("ide", pragmas.excludeIdeData);
  12952. $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' ]";
  12953. //>>excludeEnd("ide");
  12954. $core.addMethod(
  12955. $core.method({
  12956. selector: "constructor:",
  12957. protocol: 'instance creation',
  12958. fn: function (aString){
  12959. var self=this;
  12960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12961. return $core.withContext(function($ctx1) {
  12962. //>>excludeEnd("ctx");
  12963. self._deprecatedAPI_("Use constructorNamed:");
  12964. var nativeFunc=eval(aString);
  12965. return new nativeFunc();
  12966. ;
  12967. return self;
  12968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12969. }, function($ctx1) {$ctx1.fill(self,"constructor:",{aString:aString},$globals.NativeFunction.klass)});
  12970. //>>excludeEnd("ctx");
  12971. },
  12972. //>>excludeStart("ide", pragmas.excludeIdeData);
  12973. args: ["aString"],
  12974. source: "constructor: aString\x0a\x09<\x0a\x09\x09self._deprecatedAPI_(\x22Use constructorNamed:\x22);\x0a\x09\x09var nativeFunc=eval(aString);\x0a\x09\x09return new nativeFunc();\x0a\x09>",
  12975. referencedClasses: [],
  12976. //>>excludeEnd("ide");
  12977. messageSends: []
  12978. }),
  12979. $globals.NativeFunction.klass);
  12980. $core.addMethod(
  12981. $core.method({
  12982. selector: "constructor:value:",
  12983. protocol: 'instance creation',
  12984. fn: function (aString,anObject){
  12985. var self=this;
  12986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12987. return $core.withContext(function($ctx1) {
  12988. //>>excludeEnd("ctx");
  12989. self._deprecatedAPI_("Use constructorNamed:value:");
  12990. var nativeFunc=eval(aString);
  12991. return new nativeFunc(anObject);
  12992. ;
  12993. return self;
  12994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12995. }, function($ctx1) {$ctx1.fill(self,"constructor:value:",{aString:aString,anObject:anObject},$globals.NativeFunction.klass)});
  12996. //>>excludeEnd("ctx");
  12997. },
  12998. //>>excludeStart("ide", pragmas.excludeIdeData);
  12999. args: ["aString", "anObject"],
  13000. source: "constructor: aString value:anObject\x0a\x09<\x0a\x09\x09self._deprecatedAPI_(\x22Use constructorNamed:value:\x22);\x0a\x09\x09var nativeFunc=eval(aString);\x0a\x09\x09return new nativeFunc(anObject);\x0a\x09>",
  13001. referencedClasses: [],
  13002. //>>excludeEnd("ide");
  13003. messageSends: []
  13004. }),
  13005. $globals.NativeFunction.klass);
  13006. $core.addMethod(
  13007. $core.method({
  13008. selector: "constructor:value:value:",
  13009. protocol: 'instance creation',
  13010. fn: function (aString,anObject,anObject2){
  13011. var self=this;
  13012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13013. return $core.withContext(function($ctx1) {
  13014. //>>excludeEnd("ctx");
  13015. self._deprecatedAPI_("Use constructorNamed:value:value:");
  13016. var nativeFunc=eval(aString);
  13017. return new nativeFunc(anObject,anObject2);
  13018. ;
  13019. return self;
  13020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13021. }, function($ctx1) {$ctx1.fill(self,"constructor:value:value:",{aString:aString,anObject:anObject,anObject2:anObject2},$globals.NativeFunction.klass)});
  13022. //>>excludeEnd("ctx");
  13023. },
  13024. //>>excludeStart("ide", pragmas.excludeIdeData);
  13025. args: ["aString", "anObject", "anObject2"],
  13026. source: "constructor: aString value:anObject value: anObject2\x0a\x09<\x0a\x09\x09self._deprecatedAPI_(\x22Use constructorNamed:value:value:\x22);\x0a\x09\x09var nativeFunc=eval(aString);\x0a\x09\x09return new nativeFunc(anObject,anObject2);\x0a\x09>",
  13027. referencedClasses: [],
  13028. //>>excludeEnd("ide");
  13029. messageSends: []
  13030. }),
  13031. $globals.NativeFunction.klass);
  13032. $core.addMethod(
  13033. $core.method({
  13034. selector: "constructor:value:value:value:",
  13035. protocol: 'instance creation',
  13036. fn: function (aString,anObject,anObject2,anObject3){
  13037. var self=this;
  13038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13039. return $core.withContext(function($ctx1) {
  13040. //>>excludeEnd("ctx");
  13041. self._deprecatedAPI_("Use constructorNamed:value:value:value");
  13042. var nativeFunc=eval(aString);
  13043. return new nativeFunc(anObject,anObject2, anObject3);
  13044. ;
  13045. return self;
  13046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13047. }, function($ctx1) {$ctx1.fill(self,"constructor:value:value:value:",{aString:aString,anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.NativeFunction.klass)});
  13048. //>>excludeEnd("ctx");
  13049. },
  13050. //>>excludeStart("ide", pragmas.excludeIdeData);
  13051. args: ["aString", "anObject", "anObject2", "anObject3"],
  13052. source: "constructor: aString value:anObject value: anObject2 value:anObject3\x0a\x09<\x0a\x09\x09self._deprecatedAPI_(\x22Use constructorNamed:value:value:value\x22);\x0a\x09\x09var nativeFunc=eval(aString);\x0a\x09\x09return new nativeFunc(anObject,anObject2, anObject3);\x0a\x09>",
  13053. referencedClasses: [],
  13054. //>>excludeEnd("ide");
  13055. messageSends: []
  13056. }),
  13057. $globals.NativeFunction.klass);
  13058. $core.addMethod(
  13059. $core.method({
  13060. selector: "constructorNamed:",
  13061. protocol: 'instance creation',
  13062. fn: function (aString){
  13063. var self=this;
  13064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13065. return $core.withContext(function($ctx1) {
  13066. //>>excludeEnd("ctx");
  13067. var nativeFunc=(new Function('return this'))()[aString];
  13068. return new nativeFunc();
  13069. ;
  13070. return self;
  13071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13072. }, function($ctx1) {$ctx1.fill(self,"constructorNamed:",{aString:aString},$globals.NativeFunction.klass)});
  13073. //>>excludeEnd("ctx");
  13074. },
  13075. //>>excludeStart("ide", pragmas.excludeIdeData);
  13076. args: ["aString"],
  13077. source: "constructorNamed: aString\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return new nativeFunc();\x0a\x09>",
  13078. referencedClasses: [],
  13079. //>>excludeEnd("ide");
  13080. messageSends: []
  13081. }),
  13082. $globals.NativeFunction.klass);
  13083. $core.addMethod(
  13084. $core.method({
  13085. selector: "constructorNamed:value:",
  13086. protocol: 'instance creation',
  13087. fn: function (aString,anObject){
  13088. var self=this;
  13089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13090. return $core.withContext(function($ctx1) {
  13091. //>>excludeEnd("ctx");
  13092. var nativeFunc=(new Function('return this'))()[aString];
  13093. return new nativeFunc(anObject);
  13094. ;
  13095. return self;
  13096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13097. }, function($ctx1) {$ctx1.fill(self,"constructorNamed:value:",{aString:aString,anObject:anObject},$globals.NativeFunction.klass)});
  13098. //>>excludeEnd("ctx");
  13099. },
  13100. //>>excludeStart("ide", pragmas.excludeIdeData);
  13101. args: ["aString", "anObject"],
  13102. source: "constructorNamed: aString value: anObject\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return new nativeFunc(anObject);\x0a\x09>",
  13103. referencedClasses: [],
  13104. //>>excludeEnd("ide");
  13105. messageSends: []
  13106. }),
  13107. $globals.NativeFunction.klass);
  13108. $core.addMethod(
  13109. $core.method({
  13110. selector: "constructorNamed:value:value:",
  13111. protocol: 'instance creation',
  13112. fn: function (aString,anObject,anObject2){
  13113. var self=this;
  13114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13115. return $core.withContext(function($ctx1) {
  13116. //>>excludeEnd("ctx");
  13117. var nativeFunc=(new Function('return this'))()[aString];
  13118. return new nativeFunc(anObject,anObject2);
  13119. ;
  13120. return self;
  13121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13122. }, function($ctx1) {$ctx1.fill(self,"constructorNamed:value:value:",{aString:aString,anObject:anObject,anObject2:anObject2},$globals.NativeFunction.klass)});
  13123. //>>excludeEnd("ctx");
  13124. },
  13125. //>>excludeStart("ide", pragmas.excludeIdeData);
  13126. args: ["aString", "anObject", "anObject2"],
  13127. source: "constructorNamed: aString value: anObject value: anObject2\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return new nativeFunc(anObject,anObject2);\x0a\x09>",
  13128. referencedClasses: [],
  13129. //>>excludeEnd("ide");
  13130. messageSends: []
  13131. }),
  13132. $globals.NativeFunction.klass);
  13133. $core.addMethod(
  13134. $core.method({
  13135. selector: "constructorNamed:value:value:value:",
  13136. protocol: 'instance creation',
  13137. fn: function (aString,anObject,anObject2,anObject3){
  13138. var self=this;
  13139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13140. return $core.withContext(function($ctx1) {
  13141. //>>excludeEnd("ctx");
  13142. var nativeFunc=(new Function('return this'))()[aString];
  13143. return new nativeFunc(anObject,anObject2, anObject3);
  13144. ;
  13145. return self;
  13146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13147. }, function($ctx1) {$ctx1.fill(self,"constructorNamed:value:value:value:",{aString:aString,anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.NativeFunction.klass)});
  13148. //>>excludeEnd("ctx");
  13149. },
  13150. //>>excludeStart("ide", pragmas.excludeIdeData);
  13151. args: ["aString", "anObject", "anObject2", "anObject3"],
  13152. source: "constructorNamed: aString value: anObject value: anObject2 value: anObject3\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return new nativeFunc(anObject,anObject2, anObject3);\x0a\x09>",
  13153. referencedClasses: [],
  13154. //>>excludeEnd("ide");
  13155. messageSends: []
  13156. }),
  13157. $globals.NativeFunction.klass);
  13158. $core.addMethod(
  13159. $core.method({
  13160. selector: "constructorOf:",
  13161. protocol: 'instance creation',
  13162. fn: function (nativeFunc){
  13163. var self=this;
  13164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13165. return $core.withContext(function($ctx1) {
  13166. //>>excludeEnd("ctx");
  13167. return new nativeFunc();
  13168. ;
  13169. return self;
  13170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13171. }, function($ctx1) {$ctx1.fill(self,"constructorOf:",{nativeFunc:nativeFunc},$globals.NativeFunction.klass)});
  13172. //>>excludeEnd("ctx");
  13173. },
  13174. //>>excludeStart("ide", pragmas.excludeIdeData);
  13175. args: ["nativeFunc"],
  13176. source: "constructorOf: nativeFunc\x0a\x09<\x0a\x09\x09return new nativeFunc();\x0a\x09>",
  13177. referencedClasses: [],
  13178. //>>excludeEnd("ide");
  13179. messageSends: []
  13180. }),
  13181. $globals.NativeFunction.klass);
  13182. $core.addMethod(
  13183. $core.method({
  13184. selector: "constructorOf:value:",
  13185. protocol: 'instance creation',
  13186. fn: function (nativeFunc,anObject){
  13187. var self=this;
  13188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13189. return $core.withContext(function($ctx1) {
  13190. //>>excludeEnd("ctx");
  13191. return new nativeFunc(anObject);
  13192. ;
  13193. return self;
  13194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13195. }, function($ctx1) {$ctx1.fill(self,"constructorOf:value:",{nativeFunc:nativeFunc,anObject:anObject},$globals.NativeFunction.klass)});
  13196. //>>excludeEnd("ctx");
  13197. },
  13198. //>>excludeStart("ide", pragmas.excludeIdeData);
  13199. args: ["nativeFunc", "anObject"],
  13200. source: "constructorOf: nativeFunc value: anObject\x0a\x09<\x0a\x09\x09return new nativeFunc(anObject);\x0a\x09>",
  13201. referencedClasses: [],
  13202. //>>excludeEnd("ide");
  13203. messageSends: []
  13204. }),
  13205. $globals.NativeFunction.klass);
  13206. $core.addMethod(
  13207. $core.method({
  13208. selector: "constructorOf:value:value:",
  13209. protocol: 'instance creation',
  13210. fn: function (nativeFunc,anObject,anObject2){
  13211. var self=this;
  13212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13213. return $core.withContext(function($ctx1) {
  13214. //>>excludeEnd("ctx");
  13215. return new nativeFunc(anObject,anObject2);
  13216. ;
  13217. return self;
  13218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13219. }, function($ctx1) {$ctx1.fill(self,"constructorOf:value:value:",{nativeFunc:nativeFunc,anObject:anObject,anObject2:anObject2},$globals.NativeFunction.klass)});
  13220. //>>excludeEnd("ctx");
  13221. },
  13222. //>>excludeStart("ide", pragmas.excludeIdeData);
  13223. args: ["nativeFunc", "anObject", "anObject2"],
  13224. source: "constructorOf: nativeFunc value: anObject value: anObject2\x0a\x09<\x0a\x09\x09return new nativeFunc(anObject,anObject2);\x0a\x09>",
  13225. referencedClasses: [],
  13226. //>>excludeEnd("ide");
  13227. messageSends: []
  13228. }),
  13229. $globals.NativeFunction.klass);
  13230. $core.addMethod(
  13231. $core.method({
  13232. selector: "constructorOf:value:value:value:",
  13233. protocol: 'instance creation',
  13234. fn: function (nativeFunc,anObject,anObject2,anObject3){
  13235. var self=this;
  13236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13237. return $core.withContext(function($ctx1) {
  13238. //>>excludeEnd("ctx");
  13239. return new nativeFunc(anObject,anObject2, anObject3);
  13240. ;
  13241. return self;
  13242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13243. }, function($ctx1) {$ctx1.fill(self,"constructorOf:value:value:value:",{nativeFunc:nativeFunc,anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.NativeFunction.klass)});
  13244. //>>excludeEnd("ctx");
  13245. },
  13246. //>>excludeStart("ide", pragmas.excludeIdeData);
  13247. args: ["nativeFunc", "anObject", "anObject2", "anObject3"],
  13248. source: "constructorOf: nativeFunc value: anObject value: anObject2 value: anObject3\x0a\x09<\x0a\x09\x09return new nativeFunc(anObject,anObject2, anObject3);\x0a\x09>",
  13249. referencedClasses: [],
  13250. //>>excludeEnd("ide");
  13251. messageSends: []
  13252. }),
  13253. $globals.NativeFunction.klass);
  13254. $core.addMethod(
  13255. $core.method({
  13256. selector: "exists:",
  13257. protocol: 'testing',
  13258. fn: function (aString){
  13259. var self=this;
  13260. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  13261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13262. return $core.withContext(function($ctx1) {
  13263. //>>excludeEnd("ctx");
  13264. var $1;
  13265. $1=$recv($PlatformInterface())._existsGlobal_(aString);
  13266. return $1;
  13267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13268. }, function($ctx1) {$ctx1.fill(self,"exists:",{aString:aString},$globals.NativeFunction.klass)});
  13269. //>>excludeEnd("ctx");
  13270. },
  13271. //>>excludeStart("ide", pragmas.excludeIdeData);
  13272. args: ["aString"],
  13273. source: "exists: aString\x0a\x09^ PlatformInterface existsGlobal: aString",
  13274. referencedClasses: ["PlatformInterface"],
  13275. //>>excludeEnd("ide");
  13276. messageSends: ["existsGlobal:"]
  13277. }),
  13278. $globals.NativeFunction.klass);
  13279. $core.addMethod(
  13280. $core.method({
  13281. selector: "functionNamed:",
  13282. protocol: 'function calling',
  13283. fn: function (aString){
  13284. var self=this;
  13285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13286. return $core.withContext(function($ctx1) {
  13287. //>>excludeEnd("ctx");
  13288. var nativeFunc=(new Function('return this'))()[aString];
  13289. return nativeFunc();
  13290. ;
  13291. return self;
  13292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13293. }, function($ctx1) {$ctx1.fill(self,"functionNamed:",{aString:aString},$globals.NativeFunction.klass)});
  13294. //>>excludeEnd("ctx");
  13295. },
  13296. //>>excludeStart("ide", pragmas.excludeIdeData);
  13297. args: ["aString"],
  13298. source: "functionNamed: aString\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return nativeFunc();\x0a\x09>",
  13299. referencedClasses: [],
  13300. //>>excludeEnd("ide");
  13301. messageSends: []
  13302. }),
  13303. $globals.NativeFunction.klass);
  13304. $core.addMethod(
  13305. $core.method({
  13306. selector: "functionNamed:value:",
  13307. protocol: 'function calling',
  13308. fn: function (aString,anObject){
  13309. var self=this;
  13310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13311. return $core.withContext(function($ctx1) {
  13312. //>>excludeEnd("ctx");
  13313. var nativeFunc=(new Function('return this'))()[aString];
  13314. return nativeFunc(anObject);
  13315. ;
  13316. return self;
  13317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13318. }, function($ctx1) {$ctx1.fill(self,"functionNamed:value:",{aString:aString,anObject:anObject},$globals.NativeFunction.klass)});
  13319. //>>excludeEnd("ctx");
  13320. },
  13321. //>>excludeStart("ide", pragmas.excludeIdeData);
  13322. args: ["aString", "anObject"],
  13323. source: "functionNamed: aString value: anObject\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return nativeFunc(anObject);\x0a\x09>",
  13324. referencedClasses: [],
  13325. //>>excludeEnd("ide");
  13326. messageSends: []
  13327. }),
  13328. $globals.NativeFunction.klass);
  13329. $core.addMethod(
  13330. $core.method({
  13331. selector: "functionNamed:value:value:",
  13332. protocol: 'function calling',
  13333. fn: function (aString,anObject,anObject2){
  13334. var self=this;
  13335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13336. return $core.withContext(function($ctx1) {
  13337. //>>excludeEnd("ctx");
  13338. var nativeFunc=(new Function('return this'))()[aString];
  13339. return nativeFunc(anObject,anObject2);
  13340. ;
  13341. return self;
  13342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13343. }, function($ctx1) {$ctx1.fill(self,"functionNamed:value:value:",{aString:aString,anObject:anObject,anObject2:anObject2},$globals.NativeFunction.klass)});
  13344. //>>excludeEnd("ctx");
  13345. },
  13346. //>>excludeStart("ide", pragmas.excludeIdeData);
  13347. args: ["aString", "anObject", "anObject2"],
  13348. source: "functionNamed: aString value: anObject value: anObject2\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return nativeFunc(anObject,anObject2);\x0a\x09>",
  13349. referencedClasses: [],
  13350. //>>excludeEnd("ide");
  13351. messageSends: []
  13352. }),
  13353. $globals.NativeFunction.klass);
  13354. $core.addMethod(
  13355. $core.method({
  13356. selector: "functionNamed:value:value:value:",
  13357. protocol: 'function calling',
  13358. fn: function (aString,anObject,anObject2,anObject3){
  13359. var self=this;
  13360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13361. return $core.withContext(function($ctx1) {
  13362. //>>excludeEnd("ctx");
  13363. var nativeFunc=(new Function('return this'))()[aString];
  13364. return nativeFunc(anObject,anObject2, anObject3);
  13365. ;
  13366. return self;
  13367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13368. }, function($ctx1) {$ctx1.fill(self,"functionNamed:value:value:value:",{aString:aString,anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.NativeFunction.klass)});
  13369. //>>excludeEnd("ctx");
  13370. },
  13371. //>>excludeStart("ide", pragmas.excludeIdeData);
  13372. args: ["aString", "anObject", "anObject2", "anObject3"],
  13373. source: "functionNamed: aString value: anObject value: anObject2 value: anObject3\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return nativeFunc(anObject,anObject2, anObject3);\x0a\x09>",
  13374. referencedClasses: [],
  13375. //>>excludeEnd("ide");
  13376. messageSends: []
  13377. }),
  13378. $globals.NativeFunction.klass);
  13379. $core.addMethod(
  13380. $core.method({
  13381. selector: "functionNamed:valueWithArgs:",
  13382. protocol: 'function calling',
  13383. fn: function (aString,args){
  13384. var self=this;
  13385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13386. return $core.withContext(function($ctx1) {
  13387. //>>excludeEnd("ctx");
  13388. var nativeFunc=(new Function('return this'))()[aString];
  13389. return Function.prototype.apply.call(nativeFunc, null, args);
  13390. ;
  13391. return self;
  13392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13393. }, function($ctx1) {$ctx1.fill(self,"functionNamed:valueWithArgs:",{aString:aString,args:args},$globals.NativeFunction.klass)});
  13394. //>>excludeEnd("ctx");
  13395. },
  13396. //>>excludeStart("ide", pragmas.excludeIdeData);
  13397. args: ["aString", "args"],
  13398. source: "functionNamed: aString valueWithArgs: args\x0a\x09<\x0a\x09\x09var nativeFunc=(new Function('return this'))()[aString];\x0a\x09\x09return Function.prototype.apply.call(nativeFunc, null, args);\x0a\x09>",
  13399. referencedClasses: [],
  13400. //>>excludeEnd("ide");
  13401. messageSends: []
  13402. }),
  13403. $globals.NativeFunction.klass);
  13404. $core.addMethod(
  13405. $core.method({
  13406. selector: "functionOf:",
  13407. protocol: 'function calling',
  13408. fn: function (nativeFunc){
  13409. var self=this;
  13410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13411. return $core.withContext(function($ctx1) {
  13412. //>>excludeEnd("ctx");
  13413. return nativeFunc();
  13414. ;
  13415. return self;
  13416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13417. }, function($ctx1) {$ctx1.fill(self,"functionOf:",{nativeFunc:nativeFunc},$globals.NativeFunction.klass)});
  13418. //>>excludeEnd("ctx");
  13419. },
  13420. //>>excludeStart("ide", pragmas.excludeIdeData);
  13421. args: ["nativeFunc"],
  13422. source: "functionOf: nativeFunc\x0a\x09<\x0a\x09\x09return nativeFunc();\x0a\x09>",
  13423. referencedClasses: [],
  13424. //>>excludeEnd("ide");
  13425. messageSends: []
  13426. }),
  13427. $globals.NativeFunction.klass);
  13428. $core.addMethod(
  13429. $core.method({
  13430. selector: "functionOf:value:",
  13431. protocol: 'function calling',
  13432. fn: function (nativeFunc,anObject){
  13433. var self=this;
  13434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13435. return $core.withContext(function($ctx1) {
  13436. //>>excludeEnd("ctx");
  13437. return nativeFunc(anObject);
  13438. ;
  13439. return self;
  13440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13441. }, function($ctx1) {$ctx1.fill(self,"functionOf:value:",{nativeFunc:nativeFunc,anObject:anObject},$globals.NativeFunction.klass)});
  13442. //>>excludeEnd("ctx");
  13443. },
  13444. //>>excludeStart("ide", pragmas.excludeIdeData);
  13445. args: ["nativeFunc", "anObject"],
  13446. source: "functionOf: nativeFunc value: anObject\x0a\x09<\x0a\x09\x09return nativeFunc(anObject);\x0a\x09>",
  13447. referencedClasses: [],
  13448. //>>excludeEnd("ide");
  13449. messageSends: []
  13450. }),
  13451. $globals.NativeFunction.klass);
  13452. $core.addMethod(
  13453. $core.method({
  13454. selector: "functionOf:value:value:",
  13455. protocol: 'function calling',
  13456. fn: function (nativeFunc,anObject,anObject2){
  13457. var self=this;
  13458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13459. return $core.withContext(function($ctx1) {
  13460. //>>excludeEnd("ctx");
  13461. return nativeFunc(anObject,anObject2);
  13462. ;
  13463. return self;
  13464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13465. }, function($ctx1) {$ctx1.fill(self,"functionOf:value:value:",{nativeFunc:nativeFunc,anObject:anObject,anObject2:anObject2},$globals.NativeFunction.klass)});
  13466. //>>excludeEnd("ctx");
  13467. },
  13468. //>>excludeStart("ide", pragmas.excludeIdeData);
  13469. args: ["nativeFunc", "anObject", "anObject2"],
  13470. source: "functionOf: nativeFunc value: anObject value: anObject2\x0a\x09<\x0a\x09\x09return nativeFunc(anObject,anObject2);\x0a\x09>",
  13471. referencedClasses: [],
  13472. //>>excludeEnd("ide");
  13473. messageSends: []
  13474. }),
  13475. $globals.NativeFunction.klass);
  13476. $core.addMethod(
  13477. $core.method({
  13478. selector: "functionOf:value:value:value:",
  13479. protocol: 'function calling',
  13480. fn: function (nativeFunc,anObject,anObject2,anObject3){
  13481. var self=this;
  13482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13483. return $core.withContext(function($ctx1) {
  13484. //>>excludeEnd("ctx");
  13485. return nativeFunc(anObject,anObject2, anObject3);
  13486. ;
  13487. return self;
  13488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13489. }, function($ctx1) {$ctx1.fill(self,"functionOf:value:value:value:",{nativeFunc:nativeFunc,anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.NativeFunction.klass)});
  13490. //>>excludeEnd("ctx");
  13491. },
  13492. //>>excludeStart("ide", pragmas.excludeIdeData);
  13493. args: ["nativeFunc", "anObject", "anObject2", "anObject3"],
  13494. source: "functionOf: nativeFunc value: anObject value: anObject2 value: anObject3\x0a\x09<\x0a\x09\x09return nativeFunc(anObject,anObject2, anObject3);\x0a\x09>",
  13495. referencedClasses: [],
  13496. //>>excludeEnd("ide");
  13497. messageSends: []
  13498. }),
  13499. $globals.NativeFunction.klass);
  13500. $core.addMethod(
  13501. $core.method({
  13502. selector: "functionOf:valueWithArgs:",
  13503. protocol: 'function calling',
  13504. fn: function (nativeFunc,args){
  13505. var self=this;
  13506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13507. return $core.withContext(function($ctx1) {
  13508. //>>excludeEnd("ctx");
  13509. return Function.prototype.apply.call(nativeFunc, null, args);
  13510. ;
  13511. return self;
  13512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13513. }, function($ctx1) {$ctx1.fill(self,"functionOf:valueWithArgs:",{nativeFunc:nativeFunc,args:args},$globals.NativeFunction.klass)});
  13514. //>>excludeEnd("ctx");
  13515. },
  13516. //>>excludeStart("ide", pragmas.excludeIdeData);
  13517. args: ["nativeFunc", "args"],
  13518. source: "functionOf: nativeFunc valueWithArgs: args\x0a\x09<\x0a\x09\x09return Function.prototype.apply.call(nativeFunc, null, args);\x0a\x09>",
  13519. referencedClasses: [],
  13520. //>>excludeEnd("ide");
  13521. messageSends: []
  13522. }),
  13523. $globals.NativeFunction.klass);
  13524. $core.addMethod(
  13525. $core.method({
  13526. selector: "methodOf:this:",
  13527. protocol: 'method calling',
  13528. fn: function (nativeFunc,thisObject){
  13529. var self=this;
  13530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13531. return $core.withContext(function($ctx1) {
  13532. //>>excludeEnd("ctx");
  13533. return Function.prototype.call.call(nativeFunc, thisObject);
  13534. ;
  13535. return self;
  13536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13537. }, function($ctx1) {$ctx1.fill(self,"methodOf:this:",{nativeFunc:nativeFunc,thisObject:thisObject},$globals.NativeFunction.klass)});
  13538. //>>excludeEnd("ctx");
  13539. },
  13540. //>>excludeStart("ide", pragmas.excludeIdeData);
  13541. args: ["nativeFunc", "thisObject"],
  13542. source: "methodOf: nativeFunc this: thisObject\x0a\x09<\x0a\x09\x09return Function.prototype.call.call(nativeFunc, thisObject);\x0a\x09>",
  13543. referencedClasses: [],
  13544. //>>excludeEnd("ide");
  13545. messageSends: []
  13546. }),
  13547. $globals.NativeFunction.klass);
  13548. $core.addMethod(
  13549. $core.method({
  13550. selector: "methodOf:this:value:",
  13551. protocol: 'method calling',
  13552. fn: function (nativeFunc,thisObject,anObject){
  13553. var self=this;
  13554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13555. return $core.withContext(function($ctx1) {
  13556. //>>excludeEnd("ctx");
  13557. return Function.prototype.call.call(nativeFunc, thisObject, anObject);
  13558. ;
  13559. return self;
  13560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13561. }, function($ctx1) {$ctx1.fill(self,"methodOf:this:value:",{nativeFunc:nativeFunc,thisObject:thisObject,anObject:anObject},$globals.NativeFunction.klass)});
  13562. //>>excludeEnd("ctx");
  13563. },
  13564. //>>excludeStart("ide", pragmas.excludeIdeData);
  13565. args: ["nativeFunc", "thisObject", "anObject"],
  13566. source: "methodOf: nativeFunc this: thisObject value: anObject\x0a\x09<\x0a\x09\x09return Function.prototype.call.call(nativeFunc, thisObject, anObject);\x0a\x09>",
  13567. referencedClasses: [],
  13568. //>>excludeEnd("ide");
  13569. messageSends: []
  13570. }),
  13571. $globals.NativeFunction.klass);
  13572. $core.addMethod(
  13573. $core.method({
  13574. selector: "methodOf:this:value:value:",
  13575. protocol: 'method calling',
  13576. fn: function (nativeFunc,thisObject,anObject,anObject2){
  13577. var self=this;
  13578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13579. return $core.withContext(function($ctx1) {
  13580. //>>excludeEnd("ctx");
  13581. return Function.prototype.call.call(nativeFunc, thisObject,anObject,anObject2);
  13582. ;
  13583. return self;
  13584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13585. }, function($ctx1) {$ctx1.fill(self,"methodOf:this:value:value:",{nativeFunc:nativeFunc,thisObject:thisObject,anObject:anObject,anObject2:anObject2},$globals.NativeFunction.klass)});
  13586. //>>excludeEnd("ctx");
  13587. },
  13588. //>>excludeStart("ide", pragmas.excludeIdeData);
  13589. args: ["nativeFunc", "thisObject", "anObject", "anObject2"],
  13590. source: "methodOf: nativeFunc this: thisObject value: anObject value: anObject2\x0a\x09<\x0a\x09\x09return Function.prototype.call.call(nativeFunc, thisObject,anObject,anObject2);\x0a\x09>",
  13591. referencedClasses: [],
  13592. //>>excludeEnd("ide");
  13593. messageSends: []
  13594. }),
  13595. $globals.NativeFunction.klass);
  13596. $core.addMethod(
  13597. $core.method({
  13598. selector: "methodOf:this:value:value:value:",
  13599. protocol: 'method calling',
  13600. fn: function (nativeFunc,thisObject,anObject,anObject2,anObject3){
  13601. var self=this;
  13602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13603. return $core.withContext(function($ctx1) {
  13604. //>>excludeEnd("ctx");
  13605. return Function.prototype.call.call(nativeFunc, thisObject,anObject,anObject2, anObject3);
  13606. ;
  13607. return self;
  13608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13609. }, function($ctx1) {$ctx1.fill(self,"methodOf:this:value:value:value:",{nativeFunc:nativeFunc,thisObject:thisObject,anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.NativeFunction.klass)});
  13610. //>>excludeEnd("ctx");
  13611. },
  13612. //>>excludeStart("ide", pragmas.excludeIdeData);
  13613. args: ["nativeFunc", "thisObject", "anObject", "anObject2", "anObject3"],
  13614. source: "methodOf: nativeFunc this: thisObject value: anObject value: anObject2 value: anObject3\x0a\x09<\x0a\x09\x09return Function.prototype.call.call(nativeFunc, thisObject,anObject,anObject2, anObject3);\x0a\x09>",
  13615. referencedClasses: [],
  13616. //>>excludeEnd("ide");
  13617. messageSends: []
  13618. }),
  13619. $globals.NativeFunction.klass);
  13620. $core.addMethod(
  13621. $core.method({
  13622. selector: "methodOf:this:valueWithArgs:",
  13623. protocol: 'method calling',
  13624. fn: function (nativeFunc,thisObject,args){
  13625. var self=this;
  13626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13627. return $core.withContext(function($ctx1) {
  13628. //>>excludeEnd("ctx");
  13629. return Function.prototype.apply.call(nativeFunc, thisObject, args);
  13630. ;
  13631. return self;
  13632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13633. }, function($ctx1) {$ctx1.fill(self,"methodOf:this:valueWithArgs:",{nativeFunc:nativeFunc,thisObject:thisObject,args:args},$globals.NativeFunction.klass)});
  13634. //>>excludeEnd("ctx");
  13635. },
  13636. //>>excludeStart("ide", pragmas.excludeIdeData);
  13637. args: ["nativeFunc", "thisObject", "args"],
  13638. source: "methodOf: nativeFunc this: thisObject valueWithArgs: args\x0a\x09<\x0a\x09\x09return Function.prototype.apply.call(nativeFunc, thisObject, args);\x0a\x09>",
  13639. referencedClasses: [],
  13640. //>>excludeEnd("ide");
  13641. messageSends: []
  13642. }),
  13643. $globals.NativeFunction.klass);
  13644. $core.addClass('Timeout', $globals.Object, ['rawTimeout'], 'Kernel-Methods');
  13645. //>>excludeStart("ide", pragmas.excludeIdeData);
  13646. $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.";
  13647. //>>excludeEnd("ide");
  13648. $core.addMethod(
  13649. $core.method({
  13650. selector: "clearInterval",
  13651. protocol: 'timeout/interval',
  13652. fn: function (){
  13653. var self=this;
  13654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13655. return $core.withContext(function($ctx1) {
  13656. //>>excludeEnd("ctx");
  13657. var interval = self["@rawTimeout"];
  13658. clearInterval(interval);
  13659. ;
  13660. return self;
  13661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13662. }, function($ctx1) {$ctx1.fill(self,"clearInterval",{},$globals.Timeout)});
  13663. //>>excludeEnd("ctx");
  13664. },
  13665. //>>excludeStart("ide", pragmas.excludeIdeData);
  13666. args: [],
  13667. source: "clearInterval\x0a\x09<\x0a\x09\x09var interval = self[\x22@rawTimeout\x22];\x0a\x09\x09clearInterval(interval);\x0a\x09>",
  13668. referencedClasses: [],
  13669. //>>excludeEnd("ide");
  13670. messageSends: []
  13671. }),
  13672. $globals.Timeout);
  13673. $core.addMethod(
  13674. $core.method({
  13675. selector: "clearTimeout",
  13676. protocol: 'timeout/interval',
  13677. fn: function (){
  13678. var self=this;
  13679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13680. return $core.withContext(function($ctx1) {
  13681. //>>excludeEnd("ctx");
  13682. var timeout = self["@rawTimeout"];
  13683. clearTimeout(timeout);
  13684. ;
  13685. return self;
  13686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13687. }, function($ctx1) {$ctx1.fill(self,"clearTimeout",{},$globals.Timeout)});
  13688. //>>excludeEnd("ctx");
  13689. },
  13690. //>>excludeStart("ide", pragmas.excludeIdeData);
  13691. args: [],
  13692. source: "clearTimeout\x0a\x09<\x0a\x09\x09var timeout = self[\x22@rawTimeout\x22];\x0a\x09\x09clearTimeout(timeout);\x0a\x09>",
  13693. referencedClasses: [],
  13694. //>>excludeEnd("ide");
  13695. messageSends: []
  13696. }),
  13697. $globals.Timeout);
  13698. $core.addMethod(
  13699. $core.method({
  13700. selector: "rawTimeout:",
  13701. protocol: 'accessing',
  13702. fn: function (anObject){
  13703. var self=this;
  13704. self["@rawTimeout"]=anObject;
  13705. return self;
  13706. },
  13707. //>>excludeStart("ide", pragmas.excludeIdeData);
  13708. args: ["anObject"],
  13709. source: "rawTimeout: anObject\x0a\x09rawTimeout := anObject",
  13710. referencedClasses: [],
  13711. //>>excludeEnd("ide");
  13712. messageSends: []
  13713. }),
  13714. $globals.Timeout);
  13715. $core.addMethod(
  13716. $core.method({
  13717. selector: "on:",
  13718. protocol: 'instance creation',
  13719. fn: function (anObject){
  13720. var self=this;
  13721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13722. return $core.withContext(function($ctx1) {
  13723. //>>excludeEnd("ctx");
  13724. var $2,$3,$1;
  13725. $2=self._new();
  13726. $recv($2)._rawTimeout_(anObject);
  13727. $3=$recv($2)._yourself();
  13728. $1=$3;
  13729. return $1;
  13730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13731. }, function($ctx1) {$ctx1.fill(self,"on:",{anObject:anObject},$globals.Timeout.klass)});
  13732. //>>excludeEnd("ctx");
  13733. },
  13734. //>>excludeStart("ide", pragmas.excludeIdeData);
  13735. args: ["anObject"],
  13736. source: "on: anObject\x0a\x09^ self new rawTimeout: anObject; yourself",
  13737. referencedClasses: [],
  13738. //>>excludeEnd("ide");
  13739. messageSends: ["rawTimeout:", "new", "yourself"]
  13740. }),
  13741. $globals.Timeout.klass);
  13742. });
  13743. define("amber_core/Kernel-Collections", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  13744. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  13745. $core.addPackage('Kernel-Collections');
  13746. $core.packages["Kernel-Collections"].innerEval = function (expr) { return eval(expr); };
  13747. $core.packages["Kernel-Collections"].transport = {"type":"amd","amdNamespace":"amber_core"};
  13748. $core.addClass('Association', $globals.Object, ['key', 'value'], 'Kernel-Collections');
  13749. //>>excludeStart("ide", pragmas.excludeIdeData);
  13750. $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:`";
  13751. //>>excludeEnd("ide");
  13752. $core.addMethod(
  13753. $core.method({
  13754. selector: "=",
  13755. protocol: 'comparing',
  13756. fn: function (anAssociation){
  13757. var self=this;
  13758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13759. return $core.withContext(function($ctx1) {
  13760. //>>excludeEnd("ctx");
  13761. var $3,$2,$5,$4,$6,$1;
  13762. $3=self._class();
  13763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13764. $ctx1.sendIdx["class"]=1;
  13765. //>>excludeEnd("ctx");
  13766. $2=$recv($3).__eq($recv(anAssociation)._class());
  13767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13768. $ctx1.sendIdx["="]=1;
  13769. //>>excludeEnd("ctx");
  13770. $1=$recv($2)._and_((function(){
  13771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13772. return $core.withContext(function($ctx2) {
  13773. //>>excludeEnd("ctx");
  13774. $5=self._key();
  13775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13776. $ctx2.sendIdx["key"]=1;
  13777. //>>excludeEnd("ctx");
  13778. $4=$recv($5).__eq($recv(anAssociation)._key());
  13779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13780. $ctx2.sendIdx["="]=2;
  13781. //>>excludeEnd("ctx");
  13782. return $recv($4)._and_((function(){
  13783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13784. return $core.withContext(function($ctx3) {
  13785. //>>excludeEnd("ctx");
  13786. $6=self._value();
  13787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13788. $ctx3.sendIdx["value"]=1;
  13789. //>>excludeEnd("ctx");
  13790. return $recv($6).__eq($recv(anAssociation)._value());
  13791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13792. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  13793. //>>excludeEnd("ctx");
  13794. }));
  13795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13796. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  13797. //>>excludeEnd("ctx");
  13798. }));
  13799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13800. $ctx1.sendIdx["and:"]=1;
  13801. //>>excludeEnd("ctx");
  13802. return $1;
  13803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13804. }, function($ctx1) {$ctx1.fill(self,"=",{anAssociation:anAssociation},$globals.Association)});
  13805. //>>excludeEnd("ctx");
  13806. },
  13807. //>>excludeStart("ide", pragmas.excludeIdeData);
  13808. args: ["anAssociation"],
  13809. source: "= anAssociation\x0a\x09^ self class = anAssociation class and: [\x0a\x09\x09self key = anAssociation key and: [\x0a\x09\x09self value = anAssociation value ]]",
  13810. referencedClasses: [],
  13811. //>>excludeEnd("ide");
  13812. messageSends: ["and:", "=", "class", "key", "value"]
  13813. }),
  13814. $globals.Association);
  13815. $core.addMethod(
  13816. $core.method({
  13817. selector: "key",
  13818. protocol: 'accessing',
  13819. fn: function (){
  13820. var self=this;
  13821. var $1;
  13822. $1=self["@key"];
  13823. return $1;
  13824. },
  13825. //>>excludeStart("ide", pragmas.excludeIdeData);
  13826. args: [],
  13827. source: "key\x0a\x09^ key",
  13828. referencedClasses: [],
  13829. //>>excludeEnd("ide");
  13830. messageSends: []
  13831. }),
  13832. $globals.Association);
  13833. $core.addMethod(
  13834. $core.method({
  13835. selector: "key:",
  13836. protocol: 'accessing',
  13837. fn: function (aKey){
  13838. var self=this;
  13839. self["@key"]=aKey;
  13840. return self;
  13841. },
  13842. //>>excludeStart("ide", pragmas.excludeIdeData);
  13843. args: ["aKey"],
  13844. source: "key: aKey\x0a\x09key := aKey",
  13845. referencedClasses: [],
  13846. //>>excludeEnd("ide");
  13847. messageSends: []
  13848. }),
  13849. $globals.Association);
  13850. $core.addMethod(
  13851. $core.method({
  13852. selector: "printOn:",
  13853. protocol: 'printing',
  13854. fn: function (aStream){
  13855. var self=this;
  13856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13857. return $core.withContext(function($ctx1) {
  13858. //>>excludeEnd("ctx");
  13859. $recv(self._key())._printOn_(aStream);
  13860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13861. $ctx1.sendIdx["printOn:"]=1;
  13862. //>>excludeEnd("ctx");
  13863. $recv(aStream)._nextPutAll_(" -> ");
  13864. $recv(self._value())._printOn_(aStream);
  13865. return self;
  13866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13867. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Association)});
  13868. //>>excludeEnd("ctx");
  13869. },
  13870. //>>excludeStart("ide", pragmas.excludeIdeData);
  13871. args: ["aStream"],
  13872. source: "printOn: aStream\x0a\x09self key printOn: aStream.\x0a\x09aStream nextPutAll: ' -> '.\x0a\x09self value printOn: aStream",
  13873. referencedClasses: [],
  13874. //>>excludeEnd("ide");
  13875. messageSends: ["printOn:", "key", "nextPutAll:", "value"]
  13876. }),
  13877. $globals.Association);
  13878. $core.addMethod(
  13879. $core.method({
  13880. selector: "value",
  13881. protocol: 'accessing',
  13882. fn: function (){
  13883. var self=this;
  13884. var $1;
  13885. $1=self["@value"];
  13886. return $1;
  13887. },
  13888. //>>excludeStart("ide", pragmas.excludeIdeData);
  13889. args: [],
  13890. source: "value\x0a\x09^ value",
  13891. referencedClasses: [],
  13892. //>>excludeEnd("ide");
  13893. messageSends: []
  13894. }),
  13895. $globals.Association);
  13896. $core.addMethod(
  13897. $core.method({
  13898. selector: "value:",
  13899. protocol: 'accessing',
  13900. fn: function (aValue){
  13901. var self=this;
  13902. self["@value"]=aValue;
  13903. return self;
  13904. },
  13905. //>>excludeStart("ide", pragmas.excludeIdeData);
  13906. args: ["aValue"],
  13907. source: "value: aValue\x0a\x09value := aValue",
  13908. referencedClasses: [],
  13909. //>>excludeEnd("ide");
  13910. messageSends: []
  13911. }),
  13912. $globals.Association);
  13913. $core.addMethod(
  13914. $core.method({
  13915. selector: "key:value:",
  13916. protocol: 'instance creation',
  13917. fn: function (aKey,aValue){
  13918. var self=this;
  13919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13920. return $core.withContext(function($ctx1) {
  13921. //>>excludeEnd("ctx");
  13922. var $2,$3,$1;
  13923. $2=self._new();
  13924. $recv($2)._key_(aKey);
  13925. $recv($2)._value_(aValue);
  13926. $3=$recv($2)._yourself();
  13927. $1=$3;
  13928. return $1;
  13929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13930. }, function($ctx1) {$ctx1.fill(self,"key:value:",{aKey:aKey,aValue:aValue},$globals.Association.klass)});
  13931. //>>excludeEnd("ctx");
  13932. },
  13933. //>>excludeStart("ide", pragmas.excludeIdeData);
  13934. args: ["aKey", "aValue"],
  13935. source: "key: aKey value: aValue\x0a\x09\x09^ self new\x0a\x09\x09key: aKey;\x0a\x09\x09value: aValue;\x0a\x09\x09yourself",
  13936. referencedClasses: [],
  13937. //>>excludeEnd("ide");
  13938. messageSends: ["key:", "new", "value:", "yourself"]
  13939. }),
  13940. $globals.Association.klass);
  13941. $core.addClass('BucketStore', $globals.Object, ['buckets', 'hashBlock'], 'Kernel-Collections');
  13942. //>>excludeStart("ide", pragmas.excludeIdeData);
  13943. $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`.";
  13944. //>>excludeEnd("ide");
  13945. $core.addMethod(
  13946. $core.method({
  13947. selector: "bucketOfElement:",
  13948. protocol: 'accessing',
  13949. fn: function (anObject){
  13950. var self=this;
  13951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13952. return $core.withContext(function($ctx1) {
  13953. //>>excludeEnd("ctx");
  13954. var hash = self['@hashBlock'](anObject);
  13955. if (!hash) return null;
  13956. var buckets = self['@buckets'],
  13957. bucket = buckets[hash];
  13958. if (!bucket) { bucket = buckets[hash] = self._newBucket(); }
  13959. return bucket;
  13960. ;
  13961. return self;
  13962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13963. }, function($ctx1) {$ctx1.fill(self,"bucketOfElement:",{anObject:anObject},$globals.BucketStore)});
  13964. //>>excludeEnd("ctx");
  13965. },
  13966. //>>excludeStart("ide", pragmas.excludeIdeData);
  13967. args: ["anObject"],
  13968. 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>",
  13969. referencedClasses: [],
  13970. //>>excludeEnd("ide");
  13971. messageSends: []
  13972. }),
  13973. $globals.BucketStore);
  13974. $core.addMethod(
  13975. $core.method({
  13976. selector: "do:",
  13977. protocol: 'enumerating',
  13978. fn: function (aBlock){
  13979. var self=this;
  13980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13981. return $core.withContext(function($ctx1) {
  13982. //>>excludeEnd("ctx");
  13983. var buckets = self['@buckets'];
  13984. var keys = Object.keys(buckets);
  13985. for (var i = 0; i < keys.length; ++i) { buckets[keys[i]]._do_(aBlock); }
  13986. ;
  13987. return self;
  13988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13989. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.BucketStore)});
  13990. //>>excludeEnd("ctx");
  13991. },
  13992. //>>excludeStart("ide", pragmas.excludeIdeData);
  13993. args: ["aBlock"],
  13994. 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>",
  13995. referencedClasses: [],
  13996. //>>excludeEnd("ide");
  13997. messageSends: []
  13998. }),
  13999. $globals.BucketStore);
  14000. $core.addMethod(
  14001. $core.method({
  14002. selector: "hashBlock:",
  14003. protocol: 'accessing',
  14004. fn: function (aBlock){
  14005. var self=this;
  14006. self["@hashBlock"]=aBlock;
  14007. return self;
  14008. },
  14009. //>>excludeStart("ide", pragmas.excludeIdeData);
  14010. args: ["aBlock"],
  14011. source: "hashBlock: aBlock\x0a\x09hashBlock := aBlock",
  14012. referencedClasses: [],
  14013. //>>excludeEnd("ide");
  14014. messageSends: []
  14015. }),
  14016. $globals.BucketStore);
  14017. $core.addMethod(
  14018. $core.method({
  14019. selector: "initialize",
  14020. protocol: 'initialization',
  14021. fn: function (){
  14022. var self=this;
  14023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14024. return $core.withContext(function($ctx1) {
  14025. //>>excludeEnd("ctx");
  14026. (
  14027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14028. $ctx1.supercall = true,
  14029. //>>excludeEnd("ctx");
  14030. $globals.BucketStore.superclass.fn.prototype._initialize.apply($recv(self), []));
  14031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14032. $ctx1.supercall = false;
  14033. //>>excludeEnd("ctx");;
  14034. self._removeAll();
  14035. return self;
  14036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14037. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.BucketStore)});
  14038. //>>excludeEnd("ctx");
  14039. },
  14040. //>>excludeStart("ide", pragmas.excludeIdeData);
  14041. args: [],
  14042. source: "initialize\x0a\x09super initialize.\x0a\x09self removeAll",
  14043. referencedClasses: [],
  14044. //>>excludeEnd("ide");
  14045. messageSends: ["initialize", "removeAll"]
  14046. }),
  14047. $globals.BucketStore);
  14048. $core.addMethod(
  14049. $core.method({
  14050. selector: "newBucket",
  14051. protocol: 'private',
  14052. fn: function (){
  14053. var self=this;
  14054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14055. return $core.withContext(function($ctx1) {
  14056. //>>excludeEnd("ctx");
  14057. self._subclassResponsibility();
  14058. return self;
  14059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14060. }, function($ctx1) {$ctx1.fill(self,"newBucket",{},$globals.BucketStore)});
  14061. //>>excludeEnd("ctx");
  14062. },
  14063. //>>excludeStart("ide", pragmas.excludeIdeData);
  14064. args: [],
  14065. source: "newBucket\x0a\x09self subclassResponsibility",
  14066. referencedClasses: [],
  14067. //>>excludeEnd("ide");
  14068. messageSends: ["subclassResponsibility"]
  14069. }),
  14070. $globals.BucketStore);
  14071. $core.addMethod(
  14072. $core.method({
  14073. selector: "removeAll",
  14074. protocol: 'adding/removing',
  14075. fn: function (){
  14076. var self=this;
  14077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14078. return $core.withContext(function($ctx1) {
  14079. //>>excludeEnd("ctx");
  14080. self['@buckets'] = Object.create(null);;
  14081. return self;
  14082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14083. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.BucketStore)});
  14084. //>>excludeEnd("ctx");
  14085. },
  14086. //>>excludeStart("ide", pragmas.excludeIdeData);
  14087. args: [],
  14088. source: "removeAll\x0a\x09<self['@buckets'] = Object.create(null);>",
  14089. referencedClasses: [],
  14090. //>>excludeEnd("ide");
  14091. messageSends: []
  14092. }),
  14093. $globals.BucketStore);
  14094. $core.addMethod(
  14095. $core.method({
  14096. selector: "hashBlock:",
  14097. protocol: 'instance creation',
  14098. fn: function (aBlock){
  14099. var self=this;
  14100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14101. return $core.withContext(function($ctx1) {
  14102. //>>excludeEnd("ctx");
  14103. var $2,$3,$1;
  14104. $2=self._new();
  14105. $recv($2)._hashBlock_(aBlock);
  14106. $3=$recv($2)._yourself();
  14107. $1=$3;
  14108. return $1;
  14109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14110. }, function($ctx1) {$ctx1.fill(self,"hashBlock:",{aBlock:aBlock},$globals.BucketStore.klass)});
  14111. //>>excludeEnd("ctx");
  14112. },
  14113. //>>excludeStart("ide", pragmas.excludeIdeData);
  14114. args: ["aBlock"],
  14115. source: "hashBlock: aBlock\x0a\x09^ self new\x0a\x09\x09hashBlock: aBlock;\x0a\x09\x09yourself",
  14116. referencedClasses: [],
  14117. //>>excludeEnd("ide");
  14118. messageSends: ["hashBlock:", "new", "yourself"]
  14119. }),
  14120. $globals.BucketStore.klass);
  14121. $core.addClass('ArrayBucketStore', $globals.BucketStore, [], 'Kernel-Collections');
  14122. //>>excludeStart("ide", pragmas.excludeIdeData);
  14123. $globals.ArrayBucketStore.comment="I am a concrete `BucketStore` with buckets being instance of `Array`.";
  14124. //>>excludeEnd("ide");
  14125. $core.addMethod(
  14126. $core.method({
  14127. selector: "newBucket",
  14128. protocol: 'private',
  14129. fn: function (){
  14130. var self=this;
  14131. var $1;
  14132. $1=[];
  14133. return $1;
  14134. },
  14135. //>>excludeStart("ide", pragmas.excludeIdeData);
  14136. args: [],
  14137. source: "newBucket\x0a\x09^ #()",
  14138. referencedClasses: [],
  14139. //>>excludeEnd("ide");
  14140. messageSends: []
  14141. }),
  14142. $globals.ArrayBucketStore);
  14143. $core.addClass('Collection', $globals.Object, [], 'Kernel-Collections');
  14144. //>>excludeStart("ide", pragmas.excludeIdeData);
  14145. $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.";
  14146. //>>excludeEnd("ide");
  14147. $core.addMethod(
  14148. $core.method({
  14149. selector: ",",
  14150. protocol: 'copying',
  14151. fn: function (aCollection){
  14152. var self=this;
  14153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14154. return $core.withContext(function($ctx1) {
  14155. //>>excludeEnd("ctx");
  14156. var $2,$3,$1;
  14157. $2=self._copy();
  14158. $recv($2)._addAll_(aCollection);
  14159. $3=$recv($2)._yourself();
  14160. $1=$3;
  14161. return $1;
  14162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14163. }, function($ctx1) {$ctx1.fill(self,",",{aCollection:aCollection},$globals.Collection)});
  14164. //>>excludeEnd("ctx");
  14165. },
  14166. //>>excludeStart("ide", pragmas.excludeIdeData);
  14167. args: ["aCollection"],
  14168. source: ", aCollection\x0a\x09^ self copy\x0a\x09\x09addAll: aCollection;\x0a\x09\x09yourself",
  14169. referencedClasses: [],
  14170. //>>excludeEnd("ide");
  14171. messageSends: ["addAll:", "copy", "yourself"]
  14172. }),
  14173. $globals.Collection);
  14174. $core.addMethod(
  14175. $core.method({
  14176. selector: "add:",
  14177. protocol: 'adding/removing',
  14178. fn: function (anObject){
  14179. var self=this;
  14180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14181. return $core.withContext(function($ctx1) {
  14182. //>>excludeEnd("ctx");
  14183. self._subclassResponsibility();
  14184. return self;
  14185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14186. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject},$globals.Collection)});
  14187. //>>excludeEnd("ctx");
  14188. },
  14189. //>>excludeStart("ide", pragmas.excludeIdeData);
  14190. args: ["anObject"],
  14191. source: "add: anObject\x0a\x09self subclassResponsibility",
  14192. referencedClasses: [],
  14193. //>>excludeEnd("ide");
  14194. messageSends: ["subclassResponsibility"]
  14195. }),
  14196. $globals.Collection);
  14197. $core.addMethod(
  14198. $core.method({
  14199. selector: "addAll:",
  14200. protocol: 'adding/removing',
  14201. fn: function (aCollection){
  14202. var self=this;
  14203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14204. return $core.withContext(function($ctx1) {
  14205. //>>excludeEnd("ctx");
  14206. $recv(aCollection)._do_((function(each){
  14207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14208. return $core.withContext(function($ctx2) {
  14209. //>>excludeEnd("ctx");
  14210. return self._add_(each);
  14211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14212. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14213. //>>excludeEnd("ctx");
  14214. }));
  14215. return aCollection;
  14216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14217. }, function($ctx1) {$ctx1.fill(self,"addAll:",{aCollection:aCollection},$globals.Collection)});
  14218. //>>excludeEnd("ctx");
  14219. },
  14220. //>>excludeStart("ide", pragmas.excludeIdeData);
  14221. args: ["aCollection"],
  14222. source: "addAll: aCollection\x0a\x09aCollection do: [ :each |\x0a\x09\x09self add: each ].\x0a\x09^ aCollection",
  14223. referencedClasses: [],
  14224. //>>excludeEnd("ide");
  14225. messageSends: ["do:", "add:"]
  14226. }),
  14227. $globals.Collection);
  14228. $core.addMethod(
  14229. $core.method({
  14230. selector: "allSatisfy:",
  14231. protocol: 'enumerating',
  14232. fn: function (aBlock){
  14233. var self=this;
  14234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14235. return $core.withContext(function($ctx1) {
  14236. //>>excludeEnd("ctx");
  14237. var $1;
  14238. var $early={};
  14239. try {
  14240. self._do_((function(each){
  14241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14242. return $core.withContext(function($ctx2) {
  14243. //>>excludeEnd("ctx");
  14244. $1=$recv(aBlock)._value_(each);
  14245. if(!$core.assert($1)){
  14246. throw $early=[false];
  14247. };
  14248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14249. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14250. //>>excludeEnd("ctx");
  14251. }));
  14252. return true;
  14253. }
  14254. catch(e) {if(e===$early)return e[0]; throw e}
  14255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14256. }, function($ctx1) {$ctx1.fill(self,"allSatisfy:",{aBlock:aBlock},$globals.Collection)});
  14257. //>>excludeEnd("ctx");
  14258. },
  14259. //>>excludeStart("ide", pragmas.excludeIdeData);
  14260. args: ["aBlock"],
  14261. 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",
  14262. referencedClasses: [],
  14263. //>>excludeEnd("ide");
  14264. messageSends: ["do:", "ifFalse:", "value:"]
  14265. }),
  14266. $globals.Collection);
  14267. $core.addMethod(
  14268. $core.method({
  14269. selector: "anyOne",
  14270. protocol: 'adding/removing',
  14271. fn: function (){
  14272. var self=this;
  14273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14274. return $core.withContext(function($ctx1) {
  14275. //>>excludeEnd("ctx");
  14276. var $early={};
  14277. try {
  14278. self._ifEmpty_((function(){
  14279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14280. return $core.withContext(function($ctx2) {
  14281. //>>excludeEnd("ctx");
  14282. return self._error_("Collection is empty");
  14283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14284. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14285. //>>excludeEnd("ctx");
  14286. }));
  14287. self._do_((function(each){
  14288. throw $early=[each];
  14289. }));
  14290. return self;
  14291. }
  14292. catch(e) {if(e===$early)return e[0]; throw e}
  14293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14294. }, function($ctx1) {$ctx1.fill(self,"anyOne",{},$globals.Collection)});
  14295. //>>excludeEnd("ctx");
  14296. },
  14297. //>>excludeStart("ide", pragmas.excludeIdeData);
  14298. args: [],
  14299. 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 ]",
  14300. referencedClasses: [],
  14301. //>>excludeEnd("ide");
  14302. messageSends: ["ifEmpty:", "error:", "do:"]
  14303. }),
  14304. $globals.Collection);
  14305. $core.addMethod(
  14306. $core.method({
  14307. selector: "anySatisfy:",
  14308. protocol: 'enumerating',
  14309. fn: function (aBlock){
  14310. var self=this;
  14311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14312. return $core.withContext(function($ctx1) {
  14313. //>>excludeEnd("ctx");
  14314. var $1;
  14315. var $early={};
  14316. try {
  14317. self._do_((function(each){
  14318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14319. return $core.withContext(function($ctx2) {
  14320. //>>excludeEnd("ctx");
  14321. $1=$recv(aBlock)._value_(each);
  14322. if($core.assert($1)){
  14323. throw $early=[true];
  14324. };
  14325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14326. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14327. //>>excludeEnd("ctx");
  14328. }));
  14329. return false;
  14330. }
  14331. catch(e) {if(e===$early)return e[0]; throw e}
  14332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14333. }, function($ctx1) {$ctx1.fill(self,"anySatisfy:",{aBlock:aBlock},$globals.Collection)});
  14334. //>>excludeEnd("ctx");
  14335. },
  14336. //>>excludeStart("ide", pragmas.excludeIdeData);
  14337. args: ["aBlock"],
  14338. 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",
  14339. referencedClasses: [],
  14340. //>>excludeEnd("ide");
  14341. messageSends: ["do:", "ifTrue:", "value:"]
  14342. }),
  14343. $globals.Collection);
  14344. $core.addMethod(
  14345. $core.method({
  14346. selector: "asArray",
  14347. protocol: 'converting',
  14348. fn: function (){
  14349. var self=this;
  14350. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  14351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14352. return $core.withContext(function($ctx1) {
  14353. //>>excludeEnd("ctx");
  14354. var $1;
  14355. $1=$recv($Array())._withAll_(self);
  14356. return $1;
  14357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14358. }, function($ctx1) {$ctx1.fill(self,"asArray",{},$globals.Collection)});
  14359. //>>excludeEnd("ctx");
  14360. },
  14361. //>>excludeStart("ide", pragmas.excludeIdeData);
  14362. args: [],
  14363. source: "asArray\x0a\x09^ Array withAll: self",
  14364. referencedClasses: ["Array"],
  14365. //>>excludeEnd("ide");
  14366. messageSends: ["withAll:"]
  14367. }),
  14368. $globals.Collection);
  14369. $core.addMethod(
  14370. $core.method({
  14371. selector: "asJSON",
  14372. protocol: 'converting',
  14373. fn: function (){
  14374. var self=this;
  14375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14376. return $core.withContext(function($ctx1) {
  14377. //>>excludeEnd("ctx");
  14378. var $1;
  14379. $1=$recv(self._asArray())._collect_((function(each){
  14380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14381. return $core.withContext(function($ctx2) {
  14382. //>>excludeEnd("ctx");
  14383. return $recv(each)._asJSON();
  14384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14385. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14386. //>>excludeEnd("ctx");
  14387. }));
  14388. return $1;
  14389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14390. }, function($ctx1) {$ctx1.fill(self,"asJSON",{},$globals.Collection)});
  14391. //>>excludeEnd("ctx");
  14392. },
  14393. //>>excludeStart("ide", pragmas.excludeIdeData);
  14394. args: [],
  14395. source: "asJSON\x0a\x09^ self asArray collect: [ :each | each asJSON ]",
  14396. referencedClasses: [],
  14397. //>>excludeEnd("ide");
  14398. messageSends: ["collect:", "asArray", "asJSON"]
  14399. }),
  14400. $globals.Collection);
  14401. $core.addMethod(
  14402. $core.method({
  14403. selector: "asOrderedCollection",
  14404. protocol: 'converting',
  14405. fn: function (){
  14406. var self=this;
  14407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14408. return $core.withContext(function($ctx1) {
  14409. //>>excludeEnd("ctx");
  14410. var $1;
  14411. $1=self._asArray();
  14412. return $1;
  14413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14414. }, function($ctx1) {$ctx1.fill(self,"asOrderedCollection",{},$globals.Collection)});
  14415. //>>excludeEnd("ctx");
  14416. },
  14417. //>>excludeStart("ide", pragmas.excludeIdeData);
  14418. args: [],
  14419. source: "asOrderedCollection\x0a\x09^ self asArray",
  14420. referencedClasses: [],
  14421. //>>excludeEnd("ide");
  14422. messageSends: ["asArray"]
  14423. }),
  14424. $globals.Collection);
  14425. $core.addMethod(
  14426. $core.method({
  14427. selector: "asSet",
  14428. protocol: 'converting',
  14429. fn: function (){
  14430. var self=this;
  14431. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  14432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14433. return $core.withContext(function($ctx1) {
  14434. //>>excludeEnd("ctx");
  14435. var $1;
  14436. $1=$recv($Set())._withAll_(self);
  14437. return $1;
  14438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14439. }, function($ctx1) {$ctx1.fill(self,"asSet",{},$globals.Collection)});
  14440. //>>excludeEnd("ctx");
  14441. },
  14442. //>>excludeStart("ide", pragmas.excludeIdeData);
  14443. args: [],
  14444. source: "asSet\x0a\x09^ Set withAll: self",
  14445. referencedClasses: ["Set"],
  14446. //>>excludeEnd("ide");
  14447. messageSends: ["withAll:"]
  14448. }),
  14449. $globals.Collection);
  14450. $core.addMethod(
  14451. $core.method({
  14452. selector: "collect:",
  14453. protocol: 'enumerating',
  14454. fn: function (aBlock){
  14455. var self=this;
  14456. var stream;
  14457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14458. return $core.withContext(function($ctx1) {
  14459. //>>excludeEnd("ctx");
  14460. var $1;
  14461. stream=$recv($recv(self._class())._new())._writeStream();
  14462. self._do_((function(each){
  14463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14464. return $core.withContext(function($ctx2) {
  14465. //>>excludeEnd("ctx");
  14466. return $recv(stream)._nextPut_($recv(aBlock)._value_(each));
  14467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14468. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14469. //>>excludeEnd("ctx");
  14470. }));
  14471. $1=$recv(stream)._contents();
  14472. return $1;
  14473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14474. }, function($ctx1) {$ctx1.fill(self,"collect:",{aBlock:aBlock,stream:stream},$globals.Collection)});
  14475. //>>excludeEnd("ctx");
  14476. },
  14477. //>>excludeStart("ide", pragmas.excludeIdeData);
  14478. args: ["aBlock"],
  14479. 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",
  14480. referencedClasses: [],
  14481. //>>excludeEnd("ide");
  14482. messageSends: ["writeStream", "new", "class", "do:", "nextPut:", "value:", "contents"]
  14483. }),
  14484. $globals.Collection);
  14485. $core.addMethod(
  14486. $core.method({
  14487. selector: "copyWith:",
  14488. protocol: 'copying',
  14489. fn: function (anObject){
  14490. var self=this;
  14491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14492. return $core.withContext(function($ctx1) {
  14493. //>>excludeEnd("ctx");
  14494. var $2,$3,$1;
  14495. $2=self._copy();
  14496. $recv($2)._add_(anObject);
  14497. $3=$recv($2)._yourself();
  14498. $1=$3;
  14499. return $1;
  14500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14501. }, function($ctx1) {$ctx1.fill(self,"copyWith:",{anObject:anObject},$globals.Collection)});
  14502. //>>excludeEnd("ctx");
  14503. },
  14504. //>>excludeStart("ide", pragmas.excludeIdeData);
  14505. args: ["anObject"],
  14506. source: "copyWith: anObject\x0a\x09^ self copy add: anObject; yourself",
  14507. referencedClasses: [],
  14508. //>>excludeEnd("ide");
  14509. messageSends: ["add:", "copy", "yourself"]
  14510. }),
  14511. $globals.Collection);
  14512. $core.addMethod(
  14513. $core.method({
  14514. selector: "copyWithAll:",
  14515. protocol: 'copying',
  14516. fn: function (aCollection){
  14517. var self=this;
  14518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14519. return $core.withContext(function($ctx1) {
  14520. //>>excludeEnd("ctx");
  14521. var $2,$3,$1;
  14522. $2=self._copy();
  14523. $recv($2)._addAll_(aCollection);
  14524. $3=$recv($2)._yourself();
  14525. $1=$3;
  14526. return $1;
  14527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14528. }, function($ctx1) {$ctx1.fill(self,"copyWithAll:",{aCollection:aCollection},$globals.Collection)});
  14529. //>>excludeEnd("ctx");
  14530. },
  14531. //>>excludeStart("ide", pragmas.excludeIdeData);
  14532. args: ["aCollection"],
  14533. source: "copyWithAll: aCollection\x0a\x09^ self copy addAll: aCollection; yourself",
  14534. referencedClasses: [],
  14535. //>>excludeEnd("ide");
  14536. messageSends: ["addAll:", "copy", "yourself"]
  14537. }),
  14538. $globals.Collection);
  14539. $core.addMethod(
  14540. $core.method({
  14541. selector: "copyWithoutAll:",
  14542. protocol: 'copying',
  14543. fn: function (aCollection){
  14544. var self=this;
  14545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14546. return $core.withContext(function($ctx1) {
  14547. //>>excludeEnd("ctx");
  14548. var $1;
  14549. $1=self._reject_((function(each){
  14550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14551. return $core.withContext(function($ctx2) {
  14552. //>>excludeEnd("ctx");
  14553. return $recv(aCollection)._includes_(each);
  14554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14555. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14556. //>>excludeEnd("ctx");
  14557. }));
  14558. return $1;
  14559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14560. }, function($ctx1) {$ctx1.fill(self,"copyWithoutAll:",{aCollection:aCollection},$globals.Collection)});
  14561. //>>excludeEnd("ctx");
  14562. },
  14563. //>>excludeStart("ide", pragmas.excludeIdeData);
  14564. args: ["aCollection"],
  14565. 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 ]",
  14566. referencedClasses: [],
  14567. //>>excludeEnd("ide");
  14568. messageSends: ["reject:", "includes:"]
  14569. }),
  14570. $globals.Collection);
  14571. $core.addMethod(
  14572. $core.method({
  14573. selector: "detect:",
  14574. protocol: 'enumerating',
  14575. fn: function (aBlock){
  14576. var self=this;
  14577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14578. return $core.withContext(function($ctx1) {
  14579. //>>excludeEnd("ctx");
  14580. var $1;
  14581. $1=self._detect_ifNone_(aBlock,(function(){
  14582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14583. return $core.withContext(function($ctx2) {
  14584. //>>excludeEnd("ctx");
  14585. return self._errorNotFound();
  14586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14587. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14588. //>>excludeEnd("ctx");
  14589. }));
  14590. return $1;
  14591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14592. }, function($ctx1) {$ctx1.fill(self,"detect:",{aBlock:aBlock},$globals.Collection)});
  14593. //>>excludeEnd("ctx");
  14594. },
  14595. //>>excludeStart("ide", pragmas.excludeIdeData);
  14596. args: ["aBlock"],
  14597. source: "detect: aBlock\x0a\x09^ self detect: aBlock ifNone: [ self errorNotFound ]",
  14598. referencedClasses: [],
  14599. //>>excludeEnd("ide");
  14600. messageSends: ["detect:ifNone:", "errorNotFound"]
  14601. }),
  14602. $globals.Collection);
  14603. $core.addMethod(
  14604. $core.method({
  14605. selector: "detect:ifNone:",
  14606. protocol: 'enumerating',
  14607. fn: function (aBlock,anotherBlock){
  14608. var self=this;
  14609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14610. return $core.withContext(function($ctx1) {
  14611. //>>excludeEnd("ctx");
  14612. self._subclassResponsibility();
  14613. return self;
  14614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14615. }, function($ctx1) {$ctx1.fill(self,"detect:ifNone:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Collection)});
  14616. //>>excludeEnd("ctx");
  14617. },
  14618. //>>excludeStart("ide", pragmas.excludeIdeData);
  14619. args: ["aBlock", "anotherBlock"],
  14620. source: "detect: aBlock ifNone: anotherBlock\x0a\x09self subclassResponsibility",
  14621. referencedClasses: [],
  14622. //>>excludeEnd("ide");
  14623. messageSends: ["subclassResponsibility"]
  14624. }),
  14625. $globals.Collection);
  14626. $core.addMethod(
  14627. $core.method({
  14628. selector: "do:",
  14629. protocol: 'enumerating',
  14630. fn: function (aBlock){
  14631. var self=this;
  14632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14633. return $core.withContext(function($ctx1) {
  14634. //>>excludeEnd("ctx");
  14635. self._subclassResponsibility();
  14636. return self;
  14637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14638. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.Collection)});
  14639. //>>excludeEnd("ctx");
  14640. },
  14641. //>>excludeStart("ide", pragmas.excludeIdeData);
  14642. args: ["aBlock"],
  14643. source: "do: aBlock\x0a\x09self subclassResponsibility",
  14644. referencedClasses: [],
  14645. //>>excludeEnd("ide");
  14646. messageSends: ["subclassResponsibility"]
  14647. }),
  14648. $globals.Collection);
  14649. $core.addMethod(
  14650. $core.method({
  14651. selector: "do:separatedBy:",
  14652. protocol: 'enumerating',
  14653. fn: function (aBlock,anotherBlock){
  14654. var self=this;
  14655. var actionBeforeElement;
  14656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14657. return $core.withContext(function($ctx1) {
  14658. //>>excludeEnd("ctx");
  14659. actionBeforeElement=(function(){
  14660. actionBeforeElement=anotherBlock;
  14661. return actionBeforeElement;
  14662. });
  14663. self._do_((function(each){
  14664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14665. return $core.withContext(function($ctx2) {
  14666. //>>excludeEnd("ctx");
  14667. $recv(actionBeforeElement)._value();
  14668. return $recv(aBlock)._value_(each);
  14669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14670. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  14671. //>>excludeEnd("ctx");
  14672. }));
  14673. return self;
  14674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14675. }, function($ctx1) {$ctx1.fill(self,"do:separatedBy:",{aBlock:aBlock,anotherBlock:anotherBlock,actionBeforeElement:actionBeforeElement},$globals.Collection)});
  14676. //>>excludeEnd("ctx");
  14677. },
  14678. //>>excludeStart("ide", pragmas.excludeIdeData);
  14679. args: ["aBlock", "anotherBlock"],
  14680. 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 ]",
  14681. referencedClasses: [],
  14682. //>>excludeEnd("ide");
  14683. messageSends: ["do:", "value", "value:"]
  14684. }),
  14685. $globals.Collection);
  14686. $core.addMethod(
  14687. $core.method({
  14688. selector: "errorNotFound",
  14689. protocol: 'error handling',
  14690. fn: function (){
  14691. var self=this;
  14692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14693. return $core.withContext(function($ctx1) {
  14694. //>>excludeEnd("ctx");
  14695. self._error_("Object is not in the collection");
  14696. return self;
  14697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14698. }, function($ctx1) {$ctx1.fill(self,"errorNotFound",{},$globals.Collection)});
  14699. //>>excludeEnd("ctx");
  14700. },
  14701. //>>excludeStart("ide", pragmas.excludeIdeData);
  14702. args: [],
  14703. source: "errorNotFound\x0a\x09self error: 'Object is not in the collection'",
  14704. referencedClasses: [],
  14705. //>>excludeEnd("ide");
  14706. messageSends: ["error:"]
  14707. }),
  14708. $globals.Collection);
  14709. $core.addMethod(
  14710. $core.method({
  14711. selector: "ifEmpty:",
  14712. protocol: 'testing',
  14713. fn: function (aBlock){
  14714. var self=this;
  14715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14716. return $core.withContext(function($ctx1) {
  14717. //>>excludeEnd("ctx");
  14718. var $2,$1;
  14719. $2=self._isEmpty();
  14720. $1=$recv($2)._ifTrue_ifFalse_(aBlock,(function(){
  14721. return self;
  14722. }));
  14723. return $1;
  14724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14725. }, function($ctx1) {$ctx1.fill(self,"ifEmpty:",{aBlock:aBlock},$globals.Collection)});
  14726. //>>excludeEnd("ctx");
  14727. },
  14728. //>>excludeStart("ide", pragmas.excludeIdeData);
  14729. args: ["aBlock"],
  14730. 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 ]",
  14731. referencedClasses: [],
  14732. //>>excludeEnd("ide");
  14733. messageSends: ["ifTrue:ifFalse:", "isEmpty"]
  14734. }),
  14735. $globals.Collection);
  14736. $core.addMethod(
  14737. $core.method({
  14738. selector: "ifEmpty:ifNotEmpty:",
  14739. protocol: 'testing',
  14740. fn: function (aBlock,anotherBlock){
  14741. var self=this;
  14742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14743. return $core.withContext(function($ctx1) {
  14744. //>>excludeEnd("ctx");
  14745. var $2,$1;
  14746. $2=self._isEmpty();
  14747. $1=$recv($2)._ifTrue_ifFalse_(aBlock,(function(){
  14748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14749. return $core.withContext(function($ctx2) {
  14750. //>>excludeEnd("ctx");
  14751. return $recv(anotherBlock)._value_(self);
  14752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14753. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14754. //>>excludeEnd("ctx");
  14755. }));
  14756. return $1;
  14757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14758. }, function($ctx1) {$ctx1.fill(self,"ifEmpty:ifNotEmpty:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Collection)});
  14759. //>>excludeEnd("ctx");
  14760. },
  14761. //>>excludeStart("ide", pragmas.excludeIdeData);
  14762. args: ["aBlock", "anotherBlock"],
  14763. source: "ifEmpty: aBlock ifNotEmpty: anotherBlock\x0a\x09^ self isEmpty\x0a\x09\x09ifTrue: aBlock\x0a\x09\x09ifFalse: [ anotherBlock value: self ]",
  14764. referencedClasses: [],
  14765. //>>excludeEnd("ide");
  14766. messageSends: ["ifTrue:ifFalse:", "isEmpty", "value:"]
  14767. }),
  14768. $globals.Collection);
  14769. $core.addMethod(
  14770. $core.method({
  14771. selector: "ifNotEmpty:",
  14772. protocol: 'testing',
  14773. fn: function (aBlock){
  14774. var self=this;
  14775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14776. return $core.withContext(function($ctx1) {
  14777. //>>excludeEnd("ctx");
  14778. var $2,$1;
  14779. $2=self._notEmpty();
  14780. if($core.assert($2)){
  14781. $1=$recv(aBlock)._value_(self);
  14782. } else {
  14783. $1=self;
  14784. };
  14785. return $1;
  14786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14787. }, function($ctx1) {$ctx1.fill(self,"ifNotEmpty:",{aBlock:aBlock},$globals.Collection)});
  14788. //>>excludeEnd("ctx");
  14789. },
  14790. //>>excludeStart("ide", pragmas.excludeIdeData);
  14791. args: ["aBlock"],
  14792. source: "ifNotEmpty: aBlock\x0a\x09^ self notEmpty\x0a\x09\x09ifTrue: [ aBlock value: self ]\x0a\x09\x09ifFalse: [ self ]",
  14793. referencedClasses: [],
  14794. //>>excludeEnd("ide");
  14795. messageSends: ["ifTrue:ifFalse:", "notEmpty", "value:"]
  14796. }),
  14797. $globals.Collection);
  14798. $core.addMethod(
  14799. $core.method({
  14800. selector: "ifNotEmpty:ifEmpty:",
  14801. protocol: 'testing',
  14802. fn: function (aBlock,anotherBlock){
  14803. var self=this;
  14804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14805. return $core.withContext(function($ctx1) {
  14806. //>>excludeEnd("ctx");
  14807. var $2,$1;
  14808. $2=self._notEmpty();
  14809. $1=$recv($2)._ifTrue_ifFalse_((function(){
  14810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14811. return $core.withContext(function($ctx2) {
  14812. //>>excludeEnd("ctx");
  14813. return $recv(aBlock)._value_(self);
  14814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14815. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14816. //>>excludeEnd("ctx");
  14817. }),anotherBlock);
  14818. return $1;
  14819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14820. }, function($ctx1) {$ctx1.fill(self,"ifNotEmpty:ifEmpty:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Collection)});
  14821. //>>excludeEnd("ctx");
  14822. },
  14823. //>>excludeStart("ide", pragmas.excludeIdeData);
  14824. args: ["aBlock", "anotherBlock"],
  14825. source: "ifNotEmpty: aBlock ifEmpty: anotherBlock\x0a\x09^ self notEmpty\x0a\x09\x09ifTrue: [ aBlock value: self ]\x0a\x09\x09ifFalse: anotherBlock",
  14826. referencedClasses: [],
  14827. //>>excludeEnd("ide");
  14828. messageSends: ["ifTrue:ifFalse:", "notEmpty", "value:"]
  14829. }),
  14830. $globals.Collection);
  14831. $core.addMethod(
  14832. $core.method({
  14833. selector: "includes:",
  14834. protocol: 'testing',
  14835. fn: function (anObject){
  14836. var self=this;
  14837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14838. return $core.withContext(function($ctx1) {
  14839. //>>excludeEnd("ctx");
  14840. var $1;
  14841. $1=self._anySatisfy_((function(each){
  14842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14843. return $core.withContext(function($ctx2) {
  14844. //>>excludeEnd("ctx");
  14845. return $recv(each).__eq(anObject);
  14846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14847. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14848. //>>excludeEnd("ctx");
  14849. }));
  14850. return $1;
  14851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14852. }, function($ctx1) {$ctx1.fill(self,"includes:",{anObject:anObject},$globals.Collection)});
  14853. //>>excludeEnd("ctx");
  14854. },
  14855. //>>excludeStart("ide", pragmas.excludeIdeData);
  14856. args: ["anObject"],
  14857. source: "includes: anObject\x0a\x09^ self anySatisfy: [ :each | each = anObject ]",
  14858. referencedClasses: [],
  14859. //>>excludeEnd("ide");
  14860. messageSends: ["anySatisfy:", "="]
  14861. }),
  14862. $globals.Collection);
  14863. $core.addMethod(
  14864. $core.method({
  14865. selector: "inject:into:",
  14866. protocol: 'enumerating',
  14867. fn: function (anObject,aBlock){
  14868. var self=this;
  14869. var result;
  14870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14871. return $core.withContext(function($ctx1) {
  14872. //>>excludeEnd("ctx");
  14873. var $1;
  14874. result=anObject;
  14875. self._do_((function(each){
  14876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14877. return $core.withContext(function($ctx2) {
  14878. //>>excludeEnd("ctx");
  14879. result=$recv(aBlock)._value_value_(result,each);
  14880. return result;
  14881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14882. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14883. //>>excludeEnd("ctx");
  14884. }));
  14885. $1=result;
  14886. return $1;
  14887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14888. }, function($ctx1) {$ctx1.fill(self,"inject:into:",{anObject:anObject,aBlock:aBlock,result:result},$globals.Collection)});
  14889. //>>excludeEnd("ctx");
  14890. },
  14891. //>>excludeStart("ide", pragmas.excludeIdeData);
  14892. args: ["anObject", "aBlock"],
  14893. 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",
  14894. referencedClasses: [],
  14895. //>>excludeEnd("ide");
  14896. messageSends: ["do:", "value:value:"]
  14897. }),
  14898. $globals.Collection);
  14899. $core.addMethod(
  14900. $core.method({
  14901. selector: "intersection:",
  14902. protocol: 'enumerating',
  14903. fn: function (aCollection){
  14904. var self=this;
  14905. var set,outputSet;
  14906. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  14907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14908. return $core.withContext(function($ctx1) {
  14909. //>>excludeEnd("ctx");
  14910. var $2,$1,$3;
  14911. set=self._asSet();
  14912. outputSet=$recv($Set())._new();
  14913. $recv(aCollection)._do_((function(each){
  14914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14915. return $core.withContext(function($ctx2) {
  14916. //>>excludeEnd("ctx");
  14917. $2=$recv(set)._includes_(each);
  14918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14919. $ctx2.sendIdx["includes:"]=1;
  14920. //>>excludeEnd("ctx");
  14921. $1=$recv($2)._and_((function(){
  14922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14923. return $core.withContext(function($ctx3) {
  14924. //>>excludeEnd("ctx");
  14925. return $recv($recv(outputSet)._includes_(each))._not();
  14926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14927. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  14928. //>>excludeEnd("ctx");
  14929. }));
  14930. if($core.assert($1)){
  14931. return $recv(outputSet)._add_(each);
  14932. };
  14933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14934. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14935. //>>excludeEnd("ctx");
  14936. }));
  14937. $3=$recv(self._class())._withAll_($recv(outputSet)._asArray());
  14938. return $3;
  14939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14940. }, function($ctx1) {$ctx1.fill(self,"intersection:",{aCollection:aCollection,set:set,outputSet:outputSet},$globals.Collection)});
  14941. //>>excludeEnd("ctx");
  14942. },
  14943. //>>excludeStart("ide", pragmas.excludeIdeData);
  14944. args: ["aCollection"],
  14945. 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",
  14946. referencedClasses: ["Set"],
  14947. //>>excludeEnd("ide");
  14948. messageSends: ["asSet", "new", "do:", "ifTrue:", "and:", "includes:", "not", "add:", "withAll:", "class", "asArray"]
  14949. }),
  14950. $globals.Collection);
  14951. $core.addMethod(
  14952. $core.method({
  14953. selector: "isEmpty",
  14954. protocol: 'testing',
  14955. fn: function (){
  14956. var self=this;
  14957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14958. return $core.withContext(function($ctx1) {
  14959. //>>excludeEnd("ctx");
  14960. var $1;
  14961. $1=$recv(self._size()).__eq((0));
  14962. return $1;
  14963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14964. }, function($ctx1) {$ctx1.fill(self,"isEmpty",{},$globals.Collection)});
  14965. //>>excludeEnd("ctx");
  14966. },
  14967. //>>excludeStart("ide", pragmas.excludeIdeData);
  14968. args: [],
  14969. source: "isEmpty\x0a\x09^ self size = 0",
  14970. referencedClasses: [],
  14971. //>>excludeEnd("ide");
  14972. messageSends: ["=", "size"]
  14973. }),
  14974. $globals.Collection);
  14975. $core.addMethod(
  14976. $core.method({
  14977. selector: "noneSatisfy:",
  14978. protocol: 'enumerating',
  14979. fn: function (aBlock){
  14980. var self=this;
  14981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14982. return $core.withContext(function($ctx1) {
  14983. //>>excludeEnd("ctx");
  14984. var $1;
  14985. var $early={};
  14986. try {
  14987. self._do_((function(item){
  14988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14989. return $core.withContext(function($ctx2) {
  14990. //>>excludeEnd("ctx");
  14991. $1=$recv(aBlock)._value_(item);
  14992. if($core.assert($1)){
  14993. throw $early=[false];
  14994. };
  14995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14996. }, function($ctx2) {$ctx2.fillBlock({item:item},$ctx1,1)});
  14997. //>>excludeEnd("ctx");
  14998. }));
  14999. return true;
  15000. }
  15001. catch(e) {if(e===$early)return e[0]; throw e}
  15002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15003. }, function($ctx1) {$ctx1.fill(self,"noneSatisfy:",{aBlock:aBlock},$globals.Collection)});
  15004. //>>excludeEnd("ctx");
  15005. },
  15006. //>>excludeStart("ide", pragmas.excludeIdeData);
  15007. args: ["aBlock"],
  15008. 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",
  15009. referencedClasses: [],
  15010. //>>excludeEnd("ide");
  15011. messageSends: ["do:", "ifTrue:", "value:"]
  15012. }),
  15013. $globals.Collection);
  15014. $core.addMethod(
  15015. $core.method({
  15016. selector: "notEmpty",
  15017. protocol: 'testing',
  15018. fn: function (){
  15019. var self=this;
  15020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15021. return $core.withContext(function($ctx1) {
  15022. //>>excludeEnd("ctx");
  15023. var $1;
  15024. $1=$recv(self._isEmpty())._not();
  15025. return $1;
  15026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15027. }, function($ctx1) {$ctx1.fill(self,"notEmpty",{},$globals.Collection)});
  15028. //>>excludeEnd("ctx");
  15029. },
  15030. //>>excludeStart("ide", pragmas.excludeIdeData);
  15031. args: [],
  15032. source: "notEmpty\x0a\x09^ self isEmpty not",
  15033. referencedClasses: [],
  15034. //>>excludeEnd("ide");
  15035. messageSends: ["not", "isEmpty"]
  15036. }),
  15037. $globals.Collection);
  15038. $core.addMethod(
  15039. $core.method({
  15040. selector: "occurrencesOf:",
  15041. protocol: 'accessing',
  15042. fn: function (anObject){
  15043. var self=this;
  15044. var tally;
  15045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15046. return $core.withContext(function($ctx1) {
  15047. //>>excludeEnd("ctx");
  15048. var $1,$2;
  15049. tally=(0);
  15050. self._do_((function(each){
  15051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15052. return $core.withContext(function($ctx2) {
  15053. //>>excludeEnd("ctx");
  15054. $1=$recv(anObject).__eq(each);
  15055. if($core.assert($1)){
  15056. tally=$recv(tally).__plus((1));
  15057. return tally;
  15058. };
  15059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15060. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15061. //>>excludeEnd("ctx");
  15062. }));
  15063. $2=tally;
  15064. return $2;
  15065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15066. }, function($ctx1) {$ctx1.fill(self,"occurrencesOf:",{anObject:anObject,tally:tally},$globals.Collection)});
  15067. //>>excludeEnd("ctx");
  15068. },
  15069. //>>excludeStart("ide", pragmas.excludeIdeData);
  15070. args: ["anObject"],
  15071. 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",
  15072. referencedClasses: [],
  15073. //>>excludeEnd("ide");
  15074. messageSends: ["do:", "ifTrue:", "=", "+"]
  15075. }),
  15076. $globals.Collection);
  15077. $core.addMethod(
  15078. $core.method({
  15079. selector: "putOn:",
  15080. protocol: 'streaming',
  15081. fn: function (aStream){
  15082. var self=this;
  15083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15084. return $core.withContext(function($ctx1) {
  15085. //>>excludeEnd("ctx");
  15086. self._do_((function(each){
  15087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15088. return $core.withContext(function($ctx2) {
  15089. //>>excludeEnd("ctx");
  15090. return $recv(each)._putOn_(aStream);
  15091. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15092. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15093. //>>excludeEnd("ctx");
  15094. }));
  15095. return self;
  15096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15097. }, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},$globals.Collection)});
  15098. //>>excludeEnd("ctx");
  15099. },
  15100. //>>excludeStart("ide", pragmas.excludeIdeData);
  15101. args: ["aStream"],
  15102. source: "putOn: aStream\x0a\x09self do: [ :each | each putOn: aStream ]",
  15103. referencedClasses: [],
  15104. //>>excludeEnd("ide");
  15105. messageSends: ["do:", "putOn:"]
  15106. }),
  15107. $globals.Collection);
  15108. $core.addMethod(
  15109. $core.method({
  15110. selector: "reject:",
  15111. protocol: 'enumerating',
  15112. fn: function (aBlock){
  15113. var self=this;
  15114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15115. return $core.withContext(function($ctx1) {
  15116. //>>excludeEnd("ctx");
  15117. var $1;
  15118. $1=self._select_((function(each){
  15119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15120. return $core.withContext(function($ctx2) {
  15121. //>>excludeEnd("ctx");
  15122. return $recv($recv(aBlock)._value_(each)).__eq(false);
  15123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15124. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15125. //>>excludeEnd("ctx");
  15126. }));
  15127. return $1;
  15128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15129. }, function($ctx1) {$ctx1.fill(self,"reject:",{aBlock:aBlock},$globals.Collection)});
  15130. //>>excludeEnd("ctx");
  15131. },
  15132. //>>excludeStart("ide", pragmas.excludeIdeData);
  15133. args: ["aBlock"],
  15134. source: "reject: aBlock\x0a\x09^ self select: [ :each | (aBlock value: each) = false ]",
  15135. referencedClasses: [],
  15136. //>>excludeEnd("ide");
  15137. messageSends: ["select:", "=", "value:"]
  15138. }),
  15139. $globals.Collection);
  15140. $core.addMethod(
  15141. $core.method({
  15142. selector: "remove:",
  15143. protocol: 'adding/removing',
  15144. fn: function (anObject){
  15145. var self=this;
  15146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15147. return $core.withContext(function($ctx1) {
  15148. //>>excludeEnd("ctx");
  15149. var $1;
  15150. $1=self._remove_ifAbsent_(anObject,(function(){
  15151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15152. return $core.withContext(function($ctx2) {
  15153. //>>excludeEnd("ctx");
  15154. return self._errorNotFound();
  15155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15156. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  15157. //>>excludeEnd("ctx");
  15158. }));
  15159. return $1;
  15160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15161. }, function($ctx1) {$ctx1.fill(self,"remove:",{anObject:anObject},$globals.Collection)});
  15162. //>>excludeEnd("ctx");
  15163. },
  15164. //>>excludeStart("ide", pragmas.excludeIdeData);
  15165. args: ["anObject"],
  15166. source: "remove: anObject\x0a\x09^ self remove: anObject ifAbsent: [ self errorNotFound ]",
  15167. referencedClasses: [],
  15168. //>>excludeEnd("ide");
  15169. messageSends: ["remove:ifAbsent:", "errorNotFound"]
  15170. }),
  15171. $globals.Collection);
  15172. $core.addMethod(
  15173. $core.method({
  15174. selector: "remove:ifAbsent:",
  15175. protocol: 'adding/removing',
  15176. fn: function (anObject,aBlock){
  15177. var self=this;
  15178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15179. return $core.withContext(function($ctx1) {
  15180. //>>excludeEnd("ctx");
  15181. self._subclassResponsibility();
  15182. return self;
  15183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15184. }, function($ctx1) {$ctx1.fill(self,"remove:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.Collection)});
  15185. //>>excludeEnd("ctx");
  15186. },
  15187. //>>excludeStart("ide", pragmas.excludeIdeData);
  15188. args: ["anObject", "aBlock"],
  15189. source: "remove: anObject ifAbsent: aBlock\x0a\x09self subclassResponsibility",
  15190. referencedClasses: [],
  15191. //>>excludeEnd("ide");
  15192. messageSends: ["subclassResponsibility"]
  15193. }),
  15194. $globals.Collection);
  15195. $core.addMethod(
  15196. $core.method({
  15197. selector: "removeAll",
  15198. protocol: 'adding/removing',
  15199. fn: function (){
  15200. var self=this;
  15201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15202. return $core.withContext(function($ctx1) {
  15203. //>>excludeEnd("ctx");
  15204. self._subclassResponsibility();
  15205. return self;
  15206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15207. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.Collection)});
  15208. //>>excludeEnd("ctx");
  15209. },
  15210. //>>excludeStart("ide", pragmas.excludeIdeData);
  15211. args: [],
  15212. source: "removeAll\x0a\x09self subclassResponsibility",
  15213. referencedClasses: [],
  15214. //>>excludeEnd("ide");
  15215. messageSends: ["subclassResponsibility"]
  15216. }),
  15217. $globals.Collection);
  15218. $core.addMethod(
  15219. $core.method({
  15220. selector: "select:",
  15221. protocol: 'enumerating',
  15222. fn: function (aBlock){
  15223. var self=this;
  15224. var stream;
  15225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15226. return $core.withContext(function($ctx1) {
  15227. //>>excludeEnd("ctx");
  15228. var $1,$2;
  15229. stream=$recv($recv(self._class())._new())._writeStream();
  15230. self._do_((function(each){
  15231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15232. return $core.withContext(function($ctx2) {
  15233. //>>excludeEnd("ctx");
  15234. $1=$recv(aBlock)._value_(each);
  15235. if($core.assert($1)){
  15236. return $recv(stream)._nextPut_(each);
  15237. };
  15238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15239. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15240. //>>excludeEnd("ctx");
  15241. }));
  15242. $2=$recv(stream)._contents();
  15243. return $2;
  15244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15245. }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,stream:stream},$globals.Collection)});
  15246. //>>excludeEnd("ctx");
  15247. },
  15248. //>>excludeStart("ide", pragmas.excludeIdeData);
  15249. args: ["aBlock"],
  15250. 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",
  15251. referencedClasses: [],
  15252. //>>excludeEnd("ide");
  15253. messageSends: ["writeStream", "new", "class", "do:", "ifTrue:", "value:", "nextPut:", "contents"]
  15254. }),
  15255. $globals.Collection);
  15256. $core.addMethod(
  15257. $core.method({
  15258. selector: "select:thenCollect:",
  15259. protocol: 'enumerating',
  15260. fn: function (selectBlock,collectBlock){
  15261. var self=this;
  15262. var stream;
  15263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15264. return $core.withContext(function($ctx1) {
  15265. //>>excludeEnd("ctx");
  15266. var $1,$2;
  15267. stream=$recv($recv(self._class())._new())._writeStream();
  15268. self._do_((function(each){
  15269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15270. return $core.withContext(function($ctx2) {
  15271. //>>excludeEnd("ctx");
  15272. $1=$recv(selectBlock)._value_(each);
  15273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15274. $ctx2.sendIdx["value:"]=1;
  15275. //>>excludeEnd("ctx");
  15276. if($core.assert($1)){
  15277. return $recv(stream)._nextPut_($recv(collectBlock)._value_(each));
  15278. };
  15279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15280. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15281. //>>excludeEnd("ctx");
  15282. }));
  15283. $2=$recv(stream)._contents();
  15284. return $2;
  15285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15286. }, function($ctx1) {$ctx1.fill(self,"select:thenCollect:",{selectBlock:selectBlock,collectBlock:collectBlock,stream:stream},$globals.Collection)});
  15287. //>>excludeEnd("ctx");
  15288. },
  15289. //>>excludeStart("ide", pragmas.excludeIdeData);
  15290. args: ["selectBlock", "collectBlock"],
  15291. 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",
  15292. referencedClasses: [],
  15293. //>>excludeEnd("ide");
  15294. messageSends: ["writeStream", "new", "class", "do:", "ifTrue:", "value:", "nextPut:", "contents"]
  15295. }),
  15296. $globals.Collection);
  15297. $core.addMethod(
  15298. $core.method({
  15299. selector: "size",
  15300. protocol: 'accessing',
  15301. fn: function (){
  15302. var self=this;
  15303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15304. return $core.withContext(function($ctx1) {
  15305. //>>excludeEnd("ctx");
  15306. self._subclassResponsibility();
  15307. return self;
  15308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15309. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Collection)});
  15310. //>>excludeEnd("ctx");
  15311. },
  15312. //>>excludeStart("ide", pragmas.excludeIdeData);
  15313. args: [],
  15314. source: "size\x0a\x09self subclassResponsibility",
  15315. referencedClasses: [],
  15316. //>>excludeEnd("ide");
  15317. messageSends: ["subclassResponsibility"]
  15318. }),
  15319. $globals.Collection);
  15320. $core.addMethod(
  15321. $core.method({
  15322. selector: "classTag",
  15323. protocol: 'accessing',
  15324. fn: function (){
  15325. var self=this;
  15326. return "collection";
  15327. },
  15328. //>>excludeStart("ide", pragmas.excludeIdeData);
  15329. args: [],
  15330. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'collection'",
  15331. referencedClasses: [],
  15332. //>>excludeEnd("ide");
  15333. messageSends: []
  15334. }),
  15335. $globals.Collection.klass);
  15336. $core.addMethod(
  15337. $core.method({
  15338. selector: "new:",
  15339. protocol: 'instance creation',
  15340. fn: function (anInteger){
  15341. var self=this;
  15342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15343. return $core.withContext(function($ctx1) {
  15344. //>>excludeEnd("ctx");
  15345. var $1;
  15346. $1=self._new();
  15347. return $1;
  15348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15349. }, function($ctx1) {$ctx1.fill(self,"new:",{anInteger:anInteger},$globals.Collection.klass)});
  15350. //>>excludeEnd("ctx");
  15351. },
  15352. //>>excludeStart("ide", pragmas.excludeIdeData);
  15353. args: ["anInteger"],
  15354. source: "new: anInteger\x0a\x09^ self new",
  15355. referencedClasses: [],
  15356. //>>excludeEnd("ide");
  15357. messageSends: ["new"]
  15358. }),
  15359. $globals.Collection.klass);
  15360. $core.addMethod(
  15361. $core.method({
  15362. selector: "with:",
  15363. protocol: 'instance creation',
  15364. fn: function (anObject){
  15365. var self=this;
  15366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15367. return $core.withContext(function($ctx1) {
  15368. //>>excludeEnd("ctx");
  15369. var $2,$3,$1;
  15370. $2=self._new();
  15371. $recv($2)._add_(anObject);
  15372. $3=$recv($2)._yourself();
  15373. $1=$3;
  15374. return $1;
  15375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15376. }, function($ctx1) {$ctx1.fill(self,"with:",{anObject:anObject},$globals.Collection.klass)});
  15377. //>>excludeEnd("ctx");
  15378. },
  15379. //>>excludeStart("ide", pragmas.excludeIdeData);
  15380. args: ["anObject"],
  15381. source: "with: anObject\x0a\x09\x09^ self new\x0a\x09\x09add: anObject;\x0a\x09\x09yourself",
  15382. referencedClasses: [],
  15383. //>>excludeEnd("ide");
  15384. messageSends: ["add:", "new", "yourself"]
  15385. }),
  15386. $globals.Collection.klass);
  15387. $core.addMethod(
  15388. $core.method({
  15389. selector: "with:with:",
  15390. protocol: 'instance creation',
  15391. fn: function (anObject,anotherObject){
  15392. var self=this;
  15393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15394. return $core.withContext(function($ctx1) {
  15395. //>>excludeEnd("ctx");
  15396. var $2,$3,$1;
  15397. $2=self._new();
  15398. $recv($2)._add_(anObject);
  15399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15400. $ctx1.sendIdx["add:"]=1;
  15401. //>>excludeEnd("ctx");
  15402. $recv($2)._add_(anotherObject);
  15403. $3=$recv($2)._yourself();
  15404. $1=$3;
  15405. return $1;
  15406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15407. }, function($ctx1) {$ctx1.fill(self,"with:with:",{anObject:anObject,anotherObject:anotherObject},$globals.Collection.klass)});
  15408. //>>excludeEnd("ctx");
  15409. },
  15410. //>>excludeStart("ide", pragmas.excludeIdeData);
  15411. args: ["anObject", "anotherObject"],
  15412. source: "with: anObject with: anotherObject\x0a\x09\x09^ self new\x0a\x09\x09add: anObject;\x0a\x09\x09add: anotherObject;\x0a\x09\x09yourself",
  15413. referencedClasses: [],
  15414. //>>excludeEnd("ide");
  15415. messageSends: ["add:", "new", "yourself"]
  15416. }),
  15417. $globals.Collection.klass);
  15418. $core.addMethod(
  15419. $core.method({
  15420. selector: "with:with:with:",
  15421. protocol: 'instance creation',
  15422. fn: function (firstObject,secondObject,thirdObject){
  15423. var self=this;
  15424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15425. return $core.withContext(function($ctx1) {
  15426. //>>excludeEnd("ctx");
  15427. var $2,$3,$1;
  15428. $2=self._new();
  15429. $recv($2)._add_(firstObject);
  15430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15431. $ctx1.sendIdx["add:"]=1;
  15432. //>>excludeEnd("ctx");
  15433. $recv($2)._add_(secondObject);
  15434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15435. $ctx1.sendIdx["add:"]=2;
  15436. //>>excludeEnd("ctx");
  15437. $recv($2)._add_(thirdObject);
  15438. $3=$recv($2)._yourself();
  15439. $1=$3;
  15440. return $1;
  15441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15442. }, function($ctx1) {$ctx1.fill(self,"with:with:with:",{firstObject:firstObject,secondObject:secondObject,thirdObject:thirdObject},$globals.Collection.klass)});
  15443. //>>excludeEnd("ctx");
  15444. },
  15445. //>>excludeStart("ide", pragmas.excludeIdeData);
  15446. args: ["firstObject", "secondObject", "thirdObject"],
  15447. 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",
  15448. referencedClasses: [],
  15449. //>>excludeEnd("ide");
  15450. messageSends: ["add:", "new", "yourself"]
  15451. }),
  15452. $globals.Collection.klass);
  15453. $core.addMethod(
  15454. $core.method({
  15455. selector: "withAll:",
  15456. protocol: 'instance creation',
  15457. fn: function (aCollection){
  15458. var self=this;
  15459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15460. return $core.withContext(function($ctx1) {
  15461. //>>excludeEnd("ctx");
  15462. var $2,$3,$1;
  15463. $2=self._new();
  15464. $recv($2)._addAll_(aCollection);
  15465. $3=$recv($2)._yourself();
  15466. $1=$3;
  15467. return $1;
  15468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15469. }, function($ctx1) {$ctx1.fill(self,"withAll:",{aCollection:aCollection},$globals.Collection.klass)});
  15470. //>>excludeEnd("ctx");
  15471. },
  15472. //>>excludeStart("ide", pragmas.excludeIdeData);
  15473. args: ["aCollection"],
  15474. source: "withAll: aCollection\x0a\x09\x09^ self new\x0a\x09\x09addAll: aCollection;\x0a\x09\x09yourself",
  15475. referencedClasses: [],
  15476. //>>excludeEnd("ide");
  15477. messageSends: ["addAll:", "new", "yourself"]
  15478. }),
  15479. $globals.Collection.klass);
  15480. $core.addClass('IndexableCollection', $globals.Collection, [], 'Kernel-Collections');
  15481. //>>excludeStart("ide", pragmas.excludeIdeData);
  15482. $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.";
  15483. //>>excludeEnd("ide");
  15484. $core.addMethod(
  15485. $core.method({
  15486. selector: "at:",
  15487. protocol: 'accessing',
  15488. fn: function (anIndex){
  15489. var self=this;
  15490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15491. return $core.withContext(function($ctx1) {
  15492. //>>excludeEnd("ctx");
  15493. var $1;
  15494. $1=self._at_ifAbsent_(anIndex,(function(){
  15495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15496. return $core.withContext(function($ctx2) {
  15497. //>>excludeEnd("ctx");
  15498. return self._errorNotFound();
  15499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15500. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  15501. //>>excludeEnd("ctx");
  15502. }));
  15503. return $1;
  15504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15505. }, function($ctx1) {$ctx1.fill(self,"at:",{anIndex:anIndex},$globals.IndexableCollection)});
  15506. //>>excludeEnd("ctx");
  15507. },
  15508. //>>excludeStart("ide", pragmas.excludeIdeData);
  15509. args: ["anIndex"],
  15510. 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 ]",
  15511. referencedClasses: [],
  15512. //>>excludeEnd("ide");
  15513. messageSends: ["at:ifAbsent:", "errorNotFound"]
  15514. }),
  15515. $globals.IndexableCollection);
  15516. $core.addMethod(
  15517. $core.method({
  15518. selector: "at:ifAbsent:",
  15519. protocol: 'accessing',
  15520. fn: function (anIndex,aBlock){
  15521. var self=this;
  15522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15523. return $core.withContext(function($ctx1) {
  15524. //>>excludeEnd("ctx");
  15525. self._subclassResponsibility();
  15526. return self;
  15527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15528. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{anIndex:anIndex,aBlock:aBlock},$globals.IndexableCollection)});
  15529. //>>excludeEnd("ctx");
  15530. },
  15531. //>>excludeStart("ide", pragmas.excludeIdeData);
  15532. args: ["anIndex", "aBlock"],
  15533. 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",
  15534. referencedClasses: [],
  15535. //>>excludeEnd("ide");
  15536. messageSends: ["subclassResponsibility"]
  15537. }),
  15538. $globals.IndexableCollection);
  15539. $core.addMethod(
  15540. $core.method({
  15541. selector: "at:ifAbsentPut:",
  15542. protocol: 'accessing',
  15543. fn: function (aKey,aBlock){
  15544. var self=this;
  15545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15546. return $core.withContext(function($ctx1) {
  15547. //>>excludeEnd("ctx");
  15548. var $1;
  15549. $1=self._at_ifAbsent_(aKey,(function(){
  15550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15551. return $core.withContext(function($ctx2) {
  15552. //>>excludeEnd("ctx");
  15553. return self._at_put_(aKey,$recv(aBlock)._value());
  15554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15555. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  15556. //>>excludeEnd("ctx");
  15557. }));
  15558. return $1;
  15559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15560. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsentPut:",{aKey:aKey,aBlock:aBlock},$globals.IndexableCollection)});
  15561. //>>excludeEnd("ctx");
  15562. },
  15563. //>>excludeStart("ide", pragmas.excludeIdeData);
  15564. args: ["aKey", "aBlock"],
  15565. source: "at: aKey ifAbsentPut: aBlock\x0a\x09^ self at: aKey ifAbsent: [\x0a\x09\x09self at: aKey put: aBlock value ]",
  15566. referencedClasses: [],
  15567. //>>excludeEnd("ide");
  15568. messageSends: ["at:ifAbsent:", "at:put:", "value"]
  15569. }),
  15570. $globals.IndexableCollection);
  15571. $core.addMethod(
  15572. $core.method({
  15573. selector: "at:ifPresent:",
  15574. protocol: 'accessing',
  15575. fn: function (anIndex,aBlock){
  15576. var self=this;
  15577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15578. return $core.withContext(function($ctx1) {
  15579. //>>excludeEnd("ctx");
  15580. var $1;
  15581. $1=self._at_ifPresent_ifAbsent_(anIndex,aBlock,(function(){
  15582. return nil;
  15583. }));
  15584. return $1;
  15585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15586. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:",{anIndex:anIndex,aBlock:aBlock},$globals.IndexableCollection)});
  15587. //>>excludeEnd("ctx");
  15588. },
  15589. //>>excludeStart("ide", pragmas.excludeIdeData);
  15590. args: ["anIndex", "aBlock"],
  15591. 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 ]",
  15592. referencedClasses: [],
  15593. //>>excludeEnd("ide");
  15594. messageSends: ["at:ifPresent:ifAbsent:"]
  15595. }),
  15596. $globals.IndexableCollection);
  15597. $core.addMethod(
  15598. $core.method({
  15599. selector: "at:ifPresent:ifAbsent:",
  15600. protocol: 'accessing',
  15601. fn: function (anIndex,aBlock,anotherBlock){
  15602. var self=this;
  15603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15604. return $core.withContext(function($ctx1) {
  15605. //>>excludeEnd("ctx");
  15606. self._subclassResponsibility();
  15607. return self;
  15608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15609. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{anIndex:anIndex,aBlock:aBlock,anotherBlock:anotherBlock},$globals.IndexableCollection)});
  15610. //>>excludeEnd("ctx");
  15611. },
  15612. //>>excludeStart("ide", pragmas.excludeIdeData);
  15613. args: ["anIndex", "aBlock", "anotherBlock"],
  15614. 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",
  15615. referencedClasses: [],
  15616. //>>excludeEnd("ide");
  15617. messageSends: ["subclassResponsibility"]
  15618. }),
  15619. $globals.IndexableCollection);
  15620. $core.addMethod(
  15621. $core.method({
  15622. selector: "at:put:",
  15623. protocol: 'accessing',
  15624. fn: function (anIndex,anObject){
  15625. var self=this;
  15626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15627. return $core.withContext(function($ctx1) {
  15628. //>>excludeEnd("ctx");
  15629. self._subclassResponsibility();
  15630. return self;
  15631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15632. }, function($ctx1) {$ctx1.fill(self,"at:put:",{anIndex:anIndex,anObject:anObject},$globals.IndexableCollection)});
  15633. //>>excludeEnd("ctx");
  15634. },
  15635. //>>excludeStart("ide", pragmas.excludeIdeData);
  15636. args: ["anIndex", "anObject"],
  15637. source: "at: anIndex put: anObject\x0a\x09\x22Store anObject under the given index in the receiver.\x22\x0a\x0a\x09self subclassResponsibility",
  15638. referencedClasses: [],
  15639. //>>excludeEnd("ide");
  15640. messageSends: ["subclassResponsibility"]
  15641. }),
  15642. $globals.IndexableCollection);
  15643. $core.addMethod(
  15644. $core.method({
  15645. selector: "indexOf:",
  15646. protocol: 'accessing',
  15647. fn: function (anObject){
  15648. var self=this;
  15649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15650. return $core.withContext(function($ctx1) {
  15651. //>>excludeEnd("ctx");
  15652. var $1;
  15653. $1=self._indexOf_ifAbsent_(anObject,(function(){
  15654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15655. return $core.withContext(function($ctx2) {
  15656. //>>excludeEnd("ctx");
  15657. return self._errorNotFound();
  15658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15659. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  15660. //>>excludeEnd("ctx");
  15661. }));
  15662. return $1;
  15663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15664. }, function($ctx1) {$ctx1.fill(self,"indexOf:",{anObject:anObject},$globals.IndexableCollection)});
  15665. //>>excludeEnd("ctx");
  15666. },
  15667. //>>excludeStart("ide", pragmas.excludeIdeData);
  15668. args: ["anObject"],
  15669. 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 ]",
  15670. referencedClasses: [],
  15671. //>>excludeEnd("ide");
  15672. messageSends: ["indexOf:ifAbsent:", "errorNotFound"]
  15673. }),
  15674. $globals.IndexableCollection);
  15675. $core.addMethod(
  15676. $core.method({
  15677. selector: "indexOf:ifAbsent:",
  15678. protocol: 'accessing',
  15679. fn: function (anObject,aBlock){
  15680. var self=this;
  15681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15682. return $core.withContext(function($ctx1) {
  15683. //>>excludeEnd("ctx");
  15684. self._subclassResponsibility();
  15685. return self;
  15686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15687. }, function($ctx1) {$ctx1.fill(self,"indexOf:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.IndexableCollection)});
  15688. //>>excludeEnd("ctx");
  15689. },
  15690. //>>excludeStart("ide", pragmas.excludeIdeData);
  15691. args: ["anObject", "aBlock"],
  15692. 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",
  15693. referencedClasses: [],
  15694. //>>excludeEnd("ide");
  15695. messageSends: ["subclassResponsibility"]
  15696. }),
  15697. $globals.IndexableCollection);
  15698. $core.addMethod(
  15699. $core.method({
  15700. selector: "with:do:",
  15701. protocol: 'enumerating',
  15702. fn: function (anotherCollection,aBlock){
  15703. var self=this;
  15704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15705. return $core.withContext(function($ctx1) {
  15706. //>>excludeEnd("ctx");
  15707. self._withIndexDo_((function(each,index){
  15708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15709. return $core.withContext(function($ctx2) {
  15710. //>>excludeEnd("ctx");
  15711. return $recv(aBlock)._value_value_(each,$recv(anotherCollection)._at_(index));
  15712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15713. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,1)});
  15714. //>>excludeEnd("ctx");
  15715. }));
  15716. return self;
  15717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15718. }, function($ctx1) {$ctx1.fill(self,"with:do:",{anotherCollection:anotherCollection,aBlock:aBlock},$globals.IndexableCollection)});
  15719. //>>excludeEnd("ctx");
  15720. },
  15721. //>>excludeStart("ide", pragmas.excludeIdeData);
  15722. args: ["anotherCollection", "aBlock"],
  15723. 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) ]",
  15724. referencedClasses: [],
  15725. //>>excludeEnd("ide");
  15726. messageSends: ["withIndexDo:", "value:value:", "at:"]
  15727. }),
  15728. $globals.IndexableCollection);
  15729. $core.addMethod(
  15730. $core.method({
  15731. selector: "withIndexDo:",
  15732. protocol: 'enumerating',
  15733. fn: function (aBlock){
  15734. var self=this;
  15735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15736. return $core.withContext(function($ctx1) {
  15737. //>>excludeEnd("ctx");
  15738. self._subclassResponsibility();
  15739. return self;
  15740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15741. }, function($ctx1) {$ctx1.fill(self,"withIndexDo:",{aBlock:aBlock},$globals.IndexableCollection)});
  15742. //>>excludeEnd("ctx");
  15743. },
  15744. //>>excludeStart("ide", pragmas.excludeIdeData);
  15745. args: ["aBlock"],
  15746. 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",
  15747. referencedClasses: [],
  15748. //>>excludeEnd("ide");
  15749. messageSends: ["subclassResponsibility"]
  15750. }),
  15751. $globals.IndexableCollection);
  15752. $core.addClass('AssociativeCollection', $globals.IndexableCollection, [], 'Kernel-Collections');
  15753. //>>excludeStart("ide", pragmas.excludeIdeData);
  15754. $globals.AssociativeCollection.comment="I am a base class for object-indexed collections (Dictionary et.al.).";
  15755. //>>excludeEnd("ide");
  15756. $core.addMethod(
  15757. $core.method({
  15758. selector: "=",
  15759. protocol: 'comparing',
  15760. fn: function (anAssocitativeCollection){
  15761. var self=this;
  15762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15763. return $core.withContext(function($ctx1) {
  15764. //>>excludeEnd("ctx");
  15765. var $2,$1,$4,$3,$6,$5;
  15766. $2=self._class();
  15767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15768. $ctx1.sendIdx["class"]=1;
  15769. //>>excludeEnd("ctx");
  15770. $1=$recv($2).__eq($recv(anAssocitativeCollection)._class());
  15771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15772. $ctx1.sendIdx["="]=1;
  15773. //>>excludeEnd("ctx");
  15774. if(!$core.assert($1)){
  15775. return false;
  15776. };
  15777. $4=self._size();
  15778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15779. $ctx1.sendIdx["size"]=1;
  15780. //>>excludeEnd("ctx");
  15781. $3=$recv($4).__eq($recv(anAssocitativeCollection)._size());
  15782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15783. $ctx1.sendIdx["="]=2;
  15784. //>>excludeEnd("ctx");
  15785. if(!$core.assert($3)){
  15786. return false;
  15787. };
  15788. $6=self._associations();
  15789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15790. $ctx1.sendIdx["associations"]=1;
  15791. //>>excludeEnd("ctx");
  15792. $5=$recv($6).__eq($recv(anAssocitativeCollection)._associations());
  15793. return $5;
  15794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15795. }, function($ctx1) {$ctx1.fill(self,"=",{anAssocitativeCollection:anAssocitativeCollection},$globals.AssociativeCollection)});
  15796. //>>excludeEnd("ctx");
  15797. },
  15798. //>>excludeStart("ide", pragmas.excludeIdeData);
  15799. args: ["anAssocitativeCollection"],
  15800. source: "= anAssocitativeCollection\x0a\x09self class = anAssocitativeCollection class ifFalse: [ ^ false ].\x0a\x09self size = anAssocitativeCollection size ifFalse: [ ^ false ].\x0a\x09^ self associations = anAssocitativeCollection associations",
  15801. referencedClasses: [],
  15802. //>>excludeEnd("ide");
  15803. messageSends: ["ifFalse:", "=", "class", "size", "associations"]
  15804. }),
  15805. $globals.AssociativeCollection);
  15806. $core.addMethod(
  15807. $core.method({
  15808. selector: "add:",
  15809. protocol: 'adding/removing',
  15810. fn: function (anAssociation){
  15811. var self=this;
  15812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15813. return $core.withContext(function($ctx1) {
  15814. //>>excludeEnd("ctx");
  15815. self._at_put_($recv(anAssociation)._key(),$recv(anAssociation)._value());
  15816. return self;
  15817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15818. }, function($ctx1) {$ctx1.fill(self,"add:",{anAssociation:anAssociation},$globals.AssociativeCollection)});
  15819. //>>excludeEnd("ctx");
  15820. },
  15821. //>>excludeStart("ide", pragmas.excludeIdeData);
  15822. args: ["anAssociation"],
  15823. source: "add: anAssociation\x0a\x09self at: anAssociation key put: anAssociation value",
  15824. referencedClasses: [],
  15825. //>>excludeEnd("ide");
  15826. messageSends: ["at:put:", "key", "value"]
  15827. }),
  15828. $globals.AssociativeCollection);
  15829. $core.addMethod(
  15830. $core.method({
  15831. selector: "addAll:",
  15832. protocol: 'adding/removing',
  15833. fn: function (anAssociativeCollection){
  15834. var self=this;
  15835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15836. return $core.withContext(function($ctx1) {
  15837. //>>excludeEnd("ctx");
  15838. (
  15839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15840. $ctx1.supercall = true,
  15841. //>>excludeEnd("ctx");
  15842. $globals.AssociativeCollection.superclass.fn.prototype._addAll_.apply($recv(self), [$recv(anAssociativeCollection)._associations()]));
  15843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15844. $ctx1.supercall = false;
  15845. //>>excludeEnd("ctx");;
  15846. return anAssociativeCollection;
  15847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15848. }, function($ctx1) {$ctx1.fill(self,"addAll:",{anAssociativeCollection:anAssociativeCollection},$globals.AssociativeCollection)});
  15849. //>>excludeEnd("ctx");
  15850. },
  15851. //>>excludeStart("ide", pragmas.excludeIdeData);
  15852. args: ["anAssociativeCollection"],
  15853. source: "addAll: anAssociativeCollection\x0a\x09super addAll: anAssociativeCollection associations.\x0a\x09^ anAssociativeCollection",
  15854. referencedClasses: [],
  15855. //>>excludeEnd("ide");
  15856. messageSends: ["addAll:", "associations"]
  15857. }),
  15858. $globals.AssociativeCollection);
  15859. $core.addMethod(
  15860. $core.method({
  15861. selector: "asDictionary",
  15862. protocol: 'converting',
  15863. fn: function (){
  15864. var self=this;
  15865. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  15866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15867. return $core.withContext(function($ctx1) {
  15868. //>>excludeEnd("ctx");
  15869. var $1;
  15870. $1=$recv($Dictionary())._from_(self._associations());
  15871. return $1;
  15872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15873. }, function($ctx1) {$ctx1.fill(self,"asDictionary",{},$globals.AssociativeCollection)});
  15874. //>>excludeEnd("ctx");
  15875. },
  15876. //>>excludeStart("ide", pragmas.excludeIdeData);
  15877. args: [],
  15878. source: "asDictionary\x0a\x09^ Dictionary from: self associations",
  15879. referencedClasses: ["Dictionary"],
  15880. //>>excludeEnd("ide");
  15881. messageSends: ["from:", "associations"]
  15882. }),
  15883. $globals.AssociativeCollection);
  15884. $core.addMethod(
  15885. $core.method({
  15886. selector: "asHashedCollection",
  15887. protocol: 'converting',
  15888. fn: function (){
  15889. var self=this;
  15890. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  15891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15892. return $core.withContext(function($ctx1) {
  15893. //>>excludeEnd("ctx");
  15894. var $1;
  15895. $1=$recv($HashedCollection())._from_(self._associations());
  15896. return $1;
  15897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15898. }, function($ctx1) {$ctx1.fill(self,"asHashedCollection",{},$globals.AssociativeCollection)});
  15899. //>>excludeEnd("ctx");
  15900. },
  15901. //>>excludeStart("ide", pragmas.excludeIdeData);
  15902. args: [],
  15903. source: "asHashedCollection\x0a\x09^ HashedCollection from: self associations",
  15904. referencedClasses: ["HashedCollection"],
  15905. //>>excludeEnd("ide");
  15906. messageSends: ["from:", "associations"]
  15907. }),
  15908. $globals.AssociativeCollection);
  15909. $core.addMethod(
  15910. $core.method({
  15911. selector: "asJSON",
  15912. protocol: 'converting',
  15913. fn: function (){
  15914. var self=this;
  15915. var hash;
  15916. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  15917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15918. return $core.withContext(function($ctx1) {
  15919. //>>excludeEnd("ctx");
  15920. var $1;
  15921. hash=$recv($HashedCollection())._new();
  15922. self._keysAndValuesDo_((function(key,value){
  15923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15924. return $core.withContext(function($ctx2) {
  15925. //>>excludeEnd("ctx");
  15926. return $recv(hash)._at_put_(key,$recv(value)._asJSON());
  15927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15928. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  15929. //>>excludeEnd("ctx");
  15930. }));
  15931. $1=hash;
  15932. return $1;
  15933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15934. }, function($ctx1) {$ctx1.fill(self,"asJSON",{hash:hash},$globals.AssociativeCollection)});
  15935. //>>excludeEnd("ctx");
  15936. },
  15937. //>>excludeStart("ide", pragmas.excludeIdeData);
  15938. args: [],
  15939. 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",
  15940. referencedClasses: ["HashedCollection"],
  15941. //>>excludeEnd("ide");
  15942. messageSends: ["new", "keysAndValuesDo:", "at:put:", "asJSON"]
  15943. }),
  15944. $globals.AssociativeCollection);
  15945. $core.addMethod(
  15946. $core.method({
  15947. selector: "associations",
  15948. protocol: 'accessing',
  15949. fn: function (){
  15950. var self=this;
  15951. var associations;
  15952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15953. return $core.withContext(function($ctx1) {
  15954. //>>excludeEnd("ctx");
  15955. var $1;
  15956. associations=[];
  15957. self._associationsDo_((function(each){
  15958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15959. return $core.withContext(function($ctx2) {
  15960. //>>excludeEnd("ctx");
  15961. return $recv(associations)._add_(each);
  15962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15963. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15964. //>>excludeEnd("ctx");
  15965. }));
  15966. $1=associations;
  15967. return $1;
  15968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15969. }, function($ctx1) {$ctx1.fill(self,"associations",{associations:associations},$globals.AssociativeCollection)});
  15970. //>>excludeEnd("ctx");
  15971. },
  15972. //>>excludeStart("ide", pragmas.excludeIdeData);
  15973. args: [],
  15974. source: "associations\x0a\x09| associations |\x0a\x09associations := #().\x0a\x09self associationsDo: [ :each | associations add: each ].\x0a\x09^ associations",
  15975. referencedClasses: [],
  15976. //>>excludeEnd("ide");
  15977. messageSends: ["associationsDo:", "add:"]
  15978. }),
  15979. $globals.AssociativeCollection);
  15980. $core.addMethod(
  15981. $core.method({
  15982. selector: "associationsDo:",
  15983. protocol: 'enumerating',
  15984. fn: function (aBlock){
  15985. var self=this;
  15986. function $Association(){return $globals.Association||(typeof Association=="undefined"?nil:Association)}
  15987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15988. return $core.withContext(function($ctx1) {
  15989. //>>excludeEnd("ctx");
  15990. self._keysAndValuesDo_((function(key,value){
  15991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15992. return $core.withContext(function($ctx2) {
  15993. //>>excludeEnd("ctx");
  15994. return $recv(aBlock)._value_($recv($Association())._key_value_(key,value));
  15995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15996. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  15997. //>>excludeEnd("ctx");
  15998. }));
  15999. return self;
  16000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16001. }, function($ctx1) {$ctx1.fill(self,"associationsDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  16002. //>>excludeEnd("ctx");
  16003. },
  16004. //>>excludeStart("ide", pragmas.excludeIdeData);
  16005. args: ["aBlock"],
  16006. source: "associationsDo: aBlock\x0a\x09self keysAndValuesDo: [ :key :value |\x0a\x09\x09aBlock value: (Association key: key value: value) ]",
  16007. referencedClasses: ["Association"],
  16008. //>>excludeEnd("ide");
  16009. messageSends: ["keysAndValuesDo:", "value:", "key:value:"]
  16010. }),
  16011. $globals.AssociativeCollection);
  16012. $core.addMethod(
  16013. $core.method({
  16014. selector: "at:ifPresent:ifAbsent:",
  16015. protocol: 'accessing',
  16016. fn: function (aKey,aBlock,anotherBlock){
  16017. var self=this;
  16018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16019. return $core.withContext(function($ctx1) {
  16020. //>>excludeEnd("ctx");
  16021. var $2,$1;
  16022. $2=self._includesKey_(aKey);
  16023. if($core.assert($2)){
  16024. $1=$recv(aBlock)._value_(self._at_(aKey));
  16025. } else {
  16026. $1=$recv(anotherBlock)._value();
  16027. };
  16028. return $1;
  16029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16030. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{aKey:aKey,aBlock:aBlock,anotherBlock:anotherBlock},$globals.AssociativeCollection)});
  16031. //>>excludeEnd("ctx");
  16032. },
  16033. //>>excludeStart("ide", pragmas.excludeIdeData);
  16034. args: ["aKey", "aBlock", "anotherBlock"],
  16035. 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 ]",
  16036. referencedClasses: [],
  16037. //>>excludeEnd("ide");
  16038. messageSends: ["ifTrue:ifFalse:", "includesKey:", "value:", "at:", "value"]
  16039. }),
  16040. $globals.AssociativeCollection);
  16041. $core.addMethod(
  16042. $core.method({
  16043. selector: "collect:",
  16044. protocol: 'enumerating',
  16045. fn: function (aBlock){
  16046. var self=this;
  16047. var newDict;
  16048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16049. return $core.withContext(function($ctx1) {
  16050. //>>excludeEnd("ctx");
  16051. var $1;
  16052. newDict=$recv(self._class())._new();
  16053. self._keysAndValuesDo_((function(key,value){
  16054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16055. return $core.withContext(function($ctx2) {
  16056. //>>excludeEnd("ctx");
  16057. return $recv(newDict)._at_put_(key,$recv(aBlock)._value_(value));
  16058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16059. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  16060. //>>excludeEnd("ctx");
  16061. }));
  16062. $1=newDict;
  16063. return $1;
  16064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16065. }, function($ctx1) {$ctx1.fill(self,"collect:",{aBlock:aBlock,newDict:newDict},$globals.AssociativeCollection)});
  16066. //>>excludeEnd("ctx");
  16067. },
  16068. //>>excludeStart("ide", pragmas.excludeIdeData);
  16069. args: ["aBlock"],
  16070. 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",
  16071. referencedClasses: [],
  16072. //>>excludeEnd("ide");
  16073. messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "value:"]
  16074. }),
  16075. $globals.AssociativeCollection);
  16076. $core.addMethod(
  16077. $core.method({
  16078. selector: "deepCopy",
  16079. protocol: 'copying',
  16080. fn: function (){
  16081. var self=this;
  16082. var copy;
  16083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16084. return $core.withContext(function($ctx1) {
  16085. //>>excludeEnd("ctx");
  16086. var $1;
  16087. copy=$recv(self._class())._new();
  16088. self._keysAndValuesDo_((function(key,value){
  16089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16090. return $core.withContext(function($ctx2) {
  16091. //>>excludeEnd("ctx");
  16092. return $recv(copy)._at_put_(key,$recv(value)._deepCopy());
  16093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16094. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  16095. //>>excludeEnd("ctx");
  16096. }));
  16097. $1=copy;
  16098. return $1;
  16099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16100. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{copy:copy},$globals.AssociativeCollection)});
  16101. //>>excludeEnd("ctx");
  16102. },
  16103. //>>excludeStart("ide", pragmas.excludeIdeData);
  16104. args: [],
  16105. 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",
  16106. referencedClasses: [],
  16107. //>>excludeEnd("ide");
  16108. messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "deepCopy"]
  16109. }),
  16110. $globals.AssociativeCollection);
  16111. $core.addMethod(
  16112. $core.method({
  16113. selector: "detect:ifNone:",
  16114. protocol: 'enumerating',
  16115. fn: function (aBlock,anotherBlock){
  16116. var self=this;
  16117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16118. return $core.withContext(function($ctx1) {
  16119. //>>excludeEnd("ctx");
  16120. var $1;
  16121. $1=$recv(self._values())._detect_ifNone_(aBlock,anotherBlock);
  16122. return $1;
  16123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16124. }, function($ctx1) {$ctx1.fill(self,"detect:ifNone:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.AssociativeCollection)});
  16125. //>>excludeEnd("ctx");
  16126. },
  16127. //>>excludeStart("ide", pragmas.excludeIdeData);
  16128. args: ["aBlock", "anotherBlock"],
  16129. source: "detect: aBlock ifNone: anotherBlock\x0a\x09^ self values detect: aBlock ifNone: anotherBlock",
  16130. referencedClasses: [],
  16131. //>>excludeEnd("ide");
  16132. messageSends: ["detect:ifNone:", "values"]
  16133. }),
  16134. $globals.AssociativeCollection);
  16135. $core.addMethod(
  16136. $core.method({
  16137. selector: "do:",
  16138. protocol: 'enumerating',
  16139. fn: function (aBlock){
  16140. var self=this;
  16141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16142. return $core.withContext(function($ctx1) {
  16143. //>>excludeEnd("ctx");
  16144. self._valuesDo_(aBlock);
  16145. return self;
  16146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16147. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.AssociativeCollection)});
  16148. //>>excludeEnd("ctx");
  16149. },
  16150. //>>excludeStart("ide", pragmas.excludeIdeData);
  16151. args: ["aBlock"],
  16152. source: "do: aBlock\x0a\x09self valuesDo: aBlock",
  16153. referencedClasses: [],
  16154. //>>excludeEnd("ide");
  16155. messageSends: ["valuesDo:"]
  16156. }),
  16157. $globals.AssociativeCollection);
  16158. $core.addMethod(
  16159. $core.method({
  16160. selector: "includes:",
  16161. protocol: 'enumerating',
  16162. fn: function (anObject){
  16163. var self=this;
  16164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16165. return $core.withContext(function($ctx1) {
  16166. //>>excludeEnd("ctx");
  16167. var $1;
  16168. $1=$recv(self._values())._includes_(anObject);
  16169. return $1;
  16170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16171. }, function($ctx1) {$ctx1.fill(self,"includes:",{anObject:anObject},$globals.AssociativeCollection)});
  16172. //>>excludeEnd("ctx");
  16173. },
  16174. //>>excludeStart("ide", pragmas.excludeIdeData);
  16175. args: ["anObject"],
  16176. source: "includes: anObject\x0a\x09^ self values includes: anObject",
  16177. referencedClasses: [],
  16178. //>>excludeEnd("ide");
  16179. messageSends: ["includes:", "values"]
  16180. }),
  16181. $globals.AssociativeCollection);
  16182. $core.addMethod(
  16183. $core.method({
  16184. selector: "includesKey:",
  16185. protocol: 'testing',
  16186. fn: function (aKey){
  16187. var self=this;
  16188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16189. return $core.withContext(function($ctx1) {
  16190. //>>excludeEnd("ctx");
  16191. self._subclassResponsibility();
  16192. return self;
  16193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16194. }, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey},$globals.AssociativeCollection)});
  16195. //>>excludeEnd("ctx");
  16196. },
  16197. //>>excludeStart("ide", pragmas.excludeIdeData);
  16198. args: ["aKey"],
  16199. source: "includesKey: aKey\x0a\x09self subclassResponsibility",
  16200. referencedClasses: [],
  16201. //>>excludeEnd("ide");
  16202. messageSends: ["subclassResponsibility"]
  16203. }),
  16204. $globals.AssociativeCollection);
  16205. $core.addMethod(
  16206. $core.method({
  16207. selector: "indexOf:ifAbsent:",
  16208. protocol: 'accessing',
  16209. fn: function (anObject,aBlock){
  16210. var self=this;
  16211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16212. return $core.withContext(function($ctx1) {
  16213. //>>excludeEnd("ctx");
  16214. var $1;
  16215. $1=$recv(self._keys())._detect_ifNone_((function(each){
  16216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16217. return $core.withContext(function($ctx2) {
  16218. //>>excludeEnd("ctx");
  16219. return $recv(self._at_(each)).__eq(anObject);
  16220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16221. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  16222. //>>excludeEnd("ctx");
  16223. }),aBlock);
  16224. return $1;
  16225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16226. }, function($ctx1) {$ctx1.fill(self,"indexOf:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.AssociativeCollection)});
  16227. //>>excludeEnd("ctx");
  16228. },
  16229. //>>excludeStart("ide", pragmas.excludeIdeData);
  16230. args: ["anObject", "aBlock"],
  16231. source: "indexOf: anObject ifAbsent: aBlock\x0a\x09^ self keys \x0a\x09\x09detect: [ :each | (self at: each) = anObject ] \x0a\x09\x09ifNone: aBlock",
  16232. referencedClasses: [],
  16233. //>>excludeEnd("ide");
  16234. messageSends: ["detect:ifNone:", "keys", "=", "at:"]
  16235. }),
  16236. $globals.AssociativeCollection);
  16237. $core.addMethod(
  16238. $core.method({
  16239. selector: "keyAtValue:",
  16240. protocol: 'accessing',
  16241. fn: function (anObject){
  16242. var self=this;
  16243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16244. return $core.withContext(function($ctx1) {
  16245. //>>excludeEnd("ctx");
  16246. var $1;
  16247. $1=self._keyAtValue_ifAbsent_(anObject,(function(){
  16248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16249. return $core.withContext(function($ctx2) {
  16250. //>>excludeEnd("ctx");
  16251. return self._errorNotFound();
  16252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16253. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  16254. //>>excludeEnd("ctx");
  16255. }));
  16256. return $1;
  16257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16258. }, function($ctx1) {$ctx1.fill(self,"keyAtValue:",{anObject:anObject},$globals.AssociativeCollection)});
  16259. //>>excludeEnd("ctx");
  16260. },
  16261. //>>excludeStart("ide", pragmas.excludeIdeData);
  16262. args: ["anObject"],
  16263. source: "keyAtValue: anObject\x0a\x09^ self keyAtValue: anObject ifAbsent: [ self errorNotFound ]",
  16264. referencedClasses: [],
  16265. //>>excludeEnd("ide");
  16266. messageSends: ["keyAtValue:ifAbsent:", "errorNotFound"]
  16267. }),
  16268. $globals.AssociativeCollection);
  16269. $core.addMethod(
  16270. $core.method({
  16271. selector: "keyAtValue:ifAbsent:",
  16272. protocol: 'accessing',
  16273. fn: function (anObject,aBlock){
  16274. var self=this;
  16275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16276. return $core.withContext(function($ctx1) {
  16277. //>>excludeEnd("ctx");
  16278. var $1;
  16279. $1=self._indexOf_ifAbsent_(anObject,aBlock);
  16280. return $1;
  16281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16282. }, function($ctx1) {$ctx1.fill(self,"keyAtValue:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.AssociativeCollection)});
  16283. //>>excludeEnd("ctx");
  16284. },
  16285. //>>excludeStart("ide", pragmas.excludeIdeData);
  16286. args: ["anObject", "aBlock"],
  16287. source: "keyAtValue: anObject ifAbsent: aBlock\x0a\x09^ self indexOf: anObject ifAbsent: aBlock",
  16288. referencedClasses: [],
  16289. //>>excludeEnd("ide");
  16290. messageSends: ["indexOf:ifAbsent:"]
  16291. }),
  16292. $globals.AssociativeCollection);
  16293. $core.addMethod(
  16294. $core.method({
  16295. selector: "keys",
  16296. protocol: 'accessing',
  16297. fn: function (){
  16298. var self=this;
  16299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16300. return $core.withContext(function($ctx1) {
  16301. //>>excludeEnd("ctx");
  16302. self._subclassResponsibility();
  16303. return self;
  16304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16305. }, function($ctx1) {$ctx1.fill(self,"keys",{},$globals.AssociativeCollection)});
  16306. //>>excludeEnd("ctx");
  16307. },
  16308. //>>excludeStart("ide", pragmas.excludeIdeData);
  16309. args: [],
  16310. source: "keys\x0a\x09self subclassResponsibility",
  16311. referencedClasses: [],
  16312. //>>excludeEnd("ide");
  16313. messageSends: ["subclassResponsibility"]
  16314. }),
  16315. $globals.AssociativeCollection);
  16316. $core.addMethod(
  16317. $core.method({
  16318. selector: "keysAndValuesDo:",
  16319. protocol: 'enumerating',
  16320. fn: function (aBlock){
  16321. var self=this;
  16322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16323. return $core.withContext(function($ctx1) {
  16324. //>>excludeEnd("ctx");
  16325. self._keysDo_((function(each){
  16326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16327. return $core.withContext(function($ctx2) {
  16328. //>>excludeEnd("ctx");
  16329. return $recv(aBlock)._value_value_(each,self._at_(each));
  16330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16331. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  16332. //>>excludeEnd("ctx");
  16333. }));
  16334. return self;
  16335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16336. }, function($ctx1) {$ctx1.fill(self,"keysAndValuesDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  16337. //>>excludeEnd("ctx");
  16338. },
  16339. //>>excludeStart("ide", pragmas.excludeIdeData);
  16340. args: ["aBlock"],
  16341. source: "keysAndValuesDo: aBlock\x0a\x09self keysDo: [ :each |\x0a\x09\x09aBlock value: each value: (self at: each) ]",
  16342. referencedClasses: [],
  16343. //>>excludeEnd("ide");
  16344. messageSends: ["keysDo:", "value:value:", "at:"]
  16345. }),
  16346. $globals.AssociativeCollection);
  16347. $core.addMethod(
  16348. $core.method({
  16349. selector: "keysDo:",
  16350. protocol: 'enumerating',
  16351. fn: function (aBlock){
  16352. var self=this;
  16353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16354. return $core.withContext(function($ctx1) {
  16355. //>>excludeEnd("ctx");
  16356. self._subclassResponsibility();
  16357. return self;
  16358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16359. }, function($ctx1) {$ctx1.fill(self,"keysDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  16360. //>>excludeEnd("ctx");
  16361. },
  16362. //>>excludeStart("ide", pragmas.excludeIdeData);
  16363. args: ["aBlock"],
  16364. source: "keysDo: aBlock\x0a\x09self subclassResponsibility",
  16365. referencedClasses: [],
  16366. //>>excludeEnd("ide");
  16367. messageSends: ["subclassResponsibility"]
  16368. }),
  16369. $globals.AssociativeCollection);
  16370. $core.addMethod(
  16371. $core.method({
  16372. selector: "printOn:",
  16373. protocol: 'printing',
  16374. fn: function (aStream){
  16375. var self=this;
  16376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16377. return $core.withContext(function($ctx1) {
  16378. //>>excludeEnd("ctx");
  16379. (
  16380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16381. $ctx1.supercall = true,
  16382. //>>excludeEnd("ctx");
  16383. $globals.AssociativeCollection.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  16384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16385. $ctx1.supercall = false;
  16386. //>>excludeEnd("ctx");;
  16387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16388. $ctx1.sendIdx["printOn:"]=1;
  16389. //>>excludeEnd("ctx");
  16390. $recv(aStream)._nextPutAll_(" (");
  16391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16392. $ctx1.sendIdx["nextPutAll:"]=1;
  16393. //>>excludeEnd("ctx");
  16394. $recv(self._associations())._do_separatedBy_((function(each){
  16395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16396. return $core.withContext(function($ctx2) {
  16397. //>>excludeEnd("ctx");
  16398. return $recv(each)._printOn_(aStream);
  16399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16400. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  16401. //>>excludeEnd("ctx");
  16402. }),(function(){
  16403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16404. return $core.withContext(function($ctx2) {
  16405. //>>excludeEnd("ctx");
  16406. return $recv(aStream)._nextPutAll_(" , ");
  16407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16408. $ctx2.sendIdx["nextPutAll:"]=2;
  16409. //>>excludeEnd("ctx");
  16410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16411. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  16412. //>>excludeEnd("ctx");
  16413. }));
  16414. $recv(aStream)._nextPutAll_(")");
  16415. return self;
  16416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16417. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.AssociativeCollection)});
  16418. //>>excludeEnd("ctx");
  16419. },
  16420. //>>excludeStart("ide", pragmas.excludeIdeData);
  16421. args: ["aStream"],
  16422. 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: ')'",
  16423. referencedClasses: [],
  16424. //>>excludeEnd("ide");
  16425. messageSends: ["printOn:", "nextPutAll:", "do:separatedBy:", "associations"]
  16426. }),
  16427. $globals.AssociativeCollection);
  16428. $core.addMethod(
  16429. $core.method({
  16430. selector: "remove:ifAbsent:",
  16431. protocol: 'adding/removing',
  16432. fn: function (aKey,aBlock){
  16433. var self=this;
  16434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16435. return $core.withContext(function($ctx1) {
  16436. //>>excludeEnd("ctx");
  16437. var $1;
  16438. $1=self._removeKey_ifAbsent_(aKey,aBlock);
  16439. return $1;
  16440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16441. }, function($ctx1) {$ctx1.fill(self,"remove:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.AssociativeCollection)});
  16442. //>>excludeEnd("ctx");
  16443. },
  16444. //>>excludeStart("ide", pragmas.excludeIdeData);
  16445. args: ["aKey", "aBlock"],
  16446. source: "remove: aKey ifAbsent: aBlock\x0a\x09^ self removeKey: aKey ifAbsent: aBlock",
  16447. referencedClasses: [],
  16448. //>>excludeEnd("ide");
  16449. messageSends: ["removeKey:ifAbsent:"]
  16450. }),
  16451. $globals.AssociativeCollection);
  16452. $core.addMethod(
  16453. $core.method({
  16454. selector: "removeAll",
  16455. protocol: 'adding/removing',
  16456. fn: function (){
  16457. var self=this;
  16458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16459. return $core.withContext(function($ctx1) {
  16460. //>>excludeEnd("ctx");
  16461. var $1;
  16462. $1=$recv(self._keys())._do_((function(each){
  16463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16464. return $core.withContext(function($ctx2) {
  16465. //>>excludeEnd("ctx");
  16466. return self._removeKey_(each);
  16467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16468. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  16469. //>>excludeEnd("ctx");
  16470. }));
  16471. return $1;
  16472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16473. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.AssociativeCollection)});
  16474. //>>excludeEnd("ctx");
  16475. },
  16476. //>>excludeStart("ide", pragmas.excludeIdeData);
  16477. args: [],
  16478. source: "removeAll\x0a\x09^ self keys do: [ :each | self removeKey: each ]",
  16479. referencedClasses: [],
  16480. //>>excludeEnd("ide");
  16481. messageSends: ["do:", "keys", "removeKey:"]
  16482. }),
  16483. $globals.AssociativeCollection);
  16484. $core.addMethod(
  16485. $core.method({
  16486. selector: "removeKey:",
  16487. protocol: 'adding/removing',
  16488. fn: function (aKey){
  16489. var self=this;
  16490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16491. return $core.withContext(function($ctx1) {
  16492. //>>excludeEnd("ctx");
  16493. var $1;
  16494. $1=self._remove_(aKey);
  16495. return $1;
  16496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16497. }, function($ctx1) {$ctx1.fill(self,"removeKey:",{aKey:aKey},$globals.AssociativeCollection)});
  16498. //>>excludeEnd("ctx");
  16499. },
  16500. //>>excludeStart("ide", pragmas.excludeIdeData);
  16501. args: ["aKey"],
  16502. source: "removeKey: aKey\x0a\x09^ self remove: aKey",
  16503. referencedClasses: [],
  16504. //>>excludeEnd("ide");
  16505. messageSends: ["remove:"]
  16506. }),
  16507. $globals.AssociativeCollection);
  16508. $core.addMethod(
  16509. $core.method({
  16510. selector: "removeKey:ifAbsent:",
  16511. protocol: 'adding/removing',
  16512. fn: function (aKey,aBlock){
  16513. var self=this;
  16514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16515. return $core.withContext(function($ctx1) {
  16516. //>>excludeEnd("ctx");
  16517. self._subclassResponsibility();
  16518. return self;
  16519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16520. }, function($ctx1) {$ctx1.fill(self,"removeKey:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.AssociativeCollection)});
  16521. //>>excludeEnd("ctx");
  16522. },
  16523. //>>excludeStart("ide", pragmas.excludeIdeData);
  16524. args: ["aKey", "aBlock"],
  16525. source: "removeKey: aKey ifAbsent: aBlock\x0a\x09self subclassResponsibility",
  16526. referencedClasses: [],
  16527. //>>excludeEnd("ide");
  16528. messageSends: ["subclassResponsibility"]
  16529. }),
  16530. $globals.AssociativeCollection);
  16531. $core.addMethod(
  16532. $core.method({
  16533. selector: "select:",
  16534. protocol: 'enumerating',
  16535. fn: function (aBlock){
  16536. var self=this;
  16537. var newDict;
  16538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16539. return $core.withContext(function($ctx1) {
  16540. //>>excludeEnd("ctx");
  16541. var $1,$2;
  16542. newDict=$recv(self._class())._new();
  16543. self._keysAndValuesDo_((function(key,value){
  16544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16545. return $core.withContext(function($ctx2) {
  16546. //>>excludeEnd("ctx");
  16547. $1=$recv(aBlock)._value_(value);
  16548. if($core.assert($1)){
  16549. return $recv(newDict)._at_put_(key,value);
  16550. };
  16551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16552. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  16553. //>>excludeEnd("ctx");
  16554. }));
  16555. $2=newDict;
  16556. return $2;
  16557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16558. }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,newDict:newDict},$globals.AssociativeCollection)});
  16559. //>>excludeEnd("ctx");
  16560. },
  16561. //>>excludeStart("ide", pragmas.excludeIdeData);
  16562. args: ["aBlock"],
  16563. 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",
  16564. referencedClasses: [],
  16565. //>>excludeEnd("ide");
  16566. messageSends: ["new", "class", "keysAndValuesDo:", "ifTrue:", "value:", "at:put:"]
  16567. }),
  16568. $globals.AssociativeCollection);
  16569. $core.addMethod(
  16570. $core.method({
  16571. selector: "shallowCopy",
  16572. protocol: 'copying',
  16573. fn: function (){
  16574. var self=this;
  16575. var copy;
  16576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16577. return $core.withContext(function($ctx1) {
  16578. //>>excludeEnd("ctx");
  16579. var $1;
  16580. copy=$recv(self._class())._new();
  16581. self._keysAndValuesDo_((function(key,value){
  16582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16583. return $core.withContext(function($ctx2) {
  16584. //>>excludeEnd("ctx");
  16585. return $recv(copy)._at_put_(key,value);
  16586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16587. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  16588. //>>excludeEnd("ctx");
  16589. }));
  16590. $1=copy;
  16591. return $1;
  16592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16593. }, function($ctx1) {$ctx1.fill(self,"shallowCopy",{copy:copy},$globals.AssociativeCollection)});
  16594. //>>excludeEnd("ctx");
  16595. },
  16596. //>>excludeStart("ide", pragmas.excludeIdeData);
  16597. args: [],
  16598. 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",
  16599. referencedClasses: [],
  16600. //>>excludeEnd("ide");
  16601. messageSends: ["new", "class", "keysAndValuesDo:", "at:put:"]
  16602. }),
  16603. $globals.AssociativeCollection);
  16604. $core.addMethod(
  16605. $core.method({
  16606. selector: "size",
  16607. protocol: 'accessing',
  16608. fn: function (){
  16609. var self=this;
  16610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16611. return $core.withContext(function($ctx1) {
  16612. //>>excludeEnd("ctx");
  16613. var $1;
  16614. $1=$recv(self._keys())._size();
  16615. return $1;
  16616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16617. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.AssociativeCollection)});
  16618. //>>excludeEnd("ctx");
  16619. },
  16620. //>>excludeStart("ide", pragmas.excludeIdeData);
  16621. args: [],
  16622. source: "size\x0a\x09^ self keys size",
  16623. referencedClasses: [],
  16624. //>>excludeEnd("ide");
  16625. messageSends: ["size", "keys"]
  16626. }),
  16627. $globals.AssociativeCollection);
  16628. $core.addMethod(
  16629. $core.method({
  16630. selector: "values",
  16631. protocol: 'accessing',
  16632. fn: function (){
  16633. var self=this;
  16634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16635. return $core.withContext(function($ctx1) {
  16636. //>>excludeEnd("ctx");
  16637. self._subclassResponsibility();
  16638. return self;
  16639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16640. }, function($ctx1) {$ctx1.fill(self,"values",{},$globals.AssociativeCollection)});
  16641. //>>excludeEnd("ctx");
  16642. },
  16643. //>>excludeStart("ide", pragmas.excludeIdeData);
  16644. args: [],
  16645. source: "values\x0a\x09self subclassResponsibility",
  16646. referencedClasses: [],
  16647. //>>excludeEnd("ide");
  16648. messageSends: ["subclassResponsibility"]
  16649. }),
  16650. $globals.AssociativeCollection);
  16651. $core.addMethod(
  16652. $core.method({
  16653. selector: "valuesDo:",
  16654. protocol: 'enumerating',
  16655. fn: function (aBlock){
  16656. var self=this;
  16657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16658. return $core.withContext(function($ctx1) {
  16659. //>>excludeEnd("ctx");
  16660. self._subclassResponsibility();
  16661. return self;
  16662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16663. }, function($ctx1) {$ctx1.fill(self,"valuesDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  16664. //>>excludeEnd("ctx");
  16665. },
  16666. //>>excludeStart("ide", pragmas.excludeIdeData);
  16667. args: ["aBlock"],
  16668. source: "valuesDo: aBlock\x0a\x09self subclassResponsibility",
  16669. referencedClasses: [],
  16670. //>>excludeEnd("ide");
  16671. messageSends: ["subclassResponsibility"]
  16672. }),
  16673. $globals.AssociativeCollection);
  16674. $core.addMethod(
  16675. $core.method({
  16676. selector: "withIndexDo:",
  16677. protocol: 'enumerating',
  16678. fn: function (aBlock){
  16679. var self=this;
  16680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16681. return $core.withContext(function($ctx1) {
  16682. //>>excludeEnd("ctx");
  16683. self._keysAndValuesDo_((function(key,value){
  16684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16685. return $core.withContext(function($ctx2) {
  16686. //>>excludeEnd("ctx");
  16687. return $recv(aBlock)._value_value_(value,key);
  16688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16689. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  16690. //>>excludeEnd("ctx");
  16691. }));
  16692. return self;
  16693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16694. }, function($ctx1) {$ctx1.fill(self,"withIndexDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  16695. //>>excludeEnd("ctx");
  16696. },
  16697. //>>excludeStart("ide", pragmas.excludeIdeData);
  16698. args: ["aBlock"],
  16699. source: "withIndexDo: aBlock\x0a\x09self keysAndValuesDo: [ :key :value | aBlock value: value value: key ]",
  16700. referencedClasses: [],
  16701. //>>excludeEnd("ide");
  16702. messageSends: ["keysAndValuesDo:", "value:value:"]
  16703. }),
  16704. $globals.AssociativeCollection);
  16705. $core.addMethod(
  16706. $core.method({
  16707. selector: "from:",
  16708. protocol: 'instance creation',
  16709. fn: function (aCollection){
  16710. var self=this;
  16711. var newCollection;
  16712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16713. return $core.withContext(function($ctx1) {
  16714. //>>excludeEnd("ctx");
  16715. var $1;
  16716. newCollection=self._new();
  16717. $recv(aCollection)._do_((function(each){
  16718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16719. return $core.withContext(function($ctx2) {
  16720. //>>excludeEnd("ctx");
  16721. return $recv(newCollection)._add_(each);
  16722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16723. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  16724. //>>excludeEnd("ctx");
  16725. }));
  16726. $1=newCollection;
  16727. return $1;
  16728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16729. }, function($ctx1) {$ctx1.fill(self,"from:",{aCollection:aCollection,newCollection:newCollection},$globals.AssociativeCollection.klass)});
  16730. //>>excludeEnd("ctx");
  16731. },
  16732. //>>excludeStart("ide", pragmas.excludeIdeData);
  16733. args: ["aCollection"],
  16734. source: "from: aCollection\x0a\x09| newCollection |\x0a\x09newCollection := self new.\x0a\x09aCollection do: [ :each | newCollection add: each ].\x0a\x09^ newCollection",
  16735. referencedClasses: [],
  16736. //>>excludeEnd("ide");
  16737. messageSends: ["new", "do:", "add:"]
  16738. }),
  16739. $globals.AssociativeCollection.klass);
  16740. $core.addMethod(
  16741. $core.method({
  16742. selector: "fromPairs:",
  16743. protocol: 'instance creation',
  16744. fn: function (aCollection){
  16745. var self=this;
  16746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16747. return $core.withContext(function($ctx1) {
  16748. //>>excludeEnd("ctx");
  16749. var $1;
  16750. $1=self._from_(aCollection);
  16751. return $1;
  16752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16753. }, function($ctx1) {$ctx1.fill(self,"fromPairs:",{aCollection:aCollection},$globals.AssociativeCollection.klass)});
  16754. //>>excludeEnd("ctx");
  16755. },
  16756. //>>excludeStart("ide", pragmas.excludeIdeData);
  16757. args: ["aCollection"],
  16758. source: "fromPairs: aCollection\x0a\x09\x22This message is poorly named and has been replaced by #from:\x22\x0a\x09^ self from: aCollection",
  16759. referencedClasses: [],
  16760. //>>excludeEnd("ide");
  16761. messageSends: ["from:"]
  16762. }),
  16763. $globals.AssociativeCollection.klass);
  16764. $core.addMethod(
  16765. $core.method({
  16766. selector: "newFromPairs:",
  16767. protocol: 'instance creation',
  16768. fn: function (aCollection){
  16769. var self=this;
  16770. var newCollection;
  16771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16772. return $core.withContext(function($ctx1) {
  16773. //>>excludeEnd("ctx");
  16774. var $2,$1,$3,$4,$5;
  16775. $2=$recv(aCollection)._size();
  16776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16777. $ctx1.sendIdx["size"]=1;
  16778. //>>excludeEnd("ctx");
  16779. $1=$recv($2)._even();
  16780. if(!$core.assert($1)){
  16781. self._error_("#newFromPairs only accepts arrays of an even length");
  16782. };
  16783. newCollection=self._new();
  16784. $recv((1)._to_by_($recv(aCollection)._size(),(2)))._do_((function(each){
  16785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16786. return $core.withContext(function($ctx2) {
  16787. //>>excludeEnd("ctx");
  16788. $3=newCollection;
  16789. $4=$recv(aCollection)._at_(each);
  16790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16791. $ctx2.sendIdx["at:"]=1;
  16792. //>>excludeEnd("ctx");
  16793. return $recv($3)._at_put_($4,$recv(aCollection)._at_($recv(each).__plus((1))));
  16794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16795. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  16796. //>>excludeEnd("ctx");
  16797. }));
  16798. $5=newCollection;
  16799. return $5;
  16800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16801. }, function($ctx1) {$ctx1.fill(self,"newFromPairs:",{aCollection:aCollection,newCollection:newCollection},$globals.AssociativeCollection.klass)});
  16802. //>>excludeEnd("ctx");
  16803. },
  16804. //>>excludeStart("ide", pragmas.excludeIdeData);
  16805. args: ["aCollection"],
  16806. 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",
  16807. referencedClasses: [],
  16808. //>>excludeEnd("ide");
  16809. messageSends: ["ifFalse:", "even", "size", "error:", "new", "do:", "to:by:", "at:put:", "at:", "+"]
  16810. }),
  16811. $globals.AssociativeCollection.klass);
  16812. $core.addClass('Dictionary', $globals.AssociativeCollection, ['keys', 'values'], 'Kernel-Collections');
  16813. //>>excludeStart("ide", pragmas.excludeIdeData);
  16814. $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.";
  16815. //>>excludeEnd("ide");
  16816. $core.addMethod(
  16817. $core.method({
  16818. selector: "at:ifAbsent:",
  16819. protocol: 'accessing',
  16820. fn: function (aKey,aBlock){
  16821. var self=this;
  16822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16823. return $core.withContext(function($ctx1) {
  16824. //>>excludeEnd("ctx");
  16825. var index = self._positionOfKey_(aKey);
  16826. return index >=0 ? self['@values'][index] : aBlock._value();
  16827. ;
  16828. return self;
  16829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16830. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.Dictionary)});
  16831. //>>excludeEnd("ctx");
  16832. },
  16833. //>>excludeStart("ide", pragmas.excludeIdeData);
  16834. args: ["aKey", "aBlock"],
  16835. 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>",
  16836. referencedClasses: [],
  16837. //>>excludeEnd("ide");
  16838. messageSends: []
  16839. }),
  16840. $globals.Dictionary);
  16841. $core.addMethod(
  16842. $core.method({
  16843. selector: "at:put:",
  16844. protocol: 'accessing',
  16845. fn: function (aKey,aValue){
  16846. var self=this;
  16847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16848. return $core.withContext(function($ctx1) {
  16849. //>>excludeEnd("ctx");
  16850. var index = self._positionOfKey_(aKey);
  16851. if(index === -1) {
  16852. var keys = self['@keys'];
  16853. index = keys.length;
  16854. keys.push(aKey);
  16855. }
  16856. return self['@values'][index] = aValue;
  16857. ;
  16858. return self;
  16859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16860. }, function($ctx1) {$ctx1.fill(self,"at:put:",{aKey:aKey,aValue:aValue},$globals.Dictionary)});
  16861. //>>excludeEnd("ctx");
  16862. },
  16863. //>>excludeStart("ide", pragmas.excludeIdeData);
  16864. args: ["aKey", "aValue"],
  16865. 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>",
  16866. referencedClasses: [],
  16867. //>>excludeEnd("ide");
  16868. messageSends: []
  16869. }),
  16870. $globals.Dictionary);
  16871. $core.addMethod(
  16872. $core.method({
  16873. selector: "includesKey:",
  16874. protocol: 'testing',
  16875. fn: function (aKey){
  16876. var self=this;
  16877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16878. return $core.withContext(function($ctx1) {
  16879. //>>excludeEnd("ctx");
  16880. return self._positionOfKey_(aKey) >= 0; ;
  16881. return self;
  16882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16883. }, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey},$globals.Dictionary)});
  16884. //>>excludeEnd("ctx");
  16885. },
  16886. //>>excludeStart("ide", pragmas.excludeIdeData);
  16887. args: ["aKey"],
  16888. source: "includesKey: aKey\x0a\x09< return self._positionOfKey_(aKey) >>= 0; >",
  16889. referencedClasses: [],
  16890. //>>excludeEnd("ide");
  16891. messageSends: []
  16892. }),
  16893. $globals.Dictionary);
  16894. $core.addMethod(
  16895. $core.method({
  16896. selector: "indexOf:ifAbsent:",
  16897. protocol: 'accessing',
  16898. fn: function (anObject,aBlock){
  16899. var self=this;
  16900. var index;
  16901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16902. return $core.withContext(function($ctx1) {
  16903. //>>excludeEnd("ctx");
  16904. var $2,$1;
  16905. index=$recv(self["@values"])._indexOf_ifAbsent_(anObject,(function(){
  16906. return (0);
  16907. }));
  16908. $2=$recv(index).__eq((0));
  16909. if($core.assert($2)){
  16910. $1=$recv(aBlock)._value();
  16911. } else {
  16912. $1=$recv(self["@keys"])._at_(index);
  16913. };
  16914. return $1;
  16915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16916. }, function($ctx1) {$ctx1.fill(self,"indexOf:ifAbsent:",{anObject:anObject,aBlock:aBlock,index:index},$globals.Dictionary)});
  16917. //>>excludeEnd("ctx");
  16918. },
  16919. //>>excludeStart("ide", pragmas.excludeIdeData);
  16920. args: ["anObject", "aBlock"],
  16921. 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 ]",
  16922. referencedClasses: [],
  16923. //>>excludeEnd("ide");
  16924. messageSends: ["indexOf:ifAbsent:", "ifTrue:ifFalse:", "=", "value", "at:"]
  16925. }),
  16926. $globals.Dictionary);
  16927. $core.addMethod(
  16928. $core.method({
  16929. selector: "initialize",
  16930. protocol: 'initialization',
  16931. fn: function (){
  16932. var self=this;
  16933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16934. return $core.withContext(function($ctx1) {
  16935. //>>excludeEnd("ctx");
  16936. (
  16937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16938. $ctx1.supercall = true,
  16939. //>>excludeEnd("ctx");
  16940. $globals.Dictionary.superclass.fn.prototype._initialize.apply($recv(self), []));
  16941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16942. $ctx1.supercall = false;
  16943. //>>excludeEnd("ctx");;
  16944. self["@keys"]=[];
  16945. self["@values"]=[];
  16946. return self;
  16947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16948. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Dictionary)});
  16949. //>>excludeEnd("ctx");
  16950. },
  16951. //>>excludeStart("ide", pragmas.excludeIdeData);
  16952. args: [],
  16953. source: "initialize\x0a\x09super initialize.\x0a\x09keys := #().\x0a\x09values := #()",
  16954. referencedClasses: [],
  16955. //>>excludeEnd("ide");
  16956. messageSends: ["initialize"]
  16957. }),
  16958. $globals.Dictionary);
  16959. $core.addMethod(
  16960. $core.method({
  16961. selector: "keys",
  16962. protocol: 'accessing',
  16963. fn: function (){
  16964. var self=this;
  16965. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16966. return $core.withContext(function($ctx1) {
  16967. //>>excludeEnd("ctx");
  16968. var $1;
  16969. $1=$recv(self["@keys"])._copy();
  16970. return $1;
  16971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16972. }, function($ctx1) {$ctx1.fill(self,"keys",{},$globals.Dictionary)});
  16973. //>>excludeEnd("ctx");
  16974. },
  16975. //>>excludeStart("ide", pragmas.excludeIdeData);
  16976. args: [],
  16977. source: "keys\x0a\x09^ keys copy",
  16978. referencedClasses: [],
  16979. //>>excludeEnd("ide");
  16980. messageSends: ["copy"]
  16981. }),
  16982. $globals.Dictionary);
  16983. $core.addMethod(
  16984. $core.method({
  16985. selector: "keysAndValuesDo:",
  16986. protocol: 'enumerating',
  16987. fn: function (aBlock){
  16988. var self=this;
  16989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16990. return $core.withContext(function($ctx1) {
  16991. //>>excludeEnd("ctx");
  16992. var $1;
  16993. $1=$recv(self["@keys"])._with_do_(self["@values"],aBlock);
  16994. return $1;
  16995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16996. }, function($ctx1) {$ctx1.fill(self,"keysAndValuesDo:",{aBlock:aBlock},$globals.Dictionary)});
  16997. //>>excludeEnd("ctx");
  16998. },
  16999. //>>excludeStart("ide", pragmas.excludeIdeData);
  17000. args: ["aBlock"],
  17001. source: "keysAndValuesDo: aBlock\x0a\x09^ keys with: values do: aBlock",
  17002. referencedClasses: [],
  17003. //>>excludeEnd("ide");
  17004. messageSends: ["with:do:"]
  17005. }),
  17006. $globals.Dictionary);
  17007. $core.addMethod(
  17008. $core.method({
  17009. selector: "keysDo:",
  17010. protocol: 'enumerating',
  17011. fn: function (aBlock){
  17012. var self=this;
  17013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17014. return $core.withContext(function($ctx1) {
  17015. //>>excludeEnd("ctx");
  17016. var $1;
  17017. $1=$recv(self["@keys"])._do_(aBlock);
  17018. return $1;
  17019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17020. }, function($ctx1) {$ctx1.fill(self,"keysDo:",{aBlock:aBlock},$globals.Dictionary)});
  17021. //>>excludeEnd("ctx");
  17022. },
  17023. //>>excludeStart("ide", pragmas.excludeIdeData);
  17024. args: ["aBlock"],
  17025. source: "keysDo: aBlock\x0a\x09^ keys do: aBlock",
  17026. referencedClasses: [],
  17027. //>>excludeEnd("ide");
  17028. messageSends: ["do:"]
  17029. }),
  17030. $globals.Dictionary);
  17031. $core.addMethod(
  17032. $core.method({
  17033. selector: "positionOfKey:",
  17034. protocol: 'private',
  17035. fn: function (anObject){
  17036. var self=this;
  17037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17038. return $core.withContext(function($ctx1) {
  17039. //>>excludeEnd("ctx");
  17040. var keys = self['@keys'];
  17041. for(var i=0;i<keys.length;i++){
  17042. if(keys[i].__eq(anObject)) { return i;}
  17043. }
  17044. return -1;
  17045. ;
  17046. return self;
  17047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17048. }, function($ctx1) {$ctx1.fill(self,"positionOfKey:",{anObject:anObject},$globals.Dictionary)});
  17049. //>>excludeEnd("ctx");
  17050. },
  17051. //>>excludeStart("ide", pragmas.excludeIdeData);
  17052. args: ["anObject"],
  17053. 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>",
  17054. referencedClasses: [],
  17055. //>>excludeEnd("ide");
  17056. messageSends: []
  17057. }),
  17058. $globals.Dictionary);
  17059. $core.addMethod(
  17060. $core.method({
  17061. selector: "removeAll",
  17062. protocol: 'adding/removing',
  17063. fn: function (){
  17064. var self=this;
  17065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17066. return $core.withContext(function($ctx1) {
  17067. //>>excludeEnd("ctx");
  17068. $recv(self["@keys"])._removeAll();
  17069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17070. $ctx1.sendIdx["removeAll"]=1;
  17071. //>>excludeEnd("ctx");
  17072. $recv(self["@values"])._removeAll();
  17073. return self;
  17074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17075. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.Dictionary)});
  17076. //>>excludeEnd("ctx");
  17077. },
  17078. //>>excludeStart("ide", pragmas.excludeIdeData);
  17079. args: [],
  17080. source: "removeAll\x0a\x09keys removeAll.\x0a\x09values removeAll",
  17081. referencedClasses: [],
  17082. //>>excludeEnd("ide");
  17083. messageSends: ["removeAll"]
  17084. }),
  17085. $globals.Dictionary);
  17086. $core.addMethod(
  17087. $core.method({
  17088. selector: "removeKey:ifAbsent:",
  17089. protocol: 'adding/removing',
  17090. fn: function (aKey,aBlock){
  17091. var self=this;
  17092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17093. return $core.withContext(function($ctx1) {
  17094. //>>excludeEnd("ctx");
  17095. var index = self._positionOfKey_(aKey);
  17096. if(index === -1) {
  17097. return aBlock._value()
  17098. } else {
  17099. var keys = self['@keys'], values = self['@values'];
  17100. var value = values[index], l = keys.length;
  17101. keys[index] = keys[l-1];
  17102. keys.pop();
  17103. values[index] = values[l-1];
  17104. values.pop();
  17105. return value;
  17106. }
  17107. ;
  17108. return self;
  17109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17110. }, function($ctx1) {$ctx1.fill(self,"removeKey:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.Dictionary)});
  17111. //>>excludeEnd("ctx");
  17112. },
  17113. //>>excludeStart("ide", pragmas.excludeIdeData);
  17114. args: ["aKey", "aBlock"],
  17115. 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>",
  17116. referencedClasses: [],
  17117. //>>excludeEnd("ide");
  17118. messageSends: []
  17119. }),
  17120. $globals.Dictionary);
  17121. $core.addMethod(
  17122. $core.method({
  17123. selector: "values",
  17124. protocol: 'accessing',
  17125. fn: function (){
  17126. var self=this;
  17127. var $1;
  17128. $1=self["@values"];
  17129. return $1;
  17130. },
  17131. //>>excludeStart("ide", pragmas.excludeIdeData);
  17132. args: [],
  17133. source: "values\x0a\x09^ values",
  17134. referencedClasses: [],
  17135. //>>excludeEnd("ide");
  17136. messageSends: []
  17137. }),
  17138. $globals.Dictionary);
  17139. $core.addMethod(
  17140. $core.method({
  17141. selector: "valuesDo:",
  17142. protocol: 'enumerating',
  17143. fn: function (aBlock){
  17144. var self=this;
  17145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17146. return $core.withContext(function($ctx1) {
  17147. //>>excludeEnd("ctx");
  17148. var $1;
  17149. $1=$recv(self["@values"])._do_(aBlock);
  17150. return $1;
  17151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17152. }, function($ctx1) {$ctx1.fill(self,"valuesDo:",{aBlock:aBlock},$globals.Dictionary)});
  17153. //>>excludeEnd("ctx");
  17154. },
  17155. //>>excludeStart("ide", pragmas.excludeIdeData);
  17156. args: ["aBlock"],
  17157. source: "valuesDo: aBlock\x0a\x09^ values do: aBlock",
  17158. referencedClasses: [],
  17159. //>>excludeEnd("ide");
  17160. messageSends: ["do:"]
  17161. }),
  17162. $globals.Dictionary);
  17163. $core.addClass('HashedCollection', $globals.AssociativeCollection, [], 'Kernel-Collections');
  17164. //>>excludeStart("ide", pragmas.excludeIdeData);
  17165. $globals.HashedCollection.comment="I am a traditional JavaScript object, or a Smalltalk `Dictionary`.\x0a\x0aUnlike a `Dictionary`, I can only have strings as keys.";
  17166. //>>excludeEnd("ide");
  17167. $core.addMethod(
  17168. $core.method({
  17169. selector: "at:ifAbsent:",
  17170. protocol: 'accessing',
  17171. fn: function (aKey,aBlock){
  17172. var self=this;
  17173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17174. return $core.withContext(function($ctx1) {
  17175. //>>excludeEnd("ctx");
  17176. var $2,$1;
  17177. $2=self._includesKey_(aKey);
  17178. if($core.assert($2)){
  17179. $1=self._basicAt_(aKey);
  17180. } else {
  17181. $1=$recv(aBlock)._value();
  17182. };
  17183. return $1;
  17184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17185. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.HashedCollection)});
  17186. //>>excludeEnd("ctx");
  17187. },
  17188. //>>excludeStart("ide", pragmas.excludeIdeData);
  17189. args: ["aKey", "aBlock"],
  17190. source: "at: aKey ifAbsent: aBlock\x0a\x09^ (self includesKey: aKey)\x0a\x09\x09ifTrue: [ self basicAt: aKey ]\x0a\x09\x09ifFalse: [ aBlock value ]",
  17191. referencedClasses: [],
  17192. //>>excludeEnd("ide");
  17193. messageSends: ["ifTrue:ifFalse:", "includesKey:", "basicAt:", "value"]
  17194. }),
  17195. $globals.HashedCollection);
  17196. $core.addMethod(
  17197. $core.method({
  17198. selector: "at:put:",
  17199. protocol: 'accessing',
  17200. fn: function (aKey,aValue){
  17201. var self=this;
  17202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17203. return $core.withContext(function($ctx1) {
  17204. //>>excludeEnd("ctx");
  17205. var $1;
  17206. $1=self._basicAt_put_(aKey,aValue);
  17207. return $1;
  17208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17209. }, function($ctx1) {$ctx1.fill(self,"at:put:",{aKey:aKey,aValue:aValue},$globals.HashedCollection)});
  17210. //>>excludeEnd("ctx");
  17211. },
  17212. //>>excludeStart("ide", pragmas.excludeIdeData);
  17213. args: ["aKey", "aValue"],
  17214. source: "at: aKey put: aValue\x0a\x09^ self basicAt: aKey put: aValue",
  17215. referencedClasses: [],
  17216. //>>excludeEnd("ide");
  17217. messageSends: ["basicAt:put:"]
  17218. }),
  17219. $globals.HashedCollection);
  17220. $core.addMethod(
  17221. $core.method({
  17222. selector: "includesKey:",
  17223. protocol: 'testing',
  17224. fn: function (aKey){
  17225. var self=this;
  17226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17227. return $core.withContext(function($ctx1) {
  17228. //>>excludeEnd("ctx");
  17229. return self.hasOwnProperty(aKey);
  17230. return self;
  17231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17232. }, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey},$globals.HashedCollection)});
  17233. //>>excludeEnd("ctx");
  17234. },
  17235. //>>excludeStart("ide", pragmas.excludeIdeData);
  17236. args: ["aKey"],
  17237. source: "includesKey: aKey\x0a\x09<return self.hasOwnProperty(aKey)>",
  17238. referencedClasses: [],
  17239. //>>excludeEnd("ide");
  17240. messageSends: []
  17241. }),
  17242. $globals.HashedCollection);
  17243. $core.addMethod(
  17244. $core.method({
  17245. selector: "keys",
  17246. protocol: 'accessing',
  17247. fn: function (){
  17248. var self=this;
  17249. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17250. return $core.withContext(function($ctx1) {
  17251. //>>excludeEnd("ctx");
  17252. return Object.keys(self);
  17253. return self;
  17254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17255. }, function($ctx1) {$ctx1.fill(self,"keys",{},$globals.HashedCollection)});
  17256. //>>excludeEnd("ctx");
  17257. },
  17258. //>>excludeStart("ide", pragmas.excludeIdeData);
  17259. args: [],
  17260. source: "keys\x0a\x09<return Object.keys(self)>",
  17261. referencedClasses: [],
  17262. //>>excludeEnd("ide");
  17263. messageSends: []
  17264. }),
  17265. $globals.HashedCollection);
  17266. $core.addMethod(
  17267. $core.method({
  17268. selector: "keysDo:",
  17269. protocol: 'enumerating',
  17270. fn: function (aBlock){
  17271. var self=this;
  17272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17273. return $core.withContext(function($ctx1) {
  17274. //>>excludeEnd("ctx");
  17275. $recv(self._keys())._do_(aBlock);
  17276. return self;
  17277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17278. }, function($ctx1) {$ctx1.fill(self,"keysDo:",{aBlock:aBlock},$globals.HashedCollection)});
  17279. //>>excludeEnd("ctx");
  17280. },
  17281. //>>excludeStart("ide", pragmas.excludeIdeData);
  17282. args: ["aBlock"],
  17283. source: "keysDo: aBlock\x0a\x09self keys do: aBlock",
  17284. referencedClasses: [],
  17285. //>>excludeEnd("ide");
  17286. messageSends: ["do:", "keys"]
  17287. }),
  17288. $globals.HashedCollection);
  17289. $core.addMethod(
  17290. $core.method({
  17291. selector: "removeKey:ifAbsent:",
  17292. protocol: 'adding/removing',
  17293. fn: function (aKey,aBlock){
  17294. var self=this;
  17295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17296. return $core.withContext(function($ctx1) {
  17297. //>>excludeEnd("ctx");
  17298. var $1;
  17299. $1=self._at_ifPresent_ifAbsent_(aKey,(function(removed){
  17300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17301. return $core.withContext(function($ctx2) {
  17302. //>>excludeEnd("ctx");
  17303. self._basicDelete_(aKey);
  17304. return removed;
  17305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17306. }, function($ctx2) {$ctx2.fillBlock({removed:removed},$ctx1,1)});
  17307. //>>excludeEnd("ctx");
  17308. }),(function(){
  17309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17310. return $core.withContext(function($ctx2) {
  17311. //>>excludeEnd("ctx");
  17312. return $recv(aBlock)._value();
  17313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17314. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  17315. //>>excludeEnd("ctx");
  17316. }));
  17317. return $1;
  17318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17319. }, function($ctx1) {$ctx1.fill(self,"removeKey:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.HashedCollection)});
  17320. //>>excludeEnd("ctx");
  17321. },
  17322. //>>excludeStart("ide", pragmas.excludeIdeData);
  17323. args: ["aKey", "aBlock"],
  17324. 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 ]",
  17325. referencedClasses: [],
  17326. //>>excludeEnd("ide");
  17327. messageSends: ["at:ifPresent:ifAbsent:", "basicDelete:", "value"]
  17328. }),
  17329. $globals.HashedCollection);
  17330. $core.addMethod(
  17331. $core.method({
  17332. selector: "values",
  17333. protocol: 'accessing',
  17334. fn: function (){
  17335. var self=this;
  17336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17337. return $core.withContext(function($ctx1) {
  17338. //>>excludeEnd("ctx");
  17339. return self._keys().map(function(key){
  17340. return self._at_(key);
  17341. });
  17342. ;
  17343. return self;
  17344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17345. }, function($ctx1) {$ctx1.fill(self,"values",{},$globals.HashedCollection)});
  17346. //>>excludeEnd("ctx");
  17347. },
  17348. //>>excludeStart("ide", pragmas.excludeIdeData);
  17349. args: [],
  17350. source: "values\x0a\x09<\x0a\x09\x09return self._keys().map(function(key){\x0a\x09\x09\x09return self._at_(key);\x0a\x09\x09});\x0a\x09>",
  17351. referencedClasses: [],
  17352. //>>excludeEnd("ide");
  17353. messageSends: []
  17354. }),
  17355. $globals.HashedCollection);
  17356. $core.addMethod(
  17357. $core.method({
  17358. selector: "valuesDo:",
  17359. protocol: 'enumerating',
  17360. fn: function (aBlock){
  17361. var self=this;
  17362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17363. return $core.withContext(function($ctx1) {
  17364. //>>excludeEnd("ctx");
  17365. $recv(self._values())._do_(aBlock);
  17366. return self;
  17367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17368. }, function($ctx1) {$ctx1.fill(self,"valuesDo:",{aBlock:aBlock},$globals.HashedCollection)});
  17369. //>>excludeEnd("ctx");
  17370. },
  17371. //>>excludeStart("ide", pragmas.excludeIdeData);
  17372. args: ["aBlock"],
  17373. source: "valuesDo: aBlock\x0a\x09self values do: aBlock",
  17374. referencedClasses: [],
  17375. //>>excludeEnd("ide");
  17376. messageSends: ["do:", "values"]
  17377. }),
  17378. $globals.HashedCollection);
  17379. $core.addClass('SequenceableCollection', $globals.IndexableCollection, [], 'Kernel-Collections');
  17380. //>>excludeStart("ide", pragmas.excludeIdeData);
  17381. $globals.SequenceableCollection.comment="I am an IndexableCollection\x0awith numeric indexes starting with 1.";
  17382. //>>excludeEnd("ide");
  17383. $core.addMethod(
  17384. $core.method({
  17385. selector: "=",
  17386. protocol: 'comparing',
  17387. fn: function (aCollection){
  17388. var self=this;
  17389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17390. return $core.withContext(function($ctx1) {
  17391. //>>excludeEnd("ctx");
  17392. var $3,$2,$4,$1,$5;
  17393. var $early={};
  17394. try {
  17395. $3=self._class();
  17396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17397. $ctx1.sendIdx["class"]=1;
  17398. //>>excludeEnd("ctx");
  17399. $2=$recv($3).__eq($recv(aCollection)._class());
  17400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17401. $ctx1.sendIdx["="]=1;
  17402. //>>excludeEnd("ctx");
  17403. $1=$recv($2)._and_((function(){
  17404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17405. return $core.withContext(function($ctx2) {
  17406. //>>excludeEnd("ctx");
  17407. $4=self._size();
  17408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17409. $ctx2.sendIdx["size"]=1;
  17410. //>>excludeEnd("ctx");
  17411. return $recv($4).__eq($recv(aCollection)._size());
  17412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17413. $ctx2.sendIdx["="]=2;
  17414. //>>excludeEnd("ctx");
  17415. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17416. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  17417. //>>excludeEnd("ctx");
  17418. }));
  17419. if(!$core.assert($1)){
  17420. return false;
  17421. };
  17422. self._withIndexDo_((function(each,i){
  17423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17424. return $core.withContext(function($ctx2) {
  17425. //>>excludeEnd("ctx");
  17426. $5=$recv($recv(aCollection)._at_(i)).__eq(each);
  17427. if(!$core.assert($5)){
  17428. throw $early=[false];
  17429. };
  17430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17431. }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,3)});
  17432. //>>excludeEnd("ctx");
  17433. }));
  17434. return true;
  17435. }
  17436. catch(e) {if(e===$early)return e[0]; throw e}
  17437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17438. }, function($ctx1) {$ctx1.fill(self,"=",{aCollection:aCollection},$globals.SequenceableCollection)});
  17439. //>>excludeEnd("ctx");
  17440. },
  17441. //>>excludeStart("ide", pragmas.excludeIdeData);
  17442. args: ["aCollection"],
  17443. 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",
  17444. referencedClasses: [],
  17445. //>>excludeEnd("ide");
  17446. messageSends: ["ifFalse:", "and:", "=", "class", "size", "withIndexDo:", "at:"]
  17447. }),
  17448. $globals.SequenceableCollection);
  17449. $core.addMethod(
  17450. $core.method({
  17451. selector: "addLast:",
  17452. protocol: 'adding/removing',
  17453. fn: function (anObject){
  17454. var self=this;
  17455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17456. return $core.withContext(function($ctx1) {
  17457. //>>excludeEnd("ctx");
  17458. self._add_(anObject);
  17459. return self;
  17460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17461. }, function($ctx1) {$ctx1.fill(self,"addLast:",{anObject:anObject},$globals.SequenceableCollection)});
  17462. //>>excludeEnd("ctx");
  17463. },
  17464. //>>excludeStart("ide", pragmas.excludeIdeData);
  17465. args: ["anObject"],
  17466. source: "addLast: anObject\x0a\x09self add: anObject",
  17467. referencedClasses: [],
  17468. //>>excludeEnd("ide");
  17469. messageSends: ["add:"]
  17470. }),
  17471. $globals.SequenceableCollection);
  17472. $core.addMethod(
  17473. $core.method({
  17474. selector: "allButFirst",
  17475. protocol: 'accessing',
  17476. fn: function (){
  17477. var self=this;
  17478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17479. return $core.withContext(function($ctx1) {
  17480. //>>excludeEnd("ctx");
  17481. var $1;
  17482. $1=self._copyFrom_to_((2),self._size());
  17483. return $1;
  17484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17485. }, function($ctx1) {$ctx1.fill(self,"allButFirst",{},$globals.SequenceableCollection)});
  17486. //>>excludeEnd("ctx");
  17487. },
  17488. //>>excludeStart("ide", pragmas.excludeIdeData);
  17489. args: [],
  17490. source: "allButFirst\x0a\x09^ self copyFrom: 2 to: self size",
  17491. referencedClasses: [],
  17492. //>>excludeEnd("ide");
  17493. messageSends: ["copyFrom:to:", "size"]
  17494. }),
  17495. $globals.SequenceableCollection);
  17496. $core.addMethod(
  17497. $core.method({
  17498. selector: "allButLast",
  17499. protocol: 'accessing',
  17500. fn: function (){
  17501. var self=this;
  17502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17503. return $core.withContext(function($ctx1) {
  17504. //>>excludeEnd("ctx");
  17505. var $1;
  17506. $1=self._copyFrom_to_((1),$recv(self._size()).__minus((1)));
  17507. return $1;
  17508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17509. }, function($ctx1) {$ctx1.fill(self,"allButLast",{},$globals.SequenceableCollection)});
  17510. //>>excludeEnd("ctx");
  17511. },
  17512. //>>excludeStart("ide", pragmas.excludeIdeData);
  17513. args: [],
  17514. source: "allButLast\x0a\x09^ self copyFrom: 1 to: self size - 1",
  17515. referencedClasses: [],
  17516. //>>excludeEnd("ide");
  17517. messageSends: ["copyFrom:to:", "-", "size"]
  17518. }),
  17519. $globals.SequenceableCollection);
  17520. $core.addMethod(
  17521. $core.method({
  17522. selector: "atRandom",
  17523. protocol: 'accessing',
  17524. fn: function (){
  17525. var self=this;
  17526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17527. return $core.withContext(function($ctx1) {
  17528. //>>excludeEnd("ctx");
  17529. var $1;
  17530. $1=self._at_($recv(self._size())._atRandom());
  17531. return $1;
  17532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17533. }, function($ctx1) {$ctx1.fill(self,"atRandom",{},$globals.SequenceableCollection)});
  17534. //>>excludeEnd("ctx");
  17535. },
  17536. //>>excludeStart("ide", pragmas.excludeIdeData);
  17537. args: [],
  17538. source: "atRandom\x0a\x09^ self at: self size atRandom",
  17539. referencedClasses: [],
  17540. //>>excludeEnd("ide");
  17541. messageSends: ["at:", "atRandom", "size"]
  17542. }),
  17543. $globals.SequenceableCollection);
  17544. $core.addMethod(
  17545. $core.method({
  17546. selector: "beginsWith:",
  17547. protocol: 'testing',
  17548. fn: function (prefix){
  17549. var self=this;
  17550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17551. return $core.withContext(function($ctx1) {
  17552. //>>excludeEnd("ctx");
  17553. var $2,$3,$1,$4;
  17554. $2=self._size();
  17555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17556. $ctx1.sendIdx["size"]=1;
  17557. //>>excludeEnd("ctx");
  17558. $3=$recv(prefix)._size();
  17559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17560. $ctx1.sendIdx["size"]=2;
  17561. //>>excludeEnd("ctx");
  17562. $1=$recv($2).__lt($3);
  17563. if($core.assert($1)){
  17564. return false;
  17565. };
  17566. $4=$recv(self._first_($recv(prefix)._size())).__eq(prefix);
  17567. return $4;
  17568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17569. }, function($ctx1) {$ctx1.fill(self,"beginsWith:",{prefix:prefix},$globals.SequenceableCollection)});
  17570. //>>excludeEnd("ctx");
  17571. },
  17572. //>>excludeStart("ide", pragmas.excludeIdeData);
  17573. args: ["prefix"],
  17574. source: "beginsWith: prefix\x0a\x09self size < prefix size ifTrue: [ ^ false ].\x0a\x09^ (self first: prefix size) = prefix",
  17575. referencedClasses: [],
  17576. //>>excludeEnd("ide");
  17577. messageSends: ["ifTrue:", "<", "size", "=", "first:"]
  17578. }),
  17579. $globals.SequenceableCollection);
  17580. $core.addMethod(
  17581. $core.method({
  17582. selector: "copyFrom:to:",
  17583. protocol: 'copying',
  17584. fn: function (anIndex,anotherIndex){
  17585. var self=this;
  17586. var range,newCollection;
  17587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17588. return $core.withContext(function($ctx1) {
  17589. //>>excludeEnd("ctx");
  17590. var $1;
  17591. range=$recv(anIndex)._to_(anotherIndex);
  17592. newCollection=$recv(self._class())._new_($recv(range)._size());
  17593. $recv(range)._withIndexDo_((function(each,i){
  17594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17595. return $core.withContext(function($ctx2) {
  17596. //>>excludeEnd("ctx");
  17597. return $recv(newCollection)._at_put_(i,self._at_(each));
  17598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17599. }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,1)});
  17600. //>>excludeEnd("ctx");
  17601. }));
  17602. $1=newCollection;
  17603. return $1;
  17604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17605. }, function($ctx1) {$ctx1.fill(self,"copyFrom:to:",{anIndex:anIndex,anotherIndex:anotherIndex,range:range,newCollection:newCollection},$globals.SequenceableCollection)});
  17606. //>>excludeEnd("ctx");
  17607. },
  17608. //>>excludeStart("ide", pragmas.excludeIdeData);
  17609. args: ["anIndex", "anotherIndex"],
  17610. 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",
  17611. referencedClasses: [],
  17612. //>>excludeEnd("ide");
  17613. messageSends: ["to:", "new:", "class", "size", "withIndexDo:", "at:put:", "at:"]
  17614. }),
  17615. $globals.SequenceableCollection);
  17616. $core.addMethod(
  17617. $core.method({
  17618. selector: "deepCopy",
  17619. protocol: 'copying',
  17620. fn: function (){
  17621. var self=this;
  17622. var newCollection;
  17623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17624. return $core.withContext(function($ctx1) {
  17625. //>>excludeEnd("ctx");
  17626. var $1;
  17627. newCollection=$recv(self._class())._new_(self._size());
  17628. self._withIndexDo_((function(each,index){
  17629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17630. return $core.withContext(function($ctx2) {
  17631. //>>excludeEnd("ctx");
  17632. return $recv(newCollection)._at_put_(index,$recv(each)._deepCopy());
  17633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17634. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,1)});
  17635. //>>excludeEnd("ctx");
  17636. }));
  17637. $1=newCollection;
  17638. return $1;
  17639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17640. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{newCollection:newCollection},$globals.SequenceableCollection)});
  17641. //>>excludeEnd("ctx");
  17642. },
  17643. //>>excludeStart("ide", pragmas.excludeIdeData);
  17644. args: [],
  17645. 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",
  17646. referencedClasses: [],
  17647. //>>excludeEnd("ide");
  17648. messageSends: ["new:", "class", "size", "withIndexDo:", "at:put:", "deepCopy"]
  17649. }),
  17650. $globals.SequenceableCollection);
  17651. $core.addMethod(
  17652. $core.method({
  17653. selector: "detect:ifNone:",
  17654. protocol: 'enumerating',
  17655. fn: function (aBlock,anotherBlock){
  17656. var self=this;
  17657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17658. return $core.withContext(function($ctx1) {
  17659. //>>excludeEnd("ctx");
  17660. self = self._numericallyIndexable();
  17661. for(var i = 0; i < self.length; i++)
  17662. if(aBlock._value_(self[i]))
  17663. return self[i];
  17664. return anotherBlock._value();
  17665. ;
  17666. return self;
  17667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17668. }, function($ctx1) {$ctx1.fill(self,"detect:ifNone:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.SequenceableCollection)});
  17669. //>>excludeEnd("ctx");
  17670. },
  17671. //>>excludeStart("ide", pragmas.excludeIdeData);
  17672. args: ["aBlock", "anotherBlock"],
  17673. 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>",
  17674. referencedClasses: [],
  17675. //>>excludeEnd("ide");
  17676. messageSends: []
  17677. }),
  17678. $globals.SequenceableCollection);
  17679. $core.addMethod(
  17680. $core.method({
  17681. selector: "do:",
  17682. protocol: 'enumerating',
  17683. fn: function (aBlock){
  17684. var self=this;
  17685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17686. return $core.withContext(function($ctx1) {
  17687. //>>excludeEnd("ctx");
  17688. self = self._numericallyIndexable();
  17689. for(var i=0; i < self.length; i++) {
  17690. aBlock._value_(self[i]);
  17691. }
  17692. ;
  17693. return self;
  17694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17695. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.SequenceableCollection)});
  17696. //>>excludeEnd("ctx");
  17697. },
  17698. //>>excludeStart("ide", pragmas.excludeIdeData);
  17699. args: ["aBlock"],
  17700. 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>",
  17701. referencedClasses: [],
  17702. //>>excludeEnd("ide");
  17703. messageSends: []
  17704. }),
  17705. $globals.SequenceableCollection);
  17706. $core.addMethod(
  17707. $core.method({
  17708. selector: "endsWith:",
  17709. protocol: 'testing',
  17710. fn: function (suffix){
  17711. var self=this;
  17712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17713. return $core.withContext(function($ctx1) {
  17714. //>>excludeEnd("ctx");
  17715. var $2,$3,$1,$4;
  17716. $2=self._size();
  17717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17718. $ctx1.sendIdx["size"]=1;
  17719. //>>excludeEnd("ctx");
  17720. $3=$recv(suffix)._size();
  17721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17722. $ctx1.sendIdx["size"]=2;
  17723. //>>excludeEnd("ctx");
  17724. $1=$recv($2).__lt($3);
  17725. if($core.assert($1)){
  17726. return false;
  17727. };
  17728. $4=$recv(self._last_($recv(suffix)._size())).__eq(suffix);
  17729. return $4;
  17730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17731. }, function($ctx1) {$ctx1.fill(self,"endsWith:",{suffix:suffix},$globals.SequenceableCollection)});
  17732. //>>excludeEnd("ctx");
  17733. },
  17734. //>>excludeStart("ide", pragmas.excludeIdeData);
  17735. args: ["suffix"],
  17736. source: "endsWith: suffix\x0a\x09self size < suffix size ifTrue: [ ^ false ].\x0a\x09^ (self last: suffix size) = suffix",
  17737. referencedClasses: [],
  17738. //>>excludeEnd("ide");
  17739. messageSends: ["ifTrue:", "<", "size", "=", "last:"]
  17740. }),
  17741. $globals.SequenceableCollection);
  17742. $core.addMethod(
  17743. $core.method({
  17744. selector: "first",
  17745. protocol: 'accessing',
  17746. fn: function (){
  17747. var self=this;
  17748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17749. return $core.withContext(function($ctx1) {
  17750. //>>excludeEnd("ctx");
  17751. var $1;
  17752. $1=self._at_((1));
  17753. return $1;
  17754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17755. }, function($ctx1) {$ctx1.fill(self,"first",{},$globals.SequenceableCollection)});
  17756. //>>excludeEnd("ctx");
  17757. },
  17758. //>>excludeStart("ide", pragmas.excludeIdeData);
  17759. args: [],
  17760. source: "first\x0a\x09^ self at: 1",
  17761. referencedClasses: [],
  17762. //>>excludeEnd("ide");
  17763. messageSends: ["at:"]
  17764. }),
  17765. $globals.SequenceableCollection);
  17766. $core.addMethod(
  17767. $core.method({
  17768. selector: "first:",
  17769. protocol: 'accessing',
  17770. fn: function (aNumber){
  17771. var self=this;
  17772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17773. return $core.withContext(function($ctx1) {
  17774. //>>excludeEnd("ctx");
  17775. var $1,$2;
  17776. $1=$recv(self._size()).__lt(aNumber);
  17777. if($core.assert($1)){
  17778. self._error_("Invalid number of elements");
  17779. };
  17780. $2=self._copyFrom_to_((1),aNumber);
  17781. return $2;
  17782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17783. }, function($ctx1) {$ctx1.fill(self,"first:",{aNumber:aNumber},$globals.SequenceableCollection)});
  17784. //>>excludeEnd("ctx");
  17785. },
  17786. //>>excludeStart("ide", pragmas.excludeIdeData);
  17787. args: ["aNumber"],
  17788. 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",
  17789. referencedClasses: [],
  17790. //>>excludeEnd("ide");
  17791. messageSends: ["ifTrue:", "<", "size", "error:", "copyFrom:to:"]
  17792. }),
  17793. $globals.SequenceableCollection);
  17794. $core.addMethod(
  17795. $core.method({
  17796. selector: "fourth",
  17797. protocol: 'accessing',
  17798. fn: function (){
  17799. var self=this;
  17800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17801. return $core.withContext(function($ctx1) {
  17802. //>>excludeEnd("ctx");
  17803. var $1;
  17804. $1=self._at_((4));
  17805. return $1;
  17806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17807. }, function($ctx1) {$ctx1.fill(self,"fourth",{},$globals.SequenceableCollection)});
  17808. //>>excludeEnd("ctx");
  17809. },
  17810. //>>excludeStart("ide", pragmas.excludeIdeData);
  17811. args: [],
  17812. source: "fourth\x0a\x09^ self at: 4",
  17813. referencedClasses: [],
  17814. //>>excludeEnd("ide");
  17815. messageSends: ["at:"]
  17816. }),
  17817. $globals.SequenceableCollection);
  17818. $core.addMethod(
  17819. $core.method({
  17820. selector: "includes:",
  17821. protocol: 'testing',
  17822. fn: function (anObject){
  17823. var self=this;
  17824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17825. return $core.withContext(function($ctx1) {
  17826. //>>excludeEnd("ctx");
  17827. var $1;
  17828. $1=$recv(self._indexOf_ifAbsent_(anObject,(function(){
  17829. return nil;
  17830. })))._notNil();
  17831. return $1;
  17832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17833. }, function($ctx1) {$ctx1.fill(self,"includes:",{anObject:anObject},$globals.SequenceableCollection)});
  17834. //>>excludeEnd("ctx");
  17835. },
  17836. //>>excludeStart("ide", pragmas.excludeIdeData);
  17837. args: ["anObject"],
  17838. source: "includes: anObject\x0a\x09^ (self indexOf: anObject ifAbsent: [ nil ]) notNil",
  17839. referencedClasses: [],
  17840. //>>excludeEnd("ide");
  17841. messageSends: ["notNil", "indexOf:ifAbsent:"]
  17842. }),
  17843. $globals.SequenceableCollection);
  17844. $core.addMethod(
  17845. $core.method({
  17846. selector: "indexOf:ifAbsent:",
  17847. protocol: 'accessing',
  17848. fn: function (anObject,aBlock){
  17849. var self=this;
  17850. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17851. return $core.withContext(function($ctx1) {
  17852. //>>excludeEnd("ctx");
  17853. self = self._numericallyIndexable();
  17854. for(var i=0; i < self.length; i++) {
  17855. if($recv(self[i]).__eq(anObject)) {return i+1}
  17856. };
  17857. return aBlock._value();
  17858. ;
  17859. return self;
  17860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17861. }, function($ctx1) {$ctx1.fill(self,"indexOf:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.SequenceableCollection)});
  17862. //>>excludeEnd("ctx");
  17863. },
  17864. //>>excludeStart("ide", pragmas.excludeIdeData);
  17865. args: ["anObject", "aBlock"],
  17866. 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>",
  17867. referencedClasses: [],
  17868. //>>excludeEnd("ide");
  17869. messageSends: []
  17870. }),
  17871. $globals.SequenceableCollection);
  17872. $core.addMethod(
  17873. $core.method({
  17874. selector: "indexOf:startingAt:",
  17875. protocol: 'accessing',
  17876. fn: function (anObject,start){
  17877. var self=this;
  17878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17879. return $core.withContext(function($ctx1) {
  17880. //>>excludeEnd("ctx");
  17881. var $1;
  17882. $1=self._indexOf_startingAt_ifAbsent_(anObject,start,(function(){
  17883. return (0);
  17884. }));
  17885. return $1;
  17886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17887. }, function($ctx1) {$ctx1.fill(self,"indexOf:startingAt:",{anObject:anObject,start:start},$globals.SequenceableCollection)});
  17888. //>>excludeEnd("ctx");
  17889. },
  17890. //>>excludeStart("ide", pragmas.excludeIdeData);
  17891. args: ["anObject", "start"],
  17892. 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 ]",
  17893. referencedClasses: [],
  17894. //>>excludeEnd("ide");
  17895. messageSends: ["indexOf:startingAt:ifAbsent:"]
  17896. }),
  17897. $globals.SequenceableCollection);
  17898. $core.addMethod(
  17899. $core.method({
  17900. selector: "indexOf:startingAt:ifAbsent:",
  17901. protocol: 'accessing',
  17902. fn: function (anObject,start,aBlock){
  17903. var self=this;
  17904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17905. return $core.withContext(function($ctx1) {
  17906. //>>excludeEnd("ctx");
  17907. self = self._numericallyIndexable();
  17908. for(var i=start - 1; i < self.length; i++){
  17909. if($recv(self[i]).__eq(anObject)) {return i+1}
  17910. }
  17911. return aBlock._value();
  17912. ;
  17913. return self;
  17914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17915. }, function($ctx1) {$ctx1.fill(self,"indexOf:startingAt:ifAbsent:",{anObject:anObject,start:start,aBlock:aBlock},$globals.SequenceableCollection)});
  17916. //>>excludeEnd("ctx");
  17917. },
  17918. //>>excludeStart("ide", pragmas.excludeIdeData);
  17919. args: ["anObject", "start", "aBlock"],
  17920. 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>",
  17921. referencedClasses: [],
  17922. //>>excludeEnd("ide");
  17923. messageSends: []
  17924. }),
  17925. $globals.SequenceableCollection);
  17926. $core.addMethod(
  17927. $core.method({
  17928. selector: "last",
  17929. protocol: 'accessing',
  17930. fn: function (){
  17931. var self=this;
  17932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17933. return $core.withContext(function($ctx1) {
  17934. //>>excludeEnd("ctx");
  17935. var $1;
  17936. $1=self._at_(self._size());
  17937. return $1;
  17938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17939. }, function($ctx1) {$ctx1.fill(self,"last",{},$globals.SequenceableCollection)});
  17940. //>>excludeEnd("ctx");
  17941. },
  17942. //>>excludeStart("ide", pragmas.excludeIdeData);
  17943. args: [],
  17944. source: "last\x0a\x09^ self at: self size",
  17945. referencedClasses: [],
  17946. //>>excludeEnd("ide");
  17947. messageSends: ["at:", "size"]
  17948. }),
  17949. $globals.SequenceableCollection);
  17950. $core.addMethod(
  17951. $core.method({
  17952. selector: "last:",
  17953. protocol: 'accessing',
  17954. fn: function (aNumber){
  17955. var self=this;
  17956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17957. return $core.withContext(function($ctx1) {
  17958. //>>excludeEnd("ctx");
  17959. var $2,$1,$6,$5,$4,$3;
  17960. $2=self._size();
  17961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17962. $ctx1.sendIdx["size"]=1;
  17963. //>>excludeEnd("ctx");
  17964. $1=$recv($2).__lt(aNumber);
  17965. if($core.assert($1)){
  17966. self._error_("Invalid number of elements");
  17967. };
  17968. $6=self._size();
  17969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17970. $ctx1.sendIdx["size"]=2;
  17971. //>>excludeEnd("ctx");
  17972. $5=$recv($6).__minus(aNumber);
  17973. $4=$recv($5).__plus((1));
  17974. $3=self._copyFrom_to_($4,self._size());
  17975. return $3;
  17976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17977. }, function($ctx1) {$ctx1.fill(self,"last:",{aNumber:aNumber},$globals.SequenceableCollection)});
  17978. //>>excludeEnd("ctx");
  17979. },
  17980. //>>excludeStart("ide", pragmas.excludeIdeData);
  17981. args: ["aNumber"],
  17982. 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",
  17983. referencedClasses: [],
  17984. //>>excludeEnd("ide");
  17985. messageSends: ["ifTrue:", "<", "size", "error:", "copyFrom:to:", "+", "-"]
  17986. }),
  17987. $globals.SequenceableCollection);
  17988. $core.addMethod(
  17989. $core.method({
  17990. selector: "newStream",
  17991. protocol: 'streaming',
  17992. fn: function (){
  17993. var self=this;
  17994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17995. return $core.withContext(function($ctx1) {
  17996. //>>excludeEnd("ctx");
  17997. var $1;
  17998. $1=$recv(self._streamClass())._on_(self);
  17999. return $1;
  18000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18001. }, function($ctx1) {$ctx1.fill(self,"newStream",{},$globals.SequenceableCollection)});
  18002. //>>excludeEnd("ctx");
  18003. },
  18004. //>>excludeStart("ide", pragmas.excludeIdeData);
  18005. args: [],
  18006. source: "newStream\x0a\x09^ self streamClass on: self",
  18007. referencedClasses: [],
  18008. //>>excludeEnd("ide");
  18009. messageSends: ["on:", "streamClass"]
  18010. }),
  18011. $globals.SequenceableCollection);
  18012. $core.addMethod(
  18013. $core.method({
  18014. selector: "numericallyIndexable",
  18015. protocol: 'private',
  18016. fn: function (){
  18017. var self=this;
  18018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18019. return $core.withContext(function($ctx1) {
  18020. //>>excludeEnd("ctx");
  18021. self._subclassResponsibility();
  18022. return self;
  18023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18024. }, function($ctx1) {$ctx1.fill(self,"numericallyIndexable",{},$globals.SequenceableCollection)});
  18025. //>>excludeEnd("ctx");
  18026. },
  18027. //>>excludeStart("ide", pragmas.excludeIdeData);
  18028. args: [],
  18029. 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",
  18030. referencedClasses: [],
  18031. //>>excludeEnd("ide");
  18032. messageSends: ["subclassResponsibility"]
  18033. }),
  18034. $globals.SequenceableCollection);
  18035. $core.addMethod(
  18036. $core.method({
  18037. selector: "readStream",
  18038. protocol: 'streaming',
  18039. fn: function (){
  18040. var self=this;
  18041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18042. return $core.withContext(function($ctx1) {
  18043. //>>excludeEnd("ctx");
  18044. var $1;
  18045. $1=self._stream();
  18046. return $1;
  18047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18048. }, function($ctx1) {$ctx1.fill(self,"readStream",{},$globals.SequenceableCollection)});
  18049. //>>excludeEnd("ctx");
  18050. },
  18051. //>>excludeStart("ide", pragmas.excludeIdeData);
  18052. args: [],
  18053. source: "readStream\x0a\x09\x22For Pharo compatibility\x22\x0a\x09\x0a\x09^ self stream",
  18054. referencedClasses: [],
  18055. //>>excludeEnd("ide");
  18056. messageSends: ["stream"]
  18057. }),
  18058. $globals.SequenceableCollection);
  18059. $core.addMethod(
  18060. $core.method({
  18061. selector: "removeLast",
  18062. protocol: 'adding/removing',
  18063. fn: function (){
  18064. var self=this;
  18065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18066. return $core.withContext(function($ctx1) {
  18067. //>>excludeEnd("ctx");
  18068. var $1;
  18069. $1=self._remove_(self._last());
  18070. return $1;
  18071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18072. }, function($ctx1) {$ctx1.fill(self,"removeLast",{},$globals.SequenceableCollection)});
  18073. //>>excludeEnd("ctx");
  18074. },
  18075. //>>excludeStart("ide", pragmas.excludeIdeData);
  18076. args: [],
  18077. source: "removeLast\x0a\x09^ self remove: self last",
  18078. referencedClasses: [],
  18079. //>>excludeEnd("ide");
  18080. messageSends: ["remove:", "last"]
  18081. }),
  18082. $globals.SequenceableCollection);
  18083. $core.addMethod(
  18084. $core.method({
  18085. selector: "reversed",
  18086. protocol: 'converting',
  18087. fn: function (){
  18088. var self=this;
  18089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18090. return $core.withContext(function($ctx1) {
  18091. //>>excludeEnd("ctx");
  18092. self._subclassResponsibility();
  18093. return self;
  18094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18095. }, function($ctx1) {$ctx1.fill(self,"reversed",{},$globals.SequenceableCollection)});
  18096. //>>excludeEnd("ctx");
  18097. },
  18098. //>>excludeStart("ide", pragmas.excludeIdeData);
  18099. args: [],
  18100. source: "reversed\x0a\x09self subclassResponsibility",
  18101. referencedClasses: [],
  18102. //>>excludeEnd("ide");
  18103. messageSends: ["subclassResponsibility"]
  18104. }),
  18105. $globals.SequenceableCollection);
  18106. $core.addMethod(
  18107. $core.method({
  18108. selector: "second",
  18109. protocol: 'accessing',
  18110. fn: function (){
  18111. var self=this;
  18112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18113. return $core.withContext(function($ctx1) {
  18114. //>>excludeEnd("ctx");
  18115. var $1;
  18116. $1=self._at_((2));
  18117. return $1;
  18118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18119. }, function($ctx1) {$ctx1.fill(self,"second",{},$globals.SequenceableCollection)});
  18120. //>>excludeEnd("ctx");
  18121. },
  18122. //>>excludeStart("ide", pragmas.excludeIdeData);
  18123. args: [],
  18124. source: "second\x0a\x09^ self at: 2",
  18125. referencedClasses: [],
  18126. //>>excludeEnd("ide");
  18127. messageSends: ["at:"]
  18128. }),
  18129. $globals.SequenceableCollection);
  18130. $core.addMethod(
  18131. $core.method({
  18132. selector: "shallowCopy",
  18133. protocol: 'copying',
  18134. fn: function (){
  18135. var self=this;
  18136. var newCollection;
  18137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18138. return $core.withContext(function($ctx1) {
  18139. //>>excludeEnd("ctx");
  18140. var $1;
  18141. newCollection=$recv(self._class())._new_(self._size());
  18142. self._withIndexDo_((function(each,index){
  18143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18144. return $core.withContext(function($ctx2) {
  18145. //>>excludeEnd("ctx");
  18146. return $recv(newCollection)._at_put_(index,each);
  18147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18148. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,1)});
  18149. //>>excludeEnd("ctx");
  18150. }));
  18151. $1=newCollection;
  18152. return $1;
  18153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18154. }, function($ctx1) {$ctx1.fill(self,"shallowCopy",{newCollection:newCollection},$globals.SequenceableCollection)});
  18155. //>>excludeEnd("ctx");
  18156. },
  18157. //>>excludeStart("ide", pragmas.excludeIdeData);
  18158. args: [],
  18159. 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",
  18160. referencedClasses: [],
  18161. //>>excludeEnd("ide");
  18162. messageSends: ["new:", "class", "size", "withIndexDo:", "at:put:"]
  18163. }),
  18164. $globals.SequenceableCollection);
  18165. $core.addMethod(
  18166. $core.method({
  18167. selector: "stream",
  18168. protocol: 'streaming',
  18169. fn: function (){
  18170. var self=this;
  18171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18172. return $core.withContext(function($ctx1) {
  18173. //>>excludeEnd("ctx");
  18174. var $1;
  18175. $1=self._newStream();
  18176. return $1;
  18177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18178. }, function($ctx1) {$ctx1.fill(self,"stream",{},$globals.SequenceableCollection)});
  18179. //>>excludeEnd("ctx");
  18180. },
  18181. //>>excludeStart("ide", pragmas.excludeIdeData);
  18182. args: [],
  18183. source: "stream\x0a\x09^ self newStream",
  18184. referencedClasses: [],
  18185. //>>excludeEnd("ide");
  18186. messageSends: ["newStream"]
  18187. }),
  18188. $globals.SequenceableCollection);
  18189. $core.addMethod(
  18190. $core.method({
  18191. selector: "streamClass",
  18192. protocol: 'streaming',
  18193. fn: function (){
  18194. var self=this;
  18195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18196. return $core.withContext(function($ctx1) {
  18197. //>>excludeEnd("ctx");
  18198. var $1;
  18199. $1=$recv(self._class())._streamClass();
  18200. return $1;
  18201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18202. }, function($ctx1) {$ctx1.fill(self,"streamClass",{},$globals.SequenceableCollection)});
  18203. //>>excludeEnd("ctx");
  18204. },
  18205. //>>excludeStart("ide", pragmas.excludeIdeData);
  18206. args: [],
  18207. source: "streamClass\x0a\x09^ self class streamClass",
  18208. referencedClasses: [],
  18209. //>>excludeEnd("ide");
  18210. messageSends: ["streamClass", "class"]
  18211. }),
  18212. $globals.SequenceableCollection);
  18213. $core.addMethod(
  18214. $core.method({
  18215. selector: "third",
  18216. protocol: 'accessing',
  18217. fn: function (){
  18218. var self=this;
  18219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18220. return $core.withContext(function($ctx1) {
  18221. //>>excludeEnd("ctx");
  18222. var $1;
  18223. $1=self._at_((3));
  18224. return $1;
  18225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18226. }, function($ctx1) {$ctx1.fill(self,"third",{},$globals.SequenceableCollection)});
  18227. //>>excludeEnd("ctx");
  18228. },
  18229. //>>excludeStart("ide", pragmas.excludeIdeData);
  18230. args: [],
  18231. source: "third\x0a\x09^ self at: 3",
  18232. referencedClasses: [],
  18233. //>>excludeEnd("ide");
  18234. messageSends: ["at:"]
  18235. }),
  18236. $globals.SequenceableCollection);
  18237. $core.addMethod(
  18238. $core.method({
  18239. selector: "with:do:",
  18240. protocol: 'enumerating',
  18241. fn: function (anotherCollection,aBlock){
  18242. var self=this;
  18243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18244. return $core.withContext(function($ctx1) {
  18245. //>>excludeEnd("ctx");
  18246. self = self._numericallyIndexable();
  18247. anotherCollection = anotherCollection._numericallyIndexable();
  18248. for(var i=0; i<self.length; i++) {
  18249. aBlock._value_value_(self[i], anotherCollection[i]);
  18250. }
  18251. ;
  18252. return self;
  18253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18254. }, function($ctx1) {$ctx1.fill(self,"with:do:",{anotherCollection:anotherCollection,aBlock:aBlock},$globals.SequenceableCollection)});
  18255. //>>excludeEnd("ctx");
  18256. },
  18257. //>>excludeStart("ide", pragmas.excludeIdeData);
  18258. args: ["anotherCollection", "aBlock"],
  18259. 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>",
  18260. referencedClasses: [],
  18261. //>>excludeEnd("ide");
  18262. messageSends: []
  18263. }),
  18264. $globals.SequenceableCollection);
  18265. $core.addMethod(
  18266. $core.method({
  18267. selector: "withIndexDo:",
  18268. protocol: 'enumerating',
  18269. fn: function (aBlock){
  18270. var self=this;
  18271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18272. return $core.withContext(function($ctx1) {
  18273. //>>excludeEnd("ctx");
  18274. self = self._numericallyIndexable();
  18275. for(var i=0; i < self.length; i++) {
  18276. aBlock._value_value_(self[i], i+1);
  18277. }
  18278. ;
  18279. return self;
  18280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18281. }, function($ctx1) {$ctx1.fill(self,"withIndexDo:",{aBlock:aBlock},$globals.SequenceableCollection)});
  18282. //>>excludeEnd("ctx");
  18283. },
  18284. //>>excludeStart("ide", pragmas.excludeIdeData);
  18285. args: ["aBlock"],
  18286. 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>",
  18287. referencedClasses: [],
  18288. //>>excludeEnd("ide");
  18289. messageSends: []
  18290. }),
  18291. $globals.SequenceableCollection);
  18292. $core.addMethod(
  18293. $core.method({
  18294. selector: "writeStream",
  18295. protocol: 'streaming',
  18296. fn: function (){
  18297. var self=this;
  18298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18299. return $core.withContext(function($ctx1) {
  18300. //>>excludeEnd("ctx");
  18301. var $1;
  18302. $1=self._stream();
  18303. return $1;
  18304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18305. }, function($ctx1) {$ctx1.fill(self,"writeStream",{},$globals.SequenceableCollection)});
  18306. //>>excludeEnd("ctx");
  18307. },
  18308. //>>excludeStart("ide", pragmas.excludeIdeData);
  18309. args: [],
  18310. source: "writeStream\x0a\x09\x22For Pharo compatibility\x22\x0a\x09\x0a\x09^ self stream",
  18311. referencedClasses: [],
  18312. //>>excludeEnd("ide");
  18313. messageSends: ["stream"]
  18314. }),
  18315. $globals.SequenceableCollection);
  18316. $core.addMethod(
  18317. $core.method({
  18318. selector: "streamClass",
  18319. protocol: 'accessing',
  18320. fn: function (){
  18321. var self=this;
  18322. function $Stream(){return $globals.Stream||(typeof Stream=="undefined"?nil:Stream)}
  18323. return $Stream();
  18324. },
  18325. //>>excludeStart("ide", pragmas.excludeIdeData);
  18326. args: [],
  18327. source: "streamClass\x0a\x09\x09^ Stream",
  18328. referencedClasses: ["Stream"],
  18329. //>>excludeEnd("ide");
  18330. messageSends: []
  18331. }),
  18332. $globals.SequenceableCollection.klass);
  18333. $core.addMethod(
  18334. $core.method({
  18335. selector: "streamContents:",
  18336. protocol: 'streaming',
  18337. fn: function (aBlock){
  18338. var self=this;
  18339. var stream;
  18340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18341. return $core.withContext(function($ctx1) {
  18342. //>>excludeEnd("ctx");
  18343. var $1;
  18344. stream=$recv(self._streamClass())._on_(self._new());
  18345. $recv(aBlock)._value_(stream);
  18346. $1=$recv(stream)._contents();
  18347. return $1;
  18348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18349. }, function($ctx1) {$ctx1.fill(self,"streamContents:",{aBlock:aBlock,stream:stream},$globals.SequenceableCollection.klass)});
  18350. //>>excludeEnd("ctx");
  18351. },
  18352. //>>excludeStart("ide", pragmas.excludeIdeData);
  18353. args: ["aBlock"],
  18354. source: "streamContents: aBlock\x0a\x09| stream |\x0a\x09stream := (self streamClass on: self new).\x0a\x09aBlock value: stream.\x0a\x09^ stream contents",
  18355. referencedClasses: [],
  18356. //>>excludeEnd("ide");
  18357. messageSends: ["on:", "streamClass", "new", "value:", "contents"]
  18358. }),
  18359. $globals.SequenceableCollection.klass);
  18360. $core.addClass('Array', $globals.SequenceableCollection, [], 'Kernel-Collections');
  18361. //>>excludeStart("ide", pragmas.excludeIdeData);
  18362. $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`.";
  18363. //>>excludeEnd("ide");
  18364. $core.addMethod(
  18365. $core.method({
  18366. selector: "add:",
  18367. protocol: 'adding/removing',
  18368. fn: function (anObject){
  18369. var self=this;
  18370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18371. return $core.withContext(function($ctx1) {
  18372. //>>excludeEnd("ctx");
  18373. self.push(anObject); return anObject;;
  18374. return self;
  18375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18376. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject},$globals.Array)});
  18377. //>>excludeEnd("ctx");
  18378. },
  18379. //>>excludeStart("ide", pragmas.excludeIdeData);
  18380. args: ["anObject"],
  18381. source: "add: anObject\x0a\x09<self.push(anObject); return anObject;>",
  18382. referencedClasses: [],
  18383. //>>excludeEnd("ide");
  18384. messageSends: []
  18385. }),
  18386. $globals.Array);
  18387. $core.addMethod(
  18388. $core.method({
  18389. selector: "addFirst:",
  18390. protocol: 'adding/removing',
  18391. fn: function (anObject){
  18392. var self=this;
  18393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18394. return $core.withContext(function($ctx1) {
  18395. //>>excludeEnd("ctx");
  18396. self.unshift(anObject); return anObject;;
  18397. return self;
  18398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18399. }, function($ctx1) {$ctx1.fill(self,"addFirst:",{anObject:anObject},$globals.Array)});
  18400. //>>excludeEnd("ctx");
  18401. },
  18402. //>>excludeStart("ide", pragmas.excludeIdeData);
  18403. args: ["anObject"],
  18404. source: "addFirst: anObject\x0a\x09<self.unshift(anObject); return anObject;>",
  18405. referencedClasses: [],
  18406. //>>excludeEnd("ide");
  18407. messageSends: []
  18408. }),
  18409. $globals.Array);
  18410. $core.addMethod(
  18411. $core.method({
  18412. selector: "asJavascript",
  18413. protocol: 'converting',
  18414. fn: function (){
  18415. var self=this;
  18416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18417. return $core.withContext(function($ctx1) {
  18418. //>>excludeEnd("ctx");
  18419. var $1;
  18420. $1=$recv("[".__comma($recv(self._collect_((function(each){
  18421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18422. return $core.withContext(function($ctx2) {
  18423. //>>excludeEnd("ctx");
  18424. return $recv(each)._asJavascript();
  18425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18426. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  18427. //>>excludeEnd("ctx");
  18428. })))._join_(", "))).__comma("]");
  18429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18430. $ctx1.sendIdx[","]=1;
  18431. //>>excludeEnd("ctx");
  18432. return $1;
  18433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18434. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Array)});
  18435. //>>excludeEnd("ctx");
  18436. },
  18437. //>>excludeStart("ide", pragmas.excludeIdeData);
  18438. args: [],
  18439. source: "asJavascript\x0a\x09^ '[', ((self collect: [:each | each asJavascript ]) join: ', '), ']'",
  18440. referencedClasses: [],
  18441. //>>excludeEnd("ide");
  18442. messageSends: [",", "join:", "collect:", "asJavascript"]
  18443. }),
  18444. $globals.Array);
  18445. $core.addMethod(
  18446. $core.method({
  18447. selector: "at:ifAbsent:",
  18448. protocol: 'accessing',
  18449. fn: function (anIndex,aBlock){
  18450. var self=this;
  18451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18452. return $core.withContext(function($ctx1) {
  18453. //>>excludeEnd("ctx");
  18454. return anIndex >= 1 && anIndex <= self.length
  18455. ? self[anIndex - 1]
  18456. : aBlock._value()
  18457. ;
  18458. return self;
  18459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18460. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{anIndex:anIndex,aBlock:aBlock},$globals.Array)});
  18461. //>>excludeEnd("ctx");
  18462. },
  18463. //>>excludeStart("ide", pragmas.excludeIdeData);
  18464. args: ["anIndex", "aBlock"],
  18465. 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>",
  18466. referencedClasses: [],
  18467. //>>excludeEnd("ide");
  18468. messageSends: []
  18469. }),
  18470. $globals.Array);
  18471. $core.addMethod(
  18472. $core.method({
  18473. selector: "at:ifPresent:ifAbsent:",
  18474. protocol: 'accessing',
  18475. fn: function (anIndex,aBlock,anotherBlock){
  18476. var self=this;
  18477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18478. return $core.withContext(function($ctx1) {
  18479. //>>excludeEnd("ctx");
  18480. return anIndex >= 1 && anIndex <= self.length
  18481. ? aBlock._value_(self[anIndex - 1])
  18482. : anotherBlock._value()
  18483. ;
  18484. return self;
  18485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18486. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{anIndex:anIndex,aBlock:aBlock,anotherBlock:anotherBlock},$globals.Array)});
  18487. //>>excludeEnd("ctx");
  18488. },
  18489. //>>excludeStart("ide", pragmas.excludeIdeData);
  18490. args: ["anIndex", "aBlock", "anotherBlock"],
  18491. 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>",
  18492. referencedClasses: [],
  18493. //>>excludeEnd("ide");
  18494. messageSends: []
  18495. }),
  18496. $globals.Array);
  18497. $core.addMethod(
  18498. $core.method({
  18499. selector: "at:put:",
  18500. protocol: 'accessing',
  18501. fn: function (anIndex,anObject){
  18502. var self=this;
  18503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18504. return $core.withContext(function($ctx1) {
  18505. //>>excludeEnd("ctx");
  18506. return self[anIndex - 1] = anObject;
  18507. return self;
  18508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18509. }, function($ctx1) {$ctx1.fill(self,"at:put:",{anIndex:anIndex,anObject:anObject},$globals.Array)});
  18510. //>>excludeEnd("ctx");
  18511. },
  18512. //>>excludeStart("ide", pragmas.excludeIdeData);
  18513. args: ["anIndex", "anObject"],
  18514. source: "at: anIndex put: anObject\x0a\x09<return self[anIndex - 1] = anObject>",
  18515. referencedClasses: [],
  18516. //>>excludeEnd("ide");
  18517. messageSends: []
  18518. }),
  18519. $globals.Array);
  18520. $core.addMethod(
  18521. $core.method({
  18522. selector: "collect:",
  18523. protocol: 'enumerating',
  18524. fn: function (aBlock){
  18525. var self=this;
  18526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18527. return $core.withContext(function($ctx1) {
  18528. //>>excludeEnd("ctx");
  18529. return self.map(function(each) {return aBlock._value_(each)});
  18530. return self;
  18531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18532. }, function($ctx1) {$ctx1.fill(self,"collect:",{aBlock:aBlock},$globals.Array)});
  18533. //>>excludeEnd("ctx");
  18534. },
  18535. //>>excludeStart("ide", pragmas.excludeIdeData);
  18536. args: ["aBlock"],
  18537. source: "collect: aBlock\x0a\x09\x22Optimized version\x22\x0a\x09\x0a\x09<return self.map(function(each) {return aBlock._value_(each)})>",
  18538. referencedClasses: [],
  18539. //>>excludeEnd("ide");
  18540. messageSends: []
  18541. }),
  18542. $globals.Array);
  18543. $core.addMethod(
  18544. $core.method({
  18545. selector: "join:",
  18546. protocol: 'enumerating',
  18547. fn: function (aString){
  18548. var self=this;
  18549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18550. return $core.withContext(function($ctx1) {
  18551. //>>excludeEnd("ctx");
  18552. return self.join(aString);
  18553. return self;
  18554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18555. }, function($ctx1) {$ctx1.fill(self,"join:",{aString:aString},$globals.Array)});
  18556. //>>excludeEnd("ctx");
  18557. },
  18558. //>>excludeStart("ide", pragmas.excludeIdeData);
  18559. args: ["aString"],
  18560. source: "join: aString\x0a\x09<return self.join(aString)>",
  18561. referencedClasses: [],
  18562. //>>excludeEnd("ide");
  18563. messageSends: []
  18564. }),
  18565. $globals.Array);
  18566. $core.addMethod(
  18567. $core.method({
  18568. selector: "numericallyIndexable",
  18569. protocol: 'private',
  18570. fn: function (){
  18571. var self=this;
  18572. return self;
  18573. },
  18574. //>>excludeStart("ide", pragmas.excludeIdeData);
  18575. args: [],
  18576. source: "numericallyIndexable\x0a\x09^ self",
  18577. referencedClasses: [],
  18578. //>>excludeEnd("ide");
  18579. messageSends: []
  18580. }),
  18581. $globals.Array);
  18582. $core.addMethod(
  18583. $core.method({
  18584. selector: "printOn:",
  18585. protocol: 'printing',
  18586. fn: function (aStream){
  18587. var self=this;
  18588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18589. return $core.withContext(function($ctx1) {
  18590. //>>excludeEnd("ctx");
  18591. (
  18592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18593. $ctx1.supercall = true,
  18594. //>>excludeEnd("ctx");
  18595. $globals.Array.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  18596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18597. $ctx1.supercall = false;
  18598. //>>excludeEnd("ctx");;
  18599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18600. $ctx1.sendIdx["printOn:"]=1;
  18601. //>>excludeEnd("ctx");
  18602. $recv(aStream)._nextPutAll_(" (");
  18603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18604. $ctx1.sendIdx["nextPutAll:"]=1;
  18605. //>>excludeEnd("ctx");
  18606. self._do_separatedBy_((function(each){
  18607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18608. return $core.withContext(function($ctx2) {
  18609. //>>excludeEnd("ctx");
  18610. return $recv(each)._printOn_(aStream);
  18611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18612. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  18613. //>>excludeEnd("ctx");
  18614. }),(function(){
  18615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18616. return $core.withContext(function($ctx2) {
  18617. //>>excludeEnd("ctx");
  18618. return $recv(aStream)._nextPutAll_(" ");
  18619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18620. $ctx2.sendIdx["nextPutAll:"]=2;
  18621. //>>excludeEnd("ctx");
  18622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18623. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  18624. //>>excludeEnd("ctx");
  18625. }));
  18626. $recv(aStream)._nextPutAll_(")");
  18627. return self;
  18628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18629. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Array)});
  18630. //>>excludeEnd("ctx");
  18631. },
  18632. //>>excludeStart("ide", pragmas.excludeIdeData);
  18633. args: ["aStream"],
  18634. 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: ')'",
  18635. referencedClasses: [],
  18636. //>>excludeEnd("ide");
  18637. messageSends: ["printOn:", "nextPutAll:", "do:separatedBy:"]
  18638. }),
  18639. $globals.Array);
  18640. $core.addMethod(
  18641. $core.method({
  18642. selector: "remove:ifAbsent:",
  18643. protocol: 'adding/removing',
  18644. fn: function (anObject,aBlock){
  18645. var self=this;
  18646. var index;
  18647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18648. return $core.withContext(function($ctx1) {
  18649. //>>excludeEnd("ctx");
  18650. var $2,$1;
  18651. index=self._indexOf_ifAbsent_(anObject,(function(){
  18652. return (0);
  18653. }));
  18654. $2=$recv(index).__eq((0));
  18655. if($core.assert($2)){
  18656. $1=$recv(aBlock)._value();
  18657. } else {
  18658. self._removeIndex_(index);
  18659. $1=anObject;
  18660. };
  18661. return $1;
  18662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18663. }, function($ctx1) {$ctx1.fill(self,"remove:ifAbsent:",{anObject:anObject,aBlock:aBlock,index:index},$globals.Array)});
  18664. //>>excludeEnd("ctx");
  18665. },
  18666. //>>excludeStart("ide", pragmas.excludeIdeData);
  18667. args: ["anObject", "aBlock"],
  18668. 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 ]",
  18669. referencedClasses: [],
  18670. //>>excludeEnd("ide");
  18671. messageSends: ["indexOf:ifAbsent:", "ifFalse:ifTrue:", "=", "removeIndex:", "value"]
  18672. }),
  18673. $globals.Array);
  18674. $core.addMethod(
  18675. $core.method({
  18676. selector: "removeAll",
  18677. protocol: 'adding/removing',
  18678. fn: function (){
  18679. var self=this;
  18680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18681. return $core.withContext(function($ctx1) {
  18682. //>>excludeEnd("ctx");
  18683. self.length = 0;
  18684. return self;
  18685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18686. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.Array)});
  18687. //>>excludeEnd("ctx");
  18688. },
  18689. //>>excludeStart("ide", pragmas.excludeIdeData);
  18690. args: [],
  18691. source: "removeAll\x0a\x09<self.length = 0>",
  18692. referencedClasses: [],
  18693. //>>excludeEnd("ide");
  18694. messageSends: []
  18695. }),
  18696. $globals.Array);
  18697. $core.addMethod(
  18698. $core.method({
  18699. selector: "removeFrom:to:",
  18700. protocol: 'adding/removing',
  18701. fn: function (aNumber,anotherNumber){
  18702. var self=this;
  18703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18704. return $core.withContext(function($ctx1) {
  18705. //>>excludeEnd("ctx");
  18706. self.splice(aNumber -1, anotherNumber - aNumber + 1);
  18707. return self;
  18708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18709. }, function($ctx1) {$ctx1.fill(self,"removeFrom:to:",{aNumber:aNumber,anotherNumber:anotherNumber},$globals.Array)});
  18710. //>>excludeEnd("ctx");
  18711. },
  18712. //>>excludeStart("ide", pragmas.excludeIdeData);
  18713. args: ["aNumber", "anotherNumber"],
  18714. source: "removeFrom: aNumber to: anotherNumber\x0a\x09<self.splice(aNumber -1, anotherNumber - aNumber + 1)>",
  18715. referencedClasses: [],
  18716. //>>excludeEnd("ide");
  18717. messageSends: []
  18718. }),
  18719. $globals.Array);
  18720. $core.addMethod(
  18721. $core.method({
  18722. selector: "removeIndex:",
  18723. protocol: 'adding/removing',
  18724. fn: function (anInteger){
  18725. var self=this;
  18726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18727. return $core.withContext(function($ctx1) {
  18728. //>>excludeEnd("ctx");
  18729. self.splice(anInteger - 1, 1);
  18730. return self;
  18731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18732. }, function($ctx1) {$ctx1.fill(self,"removeIndex:",{anInteger:anInteger},$globals.Array)});
  18733. //>>excludeEnd("ctx");
  18734. },
  18735. //>>excludeStart("ide", pragmas.excludeIdeData);
  18736. args: ["anInteger"],
  18737. source: "removeIndex: anInteger\x0a\x09<self.splice(anInteger - 1, 1)>",
  18738. referencedClasses: [],
  18739. //>>excludeEnd("ide");
  18740. messageSends: []
  18741. }),
  18742. $globals.Array);
  18743. $core.addMethod(
  18744. $core.method({
  18745. selector: "removeLast",
  18746. protocol: 'adding/removing',
  18747. fn: function (){
  18748. var self=this;
  18749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18750. return $core.withContext(function($ctx1) {
  18751. //>>excludeEnd("ctx");
  18752. return self.pop();;
  18753. return self;
  18754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18755. }, function($ctx1) {$ctx1.fill(self,"removeLast",{},$globals.Array)});
  18756. //>>excludeEnd("ctx");
  18757. },
  18758. //>>excludeStart("ide", pragmas.excludeIdeData);
  18759. args: [],
  18760. source: "removeLast\x0a\x09<return self.pop();>",
  18761. referencedClasses: [],
  18762. //>>excludeEnd("ide");
  18763. messageSends: []
  18764. }),
  18765. $globals.Array);
  18766. $core.addMethod(
  18767. $core.method({
  18768. selector: "reversed",
  18769. protocol: 'converting',
  18770. fn: function (){
  18771. var self=this;
  18772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18773. return $core.withContext(function($ctx1) {
  18774. //>>excludeEnd("ctx");
  18775. return self._copy().reverse();
  18776. return self;
  18777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18778. }, function($ctx1) {$ctx1.fill(self,"reversed",{},$globals.Array)});
  18779. //>>excludeEnd("ctx");
  18780. },
  18781. //>>excludeStart("ide", pragmas.excludeIdeData);
  18782. args: [],
  18783. source: "reversed\x0a\x09<return self._copy().reverse()>",
  18784. referencedClasses: [],
  18785. //>>excludeEnd("ide");
  18786. messageSends: []
  18787. }),
  18788. $globals.Array);
  18789. $core.addMethod(
  18790. $core.method({
  18791. selector: "select:",
  18792. protocol: 'enumerating',
  18793. fn: function (aBlock){
  18794. var self=this;
  18795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18796. return $core.withContext(function($ctx1) {
  18797. //>>excludeEnd("ctx");
  18798. var result = self.klass._new();
  18799. for(var i=0; i<self.length; i++) {
  18800. if(aBlock._value_(self[i])) {
  18801. result.push(self[i]);
  18802. }
  18803. }
  18804. return result;
  18805. ;
  18806. return self;
  18807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18808. }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock},$globals.Array)});
  18809. //>>excludeEnd("ctx");
  18810. },
  18811. //>>excludeStart("ide", pragmas.excludeIdeData);
  18812. args: ["aBlock"],
  18813. 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>",
  18814. referencedClasses: [],
  18815. //>>excludeEnd("ide");
  18816. messageSends: []
  18817. }),
  18818. $globals.Array);
  18819. $core.addMethod(
  18820. $core.method({
  18821. selector: "size",
  18822. protocol: 'accessing',
  18823. fn: function (){
  18824. var self=this;
  18825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18826. return $core.withContext(function($ctx1) {
  18827. //>>excludeEnd("ctx");
  18828. return self.length;
  18829. return self;
  18830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18831. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Array)});
  18832. //>>excludeEnd("ctx");
  18833. },
  18834. //>>excludeStart("ide", pragmas.excludeIdeData);
  18835. args: [],
  18836. source: "size\x0a\x09<return self.length>",
  18837. referencedClasses: [],
  18838. //>>excludeEnd("ide");
  18839. messageSends: []
  18840. }),
  18841. $globals.Array);
  18842. $core.addMethod(
  18843. $core.method({
  18844. selector: "sort",
  18845. protocol: 'enumerating',
  18846. fn: function (){
  18847. var self=this;
  18848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18849. return $core.withContext(function($ctx1) {
  18850. //>>excludeEnd("ctx");
  18851. var $1;
  18852. $1=self._sort_((function(a,b){
  18853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18854. return $core.withContext(function($ctx2) {
  18855. //>>excludeEnd("ctx");
  18856. return $recv(a).__lt(b);
  18857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18858. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  18859. //>>excludeEnd("ctx");
  18860. }));
  18861. return $1;
  18862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18863. }, function($ctx1) {$ctx1.fill(self,"sort",{},$globals.Array)});
  18864. //>>excludeEnd("ctx");
  18865. },
  18866. //>>excludeStart("ide", pragmas.excludeIdeData);
  18867. args: [],
  18868. source: "sort\x0a\x09^ self sort: [ :a :b | a < b ]",
  18869. referencedClasses: [],
  18870. //>>excludeEnd("ide");
  18871. messageSends: ["sort:", "<"]
  18872. }),
  18873. $globals.Array);
  18874. $core.addMethod(
  18875. $core.method({
  18876. selector: "sort:",
  18877. protocol: 'enumerating',
  18878. fn: function (aBlock){
  18879. var self=this;
  18880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18881. return $core.withContext(function($ctx1) {
  18882. //>>excludeEnd("ctx");
  18883. return self.sort(function(a, b) {
  18884. if(aBlock._value_value_(a,b)) {return -1} else {return 1}
  18885. })
  18886. ;
  18887. return self;
  18888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18889. }, function($ctx1) {$ctx1.fill(self,"sort:",{aBlock:aBlock},$globals.Array)});
  18890. //>>excludeEnd("ctx");
  18891. },
  18892. //>>excludeStart("ide", pragmas.excludeIdeData);
  18893. args: ["aBlock"],
  18894. 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>",
  18895. referencedClasses: [],
  18896. //>>excludeEnd("ide");
  18897. messageSends: []
  18898. }),
  18899. $globals.Array);
  18900. $core.addMethod(
  18901. $core.method({
  18902. selector: "sorted",
  18903. protocol: 'enumerating',
  18904. fn: function (){
  18905. var self=this;
  18906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18907. return $core.withContext(function($ctx1) {
  18908. //>>excludeEnd("ctx");
  18909. var $1;
  18910. $1=$recv(self._copy())._sort();
  18911. return $1;
  18912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18913. }, function($ctx1) {$ctx1.fill(self,"sorted",{},$globals.Array)});
  18914. //>>excludeEnd("ctx");
  18915. },
  18916. //>>excludeStart("ide", pragmas.excludeIdeData);
  18917. args: [],
  18918. source: "sorted\x0a\x09^ self copy sort",
  18919. referencedClasses: [],
  18920. //>>excludeEnd("ide");
  18921. messageSends: ["sort", "copy"]
  18922. }),
  18923. $globals.Array);
  18924. $core.addMethod(
  18925. $core.method({
  18926. selector: "sorted:",
  18927. protocol: 'enumerating',
  18928. fn: function (aBlock){
  18929. var self=this;
  18930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18931. return $core.withContext(function($ctx1) {
  18932. //>>excludeEnd("ctx");
  18933. var $1;
  18934. $1=$recv(self._copy())._sort_(aBlock);
  18935. return $1;
  18936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18937. }, function($ctx1) {$ctx1.fill(self,"sorted:",{aBlock:aBlock},$globals.Array)});
  18938. //>>excludeEnd("ctx");
  18939. },
  18940. //>>excludeStart("ide", pragmas.excludeIdeData);
  18941. args: ["aBlock"],
  18942. source: "sorted: aBlock\x0a\x09^ self copy sort: aBlock",
  18943. referencedClasses: [],
  18944. //>>excludeEnd("ide");
  18945. messageSends: ["sort:", "copy"]
  18946. }),
  18947. $globals.Array);
  18948. $core.addMethod(
  18949. $core.method({
  18950. selector: "new:",
  18951. protocol: 'instance creation',
  18952. fn: function (anInteger){
  18953. var self=this;
  18954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18955. return $core.withContext(function($ctx1) {
  18956. //>>excludeEnd("ctx");
  18957. return new Array(anInteger);
  18958. return self;
  18959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18960. }, function($ctx1) {$ctx1.fill(self,"new:",{anInteger:anInteger},$globals.Array.klass)});
  18961. //>>excludeEnd("ctx");
  18962. },
  18963. //>>excludeStart("ide", pragmas.excludeIdeData);
  18964. args: ["anInteger"],
  18965. source: "new: anInteger\x0a\x09<return new Array(anInteger)>",
  18966. referencedClasses: [],
  18967. //>>excludeEnd("ide");
  18968. messageSends: []
  18969. }),
  18970. $globals.Array.klass);
  18971. $core.addMethod(
  18972. $core.method({
  18973. selector: "with:",
  18974. protocol: 'instance creation',
  18975. fn: function (anObject){
  18976. var self=this;
  18977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18978. return $core.withContext(function($ctx1) {
  18979. //>>excludeEnd("ctx");
  18980. var $2,$3,$1;
  18981. $2=self._new_((1));
  18982. $recv($2)._at_put_((1),anObject);
  18983. $3=$recv($2)._yourself();
  18984. $1=$3;
  18985. return $1;
  18986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18987. }, function($ctx1) {$ctx1.fill(self,"with:",{anObject:anObject},$globals.Array.klass)});
  18988. //>>excludeEnd("ctx");
  18989. },
  18990. //>>excludeStart("ide", pragmas.excludeIdeData);
  18991. args: ["anObject"],
  18992. source: "with: anObject\x0a\x09\x09^ (self new: 1)\x0a\x09\x09at: 1 put: anObject;\x0a\x09\x09yourself",
  18993. referencedClasses: [],
  18994. //>>excludeEnd("ide");
  18995. messageSends: ["at:put:", "new:", "yourself"]
  18996. }),
  18997. $globals.Array.klass);
  18998. $core.addMethod(
  18999. $core.method({
  19000. selector: "with:with:",
  19001. protocol: 'instance creation',
  19002. fn: function (anObject,anObject2){
  19003. var self=this;
  19004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19005. return $core.withContext(function($ctx1) {
  19006. //>>excludeEnd("ctx");
  19007. var $2,$3,$1;
  19008. $2=self._new_((2));
  19009. $recv($2)._at_put_((1),anObject);
  19010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19011. $ctx1.sendIdx["at:put:"]=1;
  19012. //>>excludeEnd("ctx");
  19013. $recv($2)._at_put_((2),anObject2);
  19014. $3=$recv($2)._yourself();
  19015. $1=$3;
  19016. return $1;
  19017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19018. }, function($ctx1) {$ctx1.fill(self,"with:with:",{anObject:anObject,anObject2:anObject2},$globals.Array.klass)});
  19019. //>>excludeEnd("ctx");
  19020. },
  19021. //>>excludeStart("ide", pragmas.excludeIdeData);
  19022. args: ["anObject", "anObject2"],
  19023. 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",
  19024. referencedClasses: [],
  19025. //>>excludeEnd("ide");
  19026. messageSends: ["at:put:", "new:", "yourself"]
  19027. }),
  19028. $globals.Array.klass);
  19029. $core.addMethod(
  19030. $core.method({
  19031. selector: "with:with:with:",
  19032. protocol: 'instance creation',
  19033. fn: function (anObject,anObject2,anObject3){
  19034. var self=this;
  19035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19036. return $core.withContext(function($ctx1) {
  19037. //>>excludeEnd("ctx");
  19038. var $2,$3,$1;
  19039. $2=self._new_((3));
  19040. $recv($2)._at_put_((1),anObject);
  19041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19042. $ctx1.sendIdx["at:put:"]=1;
  19043. //>>excludeEnd("ctx");
  19044. $recv($2)._at_put_((2),anObject2);
  19045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19046. $ctx1.sendIdx["at:put:"]=2;
  19047. //>>excludeEnd("ctx");
  19048. $recv($2)._at_put_((3),anObject3);
  19049. $3=$recv($2)._yourself();
  19050. $1=$3;
  19051. return $1;
  19052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19053. }, function($ctx1) {$ctx1.fill(self,"with:with:with:",{anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.Array.klass)});
  19054. //>>excludeEnd("ctx");
  19055. },
  19056. //>>excludeStart("ide", pragmas.excludeIdeData);
  19057. args: ["anObject", "anObject2", "anObject3"],
  19058. 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",
  19059. referencedClasses: [],
  19060. //>>excludeEnd("ide");
  19061. messageSends: ["at:put:", "new:", "yourself"]
  19062. }),
  19063. $globals.Array.klass);
  19064. $core.addMethod(
  19065. $core.method({
  19066. selector: "withAll:",
  19067. protocol: 'instance creation',
  19068. fn: function (aCollection){
  19069. var self=this;
  19070. var instance,index;
  19071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19072. return $core.withContext(function($ctx1) {
  19073. //>>excludeEnd("ctx");
  19074. var $1;
  19075. index=(1);
  19076. instance=self._new_($recv(aCollection)._size());
  19077. $recv(aCollection)._do_((function(each){
  19078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19079. return $core.withContext(function($ctx2) {
  19080. //>>excludeEnd("ctx");
  19081. $recv(instance)._at_put_(index,each);
  19082. index=$recv(index).__plus((1));
  19083. return index;
  19084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19085. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  19086. //>>excludeEnd("ctx");
  19087. }));
  19088. $1=instance;
  19089. return $1;
  19090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19091. }, function($ctx1) {$ctx1.fill(self,"withAll:",{aCollection:aCollection,instance:instance,index:index},$globals.Array.klass)});
  19092. //>>excludeEnd("ctx");
  19093. },
  19094. //>>excludeStart("ide", pragmas.excludeIdeData);
  19095. args: ["aCollection"],
  19096. 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",
  19097. referencedClasses: [],
  19098. //>>excludeEnd("ide");
  19099. messageSends: ["new:", "size", "do:", "at:put:", "+"]
  19100. }),
  19101. $globals.Array.klass);
  19102. $core.addClass('CharacterArray', $globals.SequenceableCollection, [], 'Kernel-Collections');
  19103. //>>excludeStart("ide", pragmas.excludeIdeData);
  19104. $globals.CharacterArray.comment="I am the abstract superclass of string-like collections.";
  19105. //>>excludeEnd("ide");
  19106. $core.addMethod(
  19107. $core.method({
  19108. selector: ",",
  19109. protocol: 'copying',
  19110. fn: function (aString){
  19111. var self=this;
  19112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19113. return $core.withContext(function($ctx1) {
  19114. //>>excludeEnd("ctx");
  19115. var $2,$1;
  19116. $2=self._asString();
  19117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19118. $ctx1.sendIdx["asString"]=1;
  19119. //>>excludeEnd("ctx");
  19120. $1=$recv($2).__comma($recv(aString)._asString());
  19121. return $1;
  19122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19123. }, function($ctx1) {$ctx1.fill(self,",",{aString:aString},$globals.CharacterArray)});
  19124. //>>excludeEnd("ctx");
  19125. },
  19126. //>>excludeStart("ide", pragmas.excludeIdeData);
  19127. args: ["aString"],
  19128. source: ", aString\x0a\x09^ self asString, aString asString",
  19129. referencedClasses: [],
  19130. //>>excludeEnd("ide");
  19131. messageSends: [",", "asString"]
  19132. }),
  19133. $globals.CharacterArray);
  19134. $core.addMethod(
  19135. $core.method({
  19136. selector: "add:",
  19137. protocol: 'adding/removing',
  19138. fn: function (anObject){
  19139. var self=this;
  19140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19141. return $core.withContext(function($ctx1) {
  19142. //>>excludeEnd("ctx");
  19143. self._errorReadOnly();
  19144. return self;
  19145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19146. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject},$globals.CharacterArray)});
  19147. //>>excludeEnd("ctx");
  19148. },
  19149. //>>excludeStart("ide", pragmas.excludeIdeData);
  19150. args: ["anObject"],
  19151. source: "add: anObject\x0a\x09self errorReadOnly",
  19152. referencedClasses: [],
  19153. //>>excludeEnd("ide");
  19154. messageSends: ["errorReadOnly"]
  19155. }),
  19156. $globals.CharacterArray);
  19157. $core.addMethod(
  19158. $core.method({
  19159. selector: "asLowercase",
  19160. protocol: 'converting',
  19161. fn: function (){
  19162. var self=this;
  19163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19164. return $core.withContext(function($ctx1) {
  19165. //>>excludeEnd("ctx");
  19166. var $1;
  19167. $1=$recv(self._class())._fromString_($recv(self._asString())._asLowercase());
  19168. return $1;
  19169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19170. }, function($ctx1) {$ctx1.fill(self,"asLowercase",{},$globals.CharacterArray)});
  19171. //>>excludeEnd("ctx");
  19172. },
  19173. //>>excludeStart("ide", pragmas.excludeIdeData);
  19174. args: [],
  19175. source: "asLowercase\x0a\x09^ self class fromString: self asString asLowercase",
  19176. referencedClasses: [],
  19177. //>>excludeEnd("ide");
  19178. messageSends: ["fromString:", "class", "asLowercase", "asString"]
  19179. }),
  19180. $globals.CharacterArray);
  19181. $core.addMethod(
  19182. $core.method({
  19183. selector: "asNumber",
  19184. protocol: 'converting',
  19185. fn: function (){
  19186. var self=this;
  19187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19188. return $core.withContext(function($ctx1) {
  19189. //>>excludeEnd("ctx");
  19190. var $1;
  19191. $1=$recv(self._asString())._asNumber();
  19192. return $1;
  19193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19194. }, function($ctx1) {$ctx1.fill(self,"asNumber",{},$globals.CharacterArray)});
  19195. //>>excludeEnd("ctx");
  19196. },
  19197. //>>excludeStart("ide", pragmas.excludeIdeData);
  19198. args: [],
  19199. source: "asNumber\x0a\x09^ self asString asNumber",
  19200. referencedClasses: [],
  19201. //>>excludeEnd("ide");
  19202. messageSends: ["asNumber", "asString"]
  19203. }),
  19204. $globals.CharacterArray);
  19205. $core.addMethod(
  19206. $core.method({
  19207. selector: "asString",
  19208. protocol: 'converting',
  19209. fn: function (){
  19210. var self=this;
  19211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19212. return $core.withContext(function($ctx1) {
  19213. //>>excludeEnd("ctx");
  19214. var $1;
  19215. $1=self._subclassResponsibility();
  19216. return $1;
  19217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19218. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.CharacterArray)});
  19219. //>>excludeEnd("ctx");
  19220. },
  19221. //>>excludeStart("ide", pragmas.excludeIdeData);
  19222. args: [],
  19223. source: "asString\x0a\x09^ self subclassResponsibility",
  19224. referencedClasses: [],
  19225. //>>excludeEnd("ide");
  19226. messageSends: ["subclassResponsibility"]
  19227. }),
  19228. $globals.CharacterArray);
  19229. $core.addMethod(
  19230. $core.method({
  19231. selector: "asSymbol",
  19232. protocol: 'converting',
  19233. fn: function (){
  19234. var self=this;
  19235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19236. return $core.withContext(function($ctx1) {
  19237. //>>excludeEnd("ctx");
  19238. var $1;
  19239. $1=self._asString();
  19240. return $1;
  19241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19242. }, function($ctx1) {$ctx1.fill(self,"asSymbol",{},$globals.CharacterArray)});
  19243. //>>excludeEnd("ctx");
  19244. },
  19245. //>>excludeStart("ide", pragmas.excludeIdeData);
  19246. args: [],
  19247. source: "asSymbol\x0a\x09^ self asString",
  19248. referencedClasses: [],
  19249. //>>excludeEnd("ide");
  19250. messageSends: ["asString"]
  19251. }),
  19252. $globals.CharacterArray);
  19253. $core.addMethod(
  19254. $core.method({
  19255. selector: "asUppercase",
  19256. protocol: 'converting',
  19257. fn: function (){
  19258. var self=this;
  19259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19260. return $core.withContext(function($ctx1) {
  19261. //>>excludeEnd("ctx");
  19262. var $1;
  19263. $1=$recv(self._class())._fromString_($recv(self._asString())._asUppercase());
  19264. return $1;
  19265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19266. }, function($ctx1) {$ctx1.fill(self,"asUppercase",{},$globals.CharacterArray)});
  19267. //>>excludeEnd("ctx");
  19268. },
  19269. //>>excludeStart("ide", pragmas.excludeIdeData);
  19270. args: [],
  19271. source: "asUppercase\x0a\x09^ self class fromString: self asString asUppercase",
  19272. referencedClasses: [],
  19273. //>>excludeEnd("ide");
  19274. messageSends: ["fromString:", "class", "asUppercase", "asString"]
  19275. }),
  19276. $globals.CharacterArray);
  19277. $core.addMethod(
  19278. $core.method({
  19279. selector: "at:put:",
  19280. protocol: 'accessing',
  19281. fn: function (anIndex,anObject){
  19282. var self=this;
  19283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19284. return $core.withContext(function($ctx1) {
  19285. //>>excludeEnd("ctx");
  19286. self._errorReadOnly();
  19287. return self;
  19288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19289. }, function($ctx1) {$ctx1.fill(self,"at:put:",{anIndex:anIndex,anObject:anObject},$globals.CharacterArray)});
  19290. //>>excludeEnd("ctx");
  19291. },
  19292. //>>excludeStart("ide", pragmas.excludeIdeData);
  19293. args: ["anIndex", "anObject"],
  19294. source: "at: anIndex put: anObject\x0a\x09self errorReadOnly",
  19295. referencedClasses: [],
  19296. //>>excludeEnd("ide");
  19297. messageSends: ["errorReadOnly"]
  19298. }),
  19299. $globals.CharacterArray);
  19300. $core.addMethod(
  19301. $core.method({
  19302. selector: "errorReadOnly",
  19303. protocol: 'error handling',
  19304. fn: function (){
  19305. var self=this;
  19306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19307. return $core.withContext(function($ctx1) {
  19308. //>>excludeEnd("ctx");
  19309. self._error_("Object is read-only");
  19310. return self;
  19311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19312. }, function($ctx1) {$ctx1.fill(self,"errorReadOnly",{},$globals.CharacterArray)});
  19313. //>>excludeEnd("ctx");
  19314. },
  19315. //>>excludeStart("ide", pragmas.excludeIdeData);
  19316. args: [],
  19317. source: "errorReadOnly\x0a\x09self error: 'Object is read-only'",
  19318. referencedClasses: [],
  19319. //>>excludeEnd("ide");
  19320. messageSends: ["error:"]
  19321. }),
  19322. $globals.CharacterArray);
  19323. $core.addMethod(
  19324. $core.method({
  19325. selector: "printOn:",
  19326. protocol: 'printing',
  19327. fn: function (aStream){
  19328. var self=this;
  19329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19330. return $core.withContext(function($ctx1) {
  19331. //>>excludeEnd("ctx");
  19332. $recv(self._asString())._printOn_(aStream);
  19333. return self;
  19334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19335. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.CharacterArray)});
  19336. //>>excludeEnd("ctx");
  19337. },
  19338. //>>excludeStart("ide", pragmas.excludeIdeData);
  19339. args: ["aStream"],
  19340. source: "printOn: aStream\x0a\x09self asString printOn: aStream",
  19341. referencedClasses: [],
  19342. //>>excludeEnd("ide");
  19343. messageSends: ["printOn:", "asString"]
  19344. }),
  19345. $globals.CharacterArray);
  19346. $core.addMethod(
  19347. $core.method({
  19348. selector: "putOn:",
  19349. protocol: 'streaming',
  19350. fn: function (aStream){
  19351. var self=this;
  19352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19353. return $core.withContext(function($ctx1) {
  19354. //>>excludeEnd("ctx");
  19355. $recv(aStream)._nextPutString_(self);
  19356. return self;
  19357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19358. }, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},$globals.CharacterArray)});
  19359. //>>excludeEnd("ctx");
  19360. },
  19361. //>>excludeStart("ide", pragmas.excludeIdeData);
  19362. args: ["aStream"],
  19363. source: "putOn: aStream\x0a\x09aStream nextPutString: self",
  19364. referencedClasses: [],
  19365. //>>excludeEnd("ide");
  19366. messageSends: ["nextPutString:"]
  19367. }),
  19368. $globals.CharacterArray);
  19369. $core.addMethod(
  19370. $core.method({
  19371. selector: "remove:",
  19372. protocol: 'adding/removing',
  19373. fn: function (anObject){
  19374. var self=this;
  19375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19376. return $core.withContext(function($ctx1) {
  19377. //>>excludeEnd("ctx");
  19378. self._errorReadOnly();
  19379. return self;
  19380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19381. }, function($ctx1) {$ctx1.fill(self,"remove:",{anObject:anObject},$globals.CharacterArray)});
  19382. //>>excludeEnd("ctx");
  19383. },
  19384. //>>excludeStart("ide", pragmas.excludeIdeData);
  19385. args: ["anObject"],
  19386. source: "remove: anObject\x0a\x09self errorReadOnly",
  19387. referencedClasses: [],
  19388. //>>excludeEnd("ide");
  19389. messageSends: ["errorReadOnly"]
  19390. }),
  19391. $globals.CharacterArray);
  19392. $core.addMethod(
  19393. $core.method({
  19394. selector: "fromString:",
  19395. protocol: 'instance creation',
  19396. fn: function (aString){
  19397. var self=this;
  19398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19399. return $core.withContext(function($ctx1) {
  19400. //>>excludeEnd("ctx");
  19401. self._subclassResponsibility();
  19402. return self;
  19403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19404. }, function($ctx1) {$ctx1.fill(self,"fromString:",{aString:aString},$globals.CharacterArray.klass)});
  19405. //>>excludeEnd("ctx");
  19406. },
  19407. //>>excludeStart("ide", pragmas.excludeIdeData);
  19408. args: ["aString"],
  19409. source: "fromString: aString\x0a\x09self subclassResponsibility",
  19410. referencedClasses: [],
  19411. //>>excludeEnd("ide");
  19412. messageSends: ["subclassResponsibility"]
  19413. }),
  19414. $globals.CharacterArray.klass);
  19415. $core.addClass('String', $globals.CharacterArray, [], 'Kernel-Collections');
  19416. //>>excludeStart("ide", pragmas.excludeIdeData);
  19417. $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 >> #,`";
  19418. //>>excludeEnd("ide");
  19419. $core.addMethod(
  19420. $core.method({
  19421. selector: ",",
  19422. protocol: 'copying',
  19423. fn: function (aString){
  19424. var self=this;
  19425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19426. return $core.withContext(function($ctx1) {
  19427. //>>excludeEnd("ctx");
  19428. return String(self) + aString;
  19429. return self;
  19430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19431. }, function($ctx1) {$ctx1.fill(self,",",{aString:aString},$globals.String)});
  19432. //>>excludeEnd("ctx");
  19433. },
  19434. //>>excludeStart("ide", pragmas.excludeIdeData);
  19435. args: ["aString"],
  19436. source: ", aString\x0a\x09<return String(self) + aString>",
  19437. referencedClasses: [],
  19438. //>>excludeEnd("ide");
  19439. messageSends: []
  19440. }),
  19441. $globals.String);
  19442. $core.addMethod(
  19443. $core.method({
  19444. selector: "<",
  19445. protocol: 'comparing',
  19446. fn: function (aString){
  19447. var self=this;
  19448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19449. return $core.withContext(function($ctx1) {
  19450. //>>excludeEnd("ctx");
  19451. return String(self) < aString._asString();
  19452. return self;
  19453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19454. }, function($ctx1) {$ctx1.fill(self,"<",{aString:aString},$globals.String)});
  19455. //>>excludeEnd("ctx");
  19456. },
  19457. //>>excludeStart("ide", pragmas.excludeIdeData);
  19458. args: ["aString"],
  19459. source: "< aString\x0a\x09<return String(self) < aString._asString()>",
  19460. referencedClasses: [],
  19461. //>>excludeEnd("ide");
  19462. messageSends: []
  19463. }),
  19464. $globals.String);
  19465. $core.addMethod(
  19466. $core.method({
  19467. selector: "<=",
  19468. protocol: 'comparing',
  19469. fn: function (aString){
  19470. var self=this;
  19471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19472. return $core.withContext(function($ctx1) {
  19473. //>>excludeEnd("ctx");
  19474. return String(self) <= aString._asString();
  19475. return self;
  19476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19477. }, function($ctx1) {$ctx1.fill(self,"<=",{aString:aString},$globals.String)});
  19478. //>>excludeEnd("ctx");
  19479. },
  19480. //>>excludeStart("ide", pragmas.excludeIdeData);
  19481. args: ["aString"],
  19482. source: "<= aString\x0a\x09<return String(self) <= aString._asString()>",
  19483. referencedClasses: [],
  19484. //>>excludeEnd("ide");
  19485. messageSends: []
  19486. }),
  19487. $globals.String);
  19488. $core.addMethod(
  19489. $core.method({
  19490. selector: "=",
  19491. protocol: 'comparing',
  19492. fn: function (aString){
  19493. var self=this;
  19494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19495. return $core.withContext(function($ctx1) {
  19496. //>>excludeEnd("ctx");
  19497. return aString != null &&
  19498. typeof aString._isString === "function" &&
  19499. aString._isString() &&
  19500. String(self) === String(aString)
  19501. ;
  19502. return self;
  19503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19504. }, function($ctx1) {$ctx1.fill(self,"=",{aString:aString},$globals.String)});
  19505. //>>excludeEnd("ctx");
  19506. },
  19507. //>>excludeStart("ide", pragmas.excludeIdeData);
  19508. args: ["aString"],
  19509. 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>",
  19510. referencedClasses: [],
  19511. //>>excludeEnd("ide");
  19512. messageSends: []
  19513. }),
  19514. $globals.String);
  19515. $core.addMethod(
  19516. $core.method({
  19517. selector: "==",
  19518. protocol: 'comparing',
  19519. fn: function (aString){
  19520. var self=this;
  19521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19522. return $core.withContext(function($ctx1) {
  19523. //>>excludeEnd("ctx");
  19524. var $1;
  19525. $1=self.__eq(aString);
  19526. return $1;
  19527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19528. }, function($ctx1) {$ctx1.fill(self,"==",{aString:aString},$globals.String)});
  19529. //>>excludeEnd("ctx");
  19530. },
  19531. //>>excludeStart("ide", pragmas.excludeIdeData);
  19532. args: ["aString"],
  19533. source: "== aString\x0a\x09^ self = aString",
  19534. referencedClasses: [],
  19535. //>>excludeEnd("ide");
  19536. messageSends: ["="]
  19537. }),
  19538. $globals.String);
  19539. $core.addMethod(
  19540. $core.method({
  19541. selector: ">",
  19542. protocol: 'comparing',
  19543. fn: function (aString){
  19544. var self=this;
  19545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19546. return $core.withContext(function($ctx1) {
  19547. //>>excludeEnd("ctx");
  19548. return String(self) > aString._asString();
  19549. return self;
  19550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19551. }, function($ctx1) {$ctx1.fill(self,">",{aString:aString},$globals.String)});
  19552. //>>excludeEnd("ctx");
  19553. },
  19554. //>>excludeStart("ide", pragmas.excludeIdeData);
  19555. args: ["aString"],
  19556. source: "> aString\x0a\x09<return String(self) >> aString._asString()>",
  19557. referencedClasses: [],
  19558. //>>excludeEnd("ide");
  19559. messageSends: []
  19560. }),
  19561. $globals.String);
  19562. $core.addMethod(
  19563. $core.method({
  19564. selector: ">=",
  19565. protocol: 'comparing',
  19566. fn: function (aString){
  19567. var self=this;
  19568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19569. return $core.withContext(function($ctx1) {
  19570. //>>excludeEnd("ctx");
  19571. return String(self) >= aString._asString();
  19572. return self;
  19573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19574. }, function($ctx1) {$ctx1.fill(self,">=",{aString:aString},$globals.String)});
  19575. //>>excludeEnd("ctx");
  19576. },
  19577. //>>excludeStart("ide", pragmas.excludeIdeData);
  19578. args: ["aString"],
  19579. source: ">= aString\x0a\x09<return String(self) >>= aString._asString()>",
  19580. referencedClasses: [],
  19581. //>>excludeEnd("ide");
  19582. messageSends: []
  19583. }),
  19584. $globals.String);
  19585. $core.addMethod(
  19586. $core.method({
  19587. selector: "asJSON",
  19588. protocol: 'converting',
  19589. fn: function (){
  19590. var self=this;
  19591. return self;
  19592. },
  19593. //>>excludeStart("ide", pragmas.excludeIdeData);
  19594. args: [],
  19595. source: "asJSON\x0a\x09^ self",
  19596. referencedClasses: [],
  19597. //>>excludeEnd("ide");
  19598. messageSends: []
  19599. }),
  19600. $globals.String);
  19601. $core.addMethod(
  19602. $core.method({
  19603. selector: "asJavaScriptMethodName",
  19604. protocol: 'converting',
  19605. fn: function (){
  19606. var self=this;
  19607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19608. return $core.withContext(function($ctx1) {
  19609. //>>excludeEnd("ctx");
  19610. return $core.st2js(self);
  19611. return self;
  19612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19613. }, function($ctx1) {$ctx1.fill(self,"asJavaScriptMethodName",{},$globals.String)});
  19614. //>>excludeEnd("ctx");
  19615. },
  19616. //>>excludeStart("ide", pragmas.excludeIdeData);
  19617. args: [],
  19618. source: "asJavaScriptMethodName\x0a\x09<return $core.st2js(self)>",
  19619. referencedClasses: [],
  19620. //>>excludeEnd("ide");
  19621. messageSends: []
  19622. }),
  19623. $globals.String);
  19624. $core.addMethod(
  19625. $core.method({
  19626. selector: "asJavascript",
  19627. protocol: 'converting',
  19628. fn: function (){
  19629. var self=this;
  19630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19631. return $core.withContext(function($ctx1) {
  19632. //>>excludeEnd("ctx");
  19633. if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1)
  19634. return "\"" + self.replace(/[\x00-\x1f"\\\x7f-\x9f]/g, function(ch){var c=ch.charCodeAt(0);return "\\x"+("0"+c.toString(16)).slice(-2)}) + "\"";
  19635. else
  19636. return "\"" + self + "\"";
  19637. ;
  19638. return self;
  19639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19640. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.String)});
  19641. //>>excludeEnd("ctx");
  19642. },
  19643. //>>excludeStart("ide", pragmas.excludeIdeData);
  19644. args: [],
  19645. 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>",
  19646. referencedClasses: [],
  19647. //>>excludeEnd("ide");
  19648. messageSends: []
  19649. }),
  19650. $globals.String);
  19651. $core.addMethod(
  19652. $core.method({
  19653. selector: "asLowercase",
  19654. protocol: 'converting',
  19655. fn: function (){
  19656. var self=this;
  19657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19658. return $core.withContext(function($ctx1) {
  19659. //>>excludeEnd("ctx");
  19660. return self.toLowerCase();
  19661. return self;
  19662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19663. }, function($ctx1) {$ctx1.fill(self,"asLowercase",{},$globals.String)});
  19664. //>>excludeEnd("ctx");
  19665. },
  19666. //>>excludeStart("ide", pragmas.excludeIdeData);
  19667. args: [],
  19668. source: "asLowercase\x0a\x09<return self.toLowerCase()>",
  19669. referencedClasses: [],
  19670. //>>excludeEnd("ide");
  19671. messageSends: []
  19672. }),
  19673. $globals.String);
  19674. $core.addMethod(
  19675. $core.method({
  19676. selector: "asMutator",
  19677. protocol: 'converting',
  19678. fn: function (){
  19679. var self=this;
  19680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19681. return $core.withContext(function($ctx1) {
  19682. //>>excludeEnd("ctx");
  19683. var $1,$2;
  19684. $1=$recv(self._last()).__eq(":");
  19685. if(!$core.assert($1)){
  19686. $2=self.__comma(":");
  19687. return $2;
  19688. };
  19689. return self;
  19690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19691. }, function($ctx1) {$ctx1.fill(self,"asMutator",{},$globals.String)});
  19692. //>>excludeEnd("ctx");
  19693. },
  19694. //>>excludeStart("ide", pragmas.excludeIdeData);
  19695. args: [],
  19696. 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",
  19697. referencedClasses: [],
  19698. //>>excludeEnd("ide");
  19699. messageSends: ["ifFalse:", "=", "last", ","]
  19700. }),
  19701. $globals.String);
  19702. $core.addMethod(
  19703. $core.method({
  19704. selector: "asNumber",
  19705. protocol: 'converting',
  19706. fn: function (){
  19707. var self=this;
  19708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19709. return $core.withContext(function($ctx1) {
  19710. //>>excludeEnd("ctx");
  19711. return Number(self);
  19712. return self;
  19713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19714. }, function($ctx1) {$ctx1.fill(self,"asNumber",{},$globals.String)});
  19715. //>>excludeEnd("ctx");
  19716. },
  19717. //>>excludeStart("ide", pragmas.excludeIdeData);
  19718. args: [],
  19719. source: "asNumber\x0a\x09<return Number(self)>",
  19720. referencedClasses: [],
  19721. //>>excludeEnd("ide");
  19722. messageSends: []
  19723. }),
  19724. $globals.String);
  19725. $core.addMethod(
  19726. $core.method({
  19727. selector: "asRegexp",
  19728. protocol: 'converting',
  19729. fn: function (){
  19730. var self=this;
  19731. function $RegularExpression(){return $globals.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
  19732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19733. return $core.withContext(function($ctx1) {
  19734. //>>excludeEnd("ctx");
  19735. var $1;
  19736. $1=$recv($RegularExpression())._fromString_(self);
  19737. return $1;
  19738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19739. }, function($ctx1) {$ctx1.fill(self,"asRegexp",{},$globals.String)});
  19740. //>>excludeEnd("ctx");
  19741. },
  19742. //>>excludeStart("ide", pragmas.excludeIdeData);
  19743. args: [],
  19744. source: "asRegexp\x0a\x09^ RegularExpression fromString: self",
  19745. referencedClasses: ["RegularExpression"],
  19746. //>>excludeEnd("ide");
  19747. messageSends: ["fromString:"]
  19748. }),
  19749. $globals.String);
  19750. $core.addMethod(
  19751. $core.method({
  19752. selector: "asString",
  19753. protocol: 'converting',
  19754. fn: function (){
  19755. var self=this;
  19756. return self;
  19757. },
  19758. //>>excludeStart("ide", pragmas.excludeIdeData);
  19759. args: [],
  19760. source: "asString\x0a\x09^ self",
  19761. referencedClasses: [],
  19762. //>>excludeEnd("ide");
  19763. messageSends: []
  19764. }),
  19765. $globals.String);
  19766. $core.addMethod(
  19767. $core.method({
  19768. selector: "asSymbol",
  19769. protocol: 'converting',
  19770. fn: function (){
  19771. var self=this;
  19772. return self;
  19773. },
  19774. //>>excludeStart("ide", pragmas.excludeIdeData);
  19775. args: [],
  19776. source: "asSymbol\x0a\x09^ self",
  19777. referencedClasses: [],
  19778. //>>excludeEnd("ide");
  19779. messageSends: []
  19780. }),
  19781. $globals.String);
  19782. $core.addMethod(
  19783. $core.method({
  19784. selector: "asUppercase",
  19785. protocol: 'converting',
  19786. fn: function (){
  19787. var self=this;
  19788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19789. return $core.withContext(function($ctx1) {
  19790. //>>excludeEnd("ctx");
  19791. return self.toUpperCase();
  19792. return self;
  19793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19794. }, function($ctx1) {$ctx1.fill(self,"asUppercase",{},$globals.String)});
  19795. //>>excludeEnd("ctx");
  19796. },
  19797. //>>excludeStart("ide", pragmas.excludeIdeData);
  19798. args: [],
  19799. source: "asUppercase\x0a\x09<return self.toUpperCase()>",
  19800. referencedClasses: [],
  19801. //>>excludeEnd("ide");
  19802. messageSends: []
  19803. }),
  19804. $globals.String);
  19805. $core.addMethod(
  19806. $core.method({
  19807. selector: "asciiValue",
  19808. protocol: 'accessing',
  19809. fn: function (){
  19810. var self=this;
  19811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19812. return $core.withContext(function($ctx1) {
  19813. //>>excludeEnd("ctx");
  19814. return self.charCodeAt(0);;
  19815. return self;
  19816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19817. }, function($ctx1) {$ctx1.fill(self,"asciiValue",{},$globals.String)});
  19818. //>>excludeEnd("ctx");
  19819. },
  19820. //>>excludeStart("ide", pragmas.excludeIdeData);
  19821. args: [],
  19822. source: "asciiValue\x0a\x09<return self.charCodeAt(0);>",
  19823. referencedClasses: [],
  19824. //>>excludeEnd("ide");
  19825. messageSends: []
  19826. }),
  19827. $globals.String);
  19828. $core.addMethod(
  19829. $core.method({
  19830. selector: "at:ifAbsent:",
  19831. protocol: 'accessing',
  19832. fn: function (anIndex,aBlock){
  19833. var self=this;
  19834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19835. return $core.withContext(function($ctx1) {
  19836. //>>excludeEnd("ctx");
  19837. return String(self)[anIndex - 1] || aBlock._value();
  19838. return self;
  19839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19840. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{anIndex:anIndex,aBlock:aBlock},$globals.String)});
  19841. //>>excludeEnd("ctx");
  19842. },
  19843. //>>excludeStart("ide", pragmas.excludeIdeData);
  19844. args: ["anIndex", "aBlock"],
  19845. source: "at: anIndex ifAbsent: aBlock\x0a\x09<return String(self)[anIndex - 1] || aBlock._value()>",
  19846. referencedClasses: [],
  19847. //>>excludeEnd("ide");
  19848. messageSends: []
  19849. }),
  19850. $globals.String);
  19851. $core.addMethod(
  19852. $core.method({
  19853. selector: "at:ifPresent:ifAbsent:",
  19854. protocol: 'accessing',
  19855. fn: function (anIndex,aBlock,anotherBlock){
  19856. var self=this;
  19857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19858. return $core.withContext(function($ctx1) {
  19859. //>>excludeEnd("ctx");
  19860. var result = String(self)[anIndex - 1];
  19861. return result ? aBlock._value_(result) : anotherBlock._value();
  19862. ;
  19863. return self;
  19864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19865. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{anIndex:anIndex,aBlock:aBlock,anotherBlock:anotherBlock},$globals.String)});
  19866. //>>excludeEnd("ctx");
  19867. },
  19868. //>>excludeStart("ide", pragmas.excludeIdeData);
  19869. args: ["anIndex", "aBlock", "anotherBlock"],
  19870. 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>",
  19871. referencedClasses: [],
  19872. //>>excludeEnd("ide");
  19873. messageSends: []
  19874. }),
  19875. $globals.String);
  19876. $core.addMethod(
  19877. $core.method({
  19878. selector: "capitalized",
  19879. protocol: 'converting',
  19880. fn: function (){
  19881. var self=this;
  19882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19883. return $core.withContext(function($ctx1) {
  19884. //>>excludeEnd("ctx");
  19885. var $2,$1;
  19886. $2=self._isEmpty();
  19887. if($core.assert($2)){
  19888. $1=self;
  19889. } else {
  19890. $1=$recv($recv(self._first())._asUppercase()).__comma(self._allButFirst());
  19891. };
  19892. return $1;
  19893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19894. }, function($ctx1) {$ctx1.fill(self,"capitalized",{},$globals.String)});
  19895. //>>excludeEnd("ctx");
  19896. },
  19897. //>>excludeStart("ide", pragmas.excludeIdeData);
  19898. args: [],
  19899. source: "capitalized\x0a\x09^ self isEmpty\x0a\x09\x09ifTrue: [ self ]\x0a\x09\x09ifFalse: [ self first asUppercase, self allButFirst ]",
  19900. referencedClasses: [],
  19901. //>>excludeEnd("ide");
  19902. messageSends: ["ifTrue:ifFalse:", "isEmpty", ",", "asUppercase", "first", "allButFirst"]
  19903. }),
  19904. $globals.String);
  19905. $core.addMethod(
  19906. $core.method({
  19907. selector: "charCodeAt:",
  19908. protocol: 'accessing',
  19909. fn: function (anInteger){
  19910. var self=this;
  19911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19912. return $core.withContext(function($ctx1) {
  19913. //>>excludeEnd("ctx");
  19914. return self.charCodeAt(anInteger - 1);
  19915. return self;
  19916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19917. }, function($ctx1) {$ctx1.fill(self,"charCodeAt:",{anInteger:anInteger},$globals.String)});
  19918. //>>excludeEnd("ctx");
  19919. },
  19920. //>>excludeStart("ide", pragmas.excludeIdeData);
  19921. args: ["anInteger"],
  19922. source: "charCodeAt: anInteger\x0a\x09<return self.charCodeAt(anInteger - 1)>",
  19923. referencedClasses: [],
  19924. //>>excludeEnd("ide");
  19925. messageSends: []
  19926. }),
  19927. $globals.String);
  19928. $core.addMethod(
  19929. $core.method({
  19930. selector: "copyFrom:to:",
  19931. protocol: 'copying',
  19932. fn: function (anIndex,anotherIndex){
  19933. var self=this;
  19934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19935. return $core.withContext(function($ctx1) {
  19936. //>>excludeEnd("ctx");
  19937. return self.substring(anIndex - 1, anotherIndex);
  19938. return self;
  19939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19940. }, function($ctx1) {$ctx1.fill(self,"copyFrom:to:",{anIndex:anIndex,anotherIndex:anotherIndex},$globals.String)});
  19941. //>>excludeEnd("ctx");
  19942. },
  19943. //>>excludeStart("ide", pragmas.excludeIdeData);
  19944. args: ["anIndex", "anotherIndex"],
  19945. source: "copyFrom: anIndex to: anotherIndex\x0a\x09<return self.substring(anIndex - 1, anotherIndex)>",
  19946. referencedClasses: [],
  19947. //>>excludeEnd("ide");
  19948. messageSends: []
  19949. }),
  19950. $globals.String);
  19951. $core.addMethod(
  19952. $core.method({
  19953. selector: "crlfSanitized",
  19954. protocol: 'converting',
  19955. fn: function (){
  19956. var self=this;
  19957. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  19958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19959. return $core.withContext(function($ctx1) {
  19960. //>>excludeEnd("ctx");
  19961. var $1;
  19962. $1=$recv(self._lines())._join_($recv($String())._lf());
  19963. return $1;
  19964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19965. }, function($ctx1) {$ctx1.fill(self,"crlfSanitized",{},$globals.String)});
  19966. //>>excludeEnd("ctx");
  19967. },
  19968. //>>excludeStart("ide", pragmas.excludeIdeData);
  19969. args: [],
  19970. source: "crlfSanitized\x0a\x09^ self lines join: String lf",
  19971. referencedClasses: ["String"],
  19972. //>>excludeEnd("ide");
  19973. messageSends: ["join:", "lines", "lf"]
  19974. }),
  19975. $globals.String);
  19976. $core.addMethod(
  19977. $core.method({
  19978. selector: "deepCopy",
  19979. protocol: 'copying',
  19980. fn: function (){
  19981. var self=this;
  19982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19983. return $core.withContext(function($ctx1) {
  19984. //>>excludeEnd("ctx");
  19985. var $1;
  19986. $1=self._shallowCopy();
  19987. return $1;
  19988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19989. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{},$globals.String)});
  19990. //>>excludeEnd("ctx");
  19991. },
  19992. //>>excludeStart("ide", pragmas.excludeIdeData);
  19993. args: [],
  19994. source: "deepCopy\x0a\x09^ self shallowCopy",
  19995. referencedClasses: [],
  19996. //>>excludeEnd("ide");
  19997. messageSends: ["shallowCopy"]
  19998. }),
  19999. $globals.String);
  20000. $core.addMethod(
  20001. $core.method({
  20002. selector: "escaped",
  20003. protocol: 'converting',
  20004. fn: function (){
  20005. var self=this;
  20006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20007. return $core.withContext(function($ctx1) {
  20008. //>>excludeEnd("ctx");
  20009. return escape(self);
  20010. return self;
  20011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20012. }, function($ctx1) {$ctx1.fill(self,"escaped",{},$globals.String)});
  20013. //>>excludeEnd("ctx");
  20014. },
  20015. //>>excludeStart("ide", pragmas.excludeIdeData);
  20016. args: [],
  20017. source: "escaped\x0a\x09<return escape(self)>",
  20018. referencedClasses: [],
  20019. //>>excludeEnd("ide");
  20020. messageSends: []
  20021. }),
  20022. $globals.String);
  20023. $core.addMethod(
  20024. $core.method({
  20025. selector: "identityHash",
  20026. protocol: 'accessing',
  20027. fn: function (){
  20028. var self=this;
  20029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20030. return $core.withContext(function($ctx1) {
  20031. //>>excludeEnd("ctx");
  20032. var $1;
  20033. $1=self.__comma("s");
  20034. return $1;
  20035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20036. }, function($ctx1) {$ctx1.fill(self,"identityHash",{},$globals.String)});
  20037. //>>excludeEnd("ctx");
  20038. },
  20039. //>>excludeStart("ide", pragmas.excludeIdeData);
  20040. args: [],
  20041. source: "identityHash\x0a\x09^ self, 's'",
  20042. referencedClasses: [],
  20043. //>>excludeEnd("ide");
  20044. messageSends: [","]
  20045. }),
  20046. $globals.String);
  20047. $core.addMethod(
  20048. $core.method({
  20049. selector: "includesSubString:",
  20050. protocol: 'testing',
  20051. fn: function (subString){
  20052. var self=this;
  20053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20054. return $core.withContext(function($ctx1) {
  20055. //>>excludeEnd("ctx");
  20056. return self.indexOf(subString) != -1;
  20057. return self;
  20058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20059. }, function($ctx1) {$ctx1.fill(self,"includesSubString:",{subString:subString},$globals.String)});
  20060. //>>excludeEnd("ctx");
  20061. },
  20062. //>>excludeStart("ide", pragmas.excludeIdeData);
  20063. args: ["subString"],
  20064. source: "includesSubString: subString\x0a\x09<return self.indexOf(subString) != -1>",
  20065. referencedClasses: [],
  20066. //>>excludeEnd("ide");
  20067. messageSends: []
  20068. }),
  20069. $globals.String);
  20070. $core.addMethod(
  20071. $core.method({
  20072. selector: "isCapitalized",
  20073. protocol: 'testing',
  20074. fn: function (){
  20075. var self=this;
  20076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20077. return $core.withContext(function($ctx1) {
  20078. //>>excludeEnd("ctx");
  20079. var $3,$2,$1;
  20080. $3=self._first();
  20081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20082. $ctx1.sendIdx["first"]=1;
  20083. //>>excludeEnd("ctx");
  20084. $2=$recv($3)._asUppercase();
  20085. $1=$recv($2).__eq_eq(self._first());
  20086. return $1;
  20087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20088. }, function($ctx1) {$ctx1.fill(self,"isCapitalized",{},$globals.String)});
  20089. //>>excludeEnd("ctx");
  20090. },
  20091. //>>excludeStart("ide", pragmas.excludeIdeData);
  20092. args: [],
  20093. source: "isCapitalized\x0a\x09^ self first asUppercase == self first",
  20094. referencedClasses: [],
  20095. //>>excludeEnd("ide");
  20096. messageSends: ["==", "asUppercase", "first"]
  20097. }),
  20098. $globals.String);
  20099. $core.addMethod(
  20100. $core.method({
  20101. selector: "isImmutable",
  20102. protocol: 'testing',
  20103. fn: function (){
  20104. var self=this;
  20105. return true;
  20106. },
  20107. //>>excludeStart("ide", pragmas.excludeIdeData);
  20108. args: [],
  20109. source: "isImmutable\x0a\x09^ true",
  20110. referencedClasses: [],
  20111. //>>excludeEnd("ide");
  20112. messageSends: []
  20113. }),
  20114. $globals.String);
  20115. $core.addMethod(
  20116. $core.method({
  20117. selector: "isString",
  20118. protocol: 'testing',
  20119. fn: function (){
  20120. var self=this;
  20121. return true;
  20122. },
  20123. //>>excludeStart("ide", pragmas.excludeIdeData);
  20124. args: [],
  20125. source: "isString\x0a\x09^ true",
  20126. referencedClasses: [],
  20127. //>>excludeEnd("ide");
  20128. messageSends: []
  20129. }),
  20130. $globals.String);
  20131. $core.addMethod(
  20132. $core.method({
  20133. selector: "isVowel",
  20134. protocol: 'testing',
  20135. fn: function (){
  20136. var self=this;
  20137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20138. return $core.withContext(function($ctx1) {
  20139. //>>excludeEnd("ctx");
  20140. var $1;
  20141. $1=$recv($recv(self._size()).__eq((1)))._and_((function(){
  20142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20143. return $core.withContext(function($ctx2) {
  20144. //>>excludeEnd("ctx");
  20145. return "aeiou"._includes_(self._asLowercase());
  20146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20147. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  20148. //>>excludeEnd("ctx");
  20149. }));
  20150. return $1;
  20151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20152. }, function($ctx1) {$ctx1.fill(self,"isVowel",{},$globals.String)});
  20153. //>>excludeEnd("ctx");
  20154. },
  20155. //>>excludeStart("ide", pragmas.excludeIdeData);
  20156. args: [],
  20157. 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 ]",
  20158. referencedClasses: [],
  20159. //>>excludeEnd("ide");
  20160. messageSends: ["and:", "=", "size", "includes:", "asLowercase"]
  20161. }),
  20162. $globals.String);
  20163. $core.addMethod(
  20164. $core.method({
  20165. selector: "join:",
  20166. protocol: 'split join',
  20167. fn: function (aCollection){
  20168. var self=this;
  20169. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  20170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20171. return $core.withContext(function($ctx1) {
  20172. //>>excludeEnd("ctx");
  20173. var $1;
  20174. $1=$recv($String())._streamContents_((function(stream){
  20175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20176. return $core.withContext(function($ctx2) {
  20177. //>>excludeEnd("ctx");
  20178. return $recv(aCollection)._do_separatedBy_((function(each){
  20179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20180. return $core.withContext(function($ctx3) {
  20181. //>>excludeEnd("ctx");
  20182. return $recv(stream)._nextPutAll_($recv(each)._asString());
  20183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20184. $ctx3.sendIdx["nextPutAll:"]=1;
  20185. //>>excludeEnd("ctx");
  20186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20187. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  20188. //>>excludeEnd("ctx");
  20189. }),(function(){
  20190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20191. return $core.withContext(function($ctx3) {
  20192. //>>excludeEnd("ctx");
  20193. return $recv(stream)._nextPutAll_(self);
  20194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20195. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  20196. //>>excludeEnd("ctx");
  20197. }));
  20198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20199. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  20200. //>>excludeEnd("ctx");
  20201. }));
  20202. return $1;
  20203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20204. }, function($ctx1) {$ctx1.fill(self,"join:",{aCollection:aCollection},$globals.String)});
  20205. //>>excludeEnd("ctx");
  20206. },
  20207. //>>excludeStart("ide", pragmas.excludeIdeData);
  20208. args: ["aCollection"],
  20209. 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 ]]",
  20210. referencedClasses: ["String"],
  20211. //>>excludeEnd("ide");
  20212. messageSends: ["streamContents:", "do:separatedBy:", "nextPutAll:", "asString"]
  20213. }),
  20214. $globals.String);
  20215. $core.addMethod(
  20216. $core.method({
  20217. selector: "lineIndicesDo:",
  20218. protocol: 'split join',
  20219. fn: function (aBlock){
  20220. var self=this;
  20221. var cr,lf,start,sz,nextLF,nextCR;
  20222. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  20223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20224. return $core.withContext(function($ctx1) {
  20225. //>>excludeEnd("ctx");
  20226. var $2,$1,$4,$5,$3,$6,$7,$9,$8,$10,$11;
  20227. var $early={};
  20228. try {
  20229. start=(1);
  20230. sz=self._size();
  20231. cr=$recv($String())._cr();
  20232. nextCR=self._indexOf_startingAt_(cr,(1));
  20233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20234. $ctx1.sendIdx["indexOf:startingAt:"]=1;
  20235. //>>excludeEnd("ctx");
  20236. lf=$recv($String())._lf();
  20237. nextLF=self._indexOf_startingAt_(lf,(1));
  20238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20239. $ctx1.sendIdx["indexOf:startingAt:"]=2;
  20240. //>>excludeEnd("ctx");
  20241. $recv((function(){
  20242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20243. return $core.withContext(function($ctx2) {
  20244. //>>excludeEnd("ctx");
  20245. return $recv(start).__lt_eq(sz);
  20246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20247. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  20248. //>>excludeEnd("ctx");
  20249. }))._whileTrue_((function(){
  20250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20251. return $core.withContext(function($ctx2) {
  20252. //>>excludeEnd("ctx");
  20253. $2=$recv(nextLF).__eq((0));
  20254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20255. $ctx2.sendIdx["="]=1;
  20256. //>>excludeEnd("ctx");
  20257. $1=$recv($2)._and_((function(){
  20258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20259. return $core.withContext(function($ctx3) {
  20260. //>>excludeEnd("ctx");
  20261. return $recv(nextCR).__eq((0));
  20262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20263. $ctx3.sendIdx["="]=2;
  20264. //>>excludeEnd("ctx");
  20265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20266. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  20267. //>>excludeEnd("ctx");
  20268. }));
  20269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20270. $ctx2.sendIdx["and:"]=1;
  20271. //>>excludeEnd("ctx");
  20272. if($core.assert($1)){
  20273. $recv(aBlock)._value_value_value_(start,sz,sz);
  20274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20275. $ctx2.sendIdx["value:value:value:"]=1;
  20276. //>>excludeEnd("ctx");
  20277. throw $early=[self];
  20278. };
  20279. $4=$recv(nextCR).__eq((0));
  20280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20281. $ctx2.sendIdx["="]=3;
  20282. //>>excludeEnd("ctx");
  20283. $3=$recv($4)._or_((function(){
  20284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20285. return $core.withContext(function($ctx3) {
  20286. //>>excludeEnd("ctx");
  20287. $5=(0).__lt(nextLF);
  20288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20289. $ctx3.sendIdx["<"]=1;
  20290. //>>excludeEnd("ctx");
  20291. return $recv($5)._and_((function(){
  20292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20293. return $core.withContext(function($ctx4) {
  20294. //>>excludeEnd("ctx");
  20295. return $recv(nextLF).__lt(nextCR);
  20296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20297. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,6)});
  20298. //>>excludeEnd("ctx");
  20299. }));
  20300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20301. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)});
  20302. //>>excludeEnd("ctx");
  20303. }));
  20304. if($core.assert($3)){
  20305. $6=start;
  20306. $7=$recv(nextLF).__minus((1));
  20307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20308. $ctx2.sendIdx["-"]=1;
  20309. //>>excludeEnd("ctx");
  20310. $recv(aBlock)._value_value_value_($6,$7,nextLF);
  20311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20312. $ctx2.sendIdx["value:value:value:"]=2;
  20313. //>>excludeEnd("ctx");
  20314. start=(1).__plus(nextLF);
  20315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20316. $ctx2.sendIdx["+"]=1;
  20317. //>>excludeEnd("ctx");
  20318. start;
  20319. nextLF=self._indexOf_startingAt_(lf,start);
  20320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20321. $ctx2.sendIdx["indexOf:startingAt:"]=3;
  20322. //>>excludeEnd("ctx");
  20323. return nextLF;
  20324. } else {
  20325. $9=(1).__plus(nextCR);
  20326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20327. $ctx2.sendIdx["+"]=2;
  20328. //>>excludeEnd("ctx");
  20329. $8=$recv($9).__eq(nextLF);
  20330. if($core.assert($8)){
  20331. $10=start;
  20332. $11=$recv(nextCR).__minus((1));
  20333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20334. $ctx2.sendIdx["-"]=2;
  20335. //>>excludeEnd("ctx");
  20336. $recv(aBlock)._value_value_value_($10,$11,nextLF);
  20337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20338. $ctx2.sendIdx["value:value:value:"]=3;
  20339. //>>excludeEnd("ctx");
  20340. start=(1).__plus(nextLF);
  20341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20342. $ctx2.sendIdx["+"]=3;
  20343. //>>excludeEnd("ctx");
  20344. start;
  20345. nextCR=self._indexOf_startingAt_(cr,start);
  20346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20347. $ctx2.sendIdx["indexOf:startingAt:"]=4;
  20348. //>>excludeEnd("ctx");
  20349. nextCR;
  20350. nextLF=self._indexOf_startingAt_(lf,start);
  20351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20352. $ctx2.sendIdx["indexOf:startingAt:"]=5;
  20353. //>>excludeEnd("ctx");
  20354. return nextLF;
  20355. } else {
  20356. $recv(aBlock)._value_value_value_(start,$recv(nextCR).__minus((1)),nextCR);
  20357. start=(1).__plus(nextCR);
  20358. start;
  20359. nextCR=self._indexOf_startingAt_(cr,start);
  20360. return nextCR;
  20361. };
  20362. };
  20363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20364. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  20365. //>>excludeEnd("ctx");
  20366. }));
  20367. return self;
  20368. }
  20369. catch(e) {if(e===$early)return e[0]; throw e}
  20370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20371. }, function($ctx1) {$ctx1.fill(self,"lineIndicesDo:",{aBlock:aBlock,cr:cr,lf:lf,start:start,sz:sz,nextLF:nextLF,nextCR:nextCR},$globals.String)});
  20372. //>>excludeEnd("ctx");
  20373. },
  20374. //>>excludeStart("ide", pragmas.excludeIdeData);
  20375. args: ["aBlock"],
  20376. 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 ] ]]",
  20377. referencedClasses: ["String"],
  20378. //>>excludeEnd("ide");
  20379. messageSends: ["size", "cr", "indexOf:startingAt:", "lf", "whileTrue:", "<=", "ifTrue:", "and:", "=", "value:value:value:", "ifTrue:ifFalse:", "or:", "<", "-", "+"]
  20380. }),
  20381. $globals.String);
  20382. $core.addMethod(
  20383. $core.method({
  20384. selector: "lineNumber:",
  20385. protocol: 'split join',
  20386. fn: function (anIndex){
  20387. var self=this;
  20388. var lineCount;
  20389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20390. return $core.withContext(function($ctx1) {
  20391. //>>excludeEnd("ctx");
  20392. var $2,$1,$3;
  20393. var $early={};
  20394. try {
  20395. lineCount=(0);
  20396. self._lineIndicesDo_((function(start,endWithoutDelimiters,end){
  20397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20398. return $core.withContext(function($ctx2) {
  20399. //>>excludeEnd("ctx");
  20400. lineCount=$recv(lineCount).__plus((1));
  20401. $2=lineCount;
  20402. $1=$recv($2).__eq(anIndex);
  20403. if($core.assert($1)){
  20404. $3=self._copyFrom_to_(start,endWithoutDelimiters);
  20405. throw $early=[$3];
  20406. };
  20407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20408. }, function($ctx2) {$ctx2.fillBlock({start:start,endWithoutDelimiters:endWithoutDelimiters,end:end},$ctx1,1)});
  20409. //>>excludeEnd("ctx");
  20410. }));
  20411. return nil;
  20412. }
  20413. catch(e) {if(e===$early)return e[0]; throw e}
  20414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20415. }, function($ctx1) {$ctx1.fill(self,"lineNumber:",{anIndex:anIndex,lineCount:lineCount},$globals.String)});
  20416. //>>excludeEnd("ctx");
  20417. },
  20418. //>>excludeStart("ide", pragmas.excludeIdeData);
  20419. args: ["anIndex"],
  20420. 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",
  20421. referencedClasses: [],
  20422. //>>excludeEnd("ide");
  20423. messageSends: ["lineIndicesDo:", "ifTrue:", "=", "+", "copyFrom:to:"]
  20424. }),
  20425. $globals.String);
  20426. $core.addMethod(
  20427. $core.method({
  20428. selector: "lines",
  20429. protocol: 'split join',
  20430. fn: function (){
  20431. var self=this;
  20432. var lines;
  20433. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  20434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20435. return $core.withContext(function($ctx1) {
  20436. //>>excludeEnd("ctx");
  20437. var $1;
  20438. lines=$recv($Array())._new();
  20439. self._linesDo_((function(aLine){
  20440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20441. return $core.withContext(function($ctx2) {
  20442. //>>excludeEnd("ctx");
  20443. return $recv(lines)._add_(aLine);
  20444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20445. }, function($ctx2) {$ctx2.fillBlock({aLine:aLine},$ctx1,1)});
  20446. //>>excludeEnd("ctx");
  20447. }));
  20448. $1=lines;
  20449. return $1;
  20450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20451. }, function($ctx1) {$ctx1.fill(self,"lines",{lines:lines},$globals.String)});
  20452. //>>excludeEnd("ctx");
  20453. },
  20454. //>>excludeStart("ide", pragmas.excludeIdeData);
  20455. args: [],
  20456. 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",
  20457. referencedClasses: ["Array"],
  20458. //>>excludeEnd("ide");
  20459. messageSends: ["new", "linesDo:", "add:"]
  20460. }),
  20461. $globals.String);
  20462. $core.addMethod(
  20463. $core.method({
  20464. selector: "linesDo:",
  20465. protocol: 'split join',
  20466. fn: function (aBlock){
  20467. var self=this;
  20468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20469. return $core.withContext(function($ctx1) {
  20470. //>>excludeEnd("ctx");
  20471. self._lineIndicesDo_((function(start,endWithoutDelimiters,end){
  20472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20473. return $core.withContext(function($ctx2) {
  20474. //>>excludeEnd("ctx");
  20475. return $recv(aBlock)._value_(self._copyFrom_to_(start,endWithoutDelimiters));
  20476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20477. }, function($ctx2) {$ctx2.fillBlock({start:start,endWithoutDelimiters:endWithoutDelimiters,end:end},$ctx1,1)});
  20478. //>>excludeEnd("ctx");
  20479. }));
  20480. return self;
  20481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20482. }, function($ctx1) {$ctx1.fill(self,"linesDo:",{aBlock:aBlock},$globals.String)});
  20483. //>>excludeEnd("ctx");
  20484. },
  20485. //>>excludeStart("ide", pragmas.excludeIdeData);
  20486. args: ["aBlock"],
  20487. 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) ]",
  20488. referencedClasses: [],
  20489. //>>excludeEnd("ide");
  20490. messageSends: ["lineIndicesDo:", "value:", "copyFrom:to:"]
  20491. }),
  20492. $globals.String);
  20493. $core.addMethod(
  20494. $core.method({
  20495. selector: "match:",
  20496. protocol: 'regular expressions',
  20497. fn: function (aRegexp){
  20498. var self=this;
  20499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20500. return $core.withContext(function($ctx1) {
  20501. //>>excludeEnd("ctx");
  20502. return self.search(aRegexp) != -1;
  20503. return self;
  20504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20505. }, function($ctx1) {$ctx1.fill(self,"match:",{aRegexp:aRegexp},$globals.String)});
  20506. //>>excludeEnd("ctx");
  20507. },
  20508. //>>excludeStart("ide", pragmas.excludeIdeData);
  20509. args: ["aRegexp"],
  20510. source: "match: aRegexp\x0a\x09<return self.search(aRegexp) != -1>",
  20511. referencedClasses: [],
  20512. //>>excludeEnd("ide");
  20513. messageSends: []
  20514. }),
  20515. $globals.String);
  20516. $core.addMethod(
  20517. $core.method({
  20518. selector: "matchesOf:",
  20519. protocol: 'regular expressions',
  20520. fn: function (aRegularExpression){
  20521. var self=this;
  20522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20523. return $core.withContext(function($ctx1) {
  20524. //>>excludeEnd("ctx");
  20525. return self.match(aRegularExpression);
  20526. return self;
  20527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20528. }, function($ctx1) {$ctx1.fill(self,"matchesOf:",{aRegularExpression:aRegularExpression},$globals.String)});
  20529. //>>excludeEnd("ctx");
  20530. },
  20531. //>>excludeStart("ide", pragmas.excludeIdeData);
  20532. args: ["aRegularExpression"],
  20533. source: "matchesOf: aRegularExpression\x0a\x09<return self.match(aRegularExpression)>",
  20534. referencedClasses: [],
  20535. //>>excludeEnd("ide");
  20536. messageSends: []
  20537. }),
  20538. $globals.String);
  20539. $core.addMethod(
  20540. $core.method({
  20541. selector: "numericallyIndexable",
  20542. protocol: 'private',
  20543. fn: function (){
  20544. var self=this;
  20545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20546. return $core.withContext(function($ctx1) {
  20547. //>>excludeEnd("ctx");
  20548. return String(self);
  20549. return self;
  20550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20551. }, function($ctx1) {$ctx1.fill(self,"numericallyIndexable",{},$globals.String)});
  20552. //>>excludeEnd("ctx");
  20553. },
  20554. //>>excludeStart("ide", pragmas.excludeIdeData);
  20555. args: [],
  20556. source: "numericallyIndexable\x0a\x09<return String(self)>",
  20557. referencedClasses: [],
  20558. //>>excludeEnd("ide");
  20559. messageSends: []
  20560. }),
  20561. $globals.String);
  20562. $core.addMethod(
  20563. $core.method({
  20564. selector: "printNl",
  20565. protocol: 'printing',
  20566. fn: function (){
  20567. var self=this;
  20568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20569. return $core.withContext(function($ctx1) {
  20570. //>>excludeEnd("ctx");
  20571. console.log(self);
  20572. return self;
  20573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20574. }, function($ctx1) {$ctx1.fill(self,"printNl",{},$globals.String)});
  20575. //>>excludeEnd("ctx");
  20576. },
  20577. //>>excludeStart("ide", pragmas.excludeIdeData);
  20578. args: [],
  20579. source: "printNl\x0a\x09<console.log(self)>",
  20580. referencedClasses: [],
  20581. //>>excludeEnd("ide");
  20582. messageSends: []
  20583. }),
  20584. $globals.String);
  20585. $core.addMethod(
  20586. $core.method({
  20587. selector: "printOn:",
  20588. protocol: 'printing',
  20589. fn: function (aStream){
  20590. var self=this;
  20591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20592. return $core.withContext(function($ctx1) {
  20593. //>>excludeEnd("ctx");
  20594. var $1;
  20595. $recv(aStream)._nextPutAll_("'");
  20596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20597. $ctx1.sendIdx["nextPutAll:"]=1;
  20598. //>>excludeEnd("ctx");
  20599. $recv(aStream)._nextPutAll_(self);
  20600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20601. $ctx1.sendIdx["nextPutAll:"]=2;
  20602. //>>excludeEnd("ctx");
  20603. $1=$recv(aStream)._nextPutAll_("'");
  20604. return self;
  20605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20606. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.String)});
  20607. //>>excludeEnd("ctx");
  20608. },
  20609. //>>excludeStart("ide", pragmas.excludeIdeData);
  20610. args: ["aStream"],
  20611. source: "printOn: aStream\x0a\x09aStream \x0a\x09\x09nextPutAll: '''';\x0a\x09\x09nextPutAll: self;\x0a\x09\x09nextPutAll: ''''",
  20612. referencedClasses: [],
  20613. //>>excludeEnd("ide");
  20614. messageSends: ["nextPutAll:"]
  20615. }),
  20616. $globals.String);
  20617. $core.addMethod(
  20618. $core.method({
  20619. selector: "replace:with:",
  20620. protocol: 'regular expressions',
  20621. fn: function (aString,anotherString){
  20622. var self=this;
  20623. function $RegularExpression(){return $globals.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
  20624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20625. return $core.withContext(function($ctx1) {
  20626. //>>excludeEnd("ctx");
  20627. var $1;
  20628. $1=self._replaceRegexp_with_($recv($RegularExpression())._fromString_flag_(aString,"g"),anotherString);
  20629. return $1;
  20630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20631. }, function($ctx1) {$ctx1.fill(self,"replace:with:",{aString:aString,anotherString:anotherString},$globals.String)});
  20632. //>>excludeEnd("ctx");
  20633. },
  20634. //>>excludeStart("ide", pragmas.excludeIdeData);
  20635. args: ["aString", "anotherString"],
  20636. source: "replace: aString with: anotherString\x0a\x09^ self replaceRegexp: (RegularExpression fromString: aString flag: 'g') with: anotherString",
  20637. referencedClasses: ["RegularExpression"],
  20638. //>>excludeEnd("ide");
  20639. messageSends: ["replaceRegexp:with:", "fromString:flag:"]
  20640. }),
  20641. $globals.String);
  20642. $core.addMethod(
  20643. $core.method({
  20644. selector: "replaceRegexp:with:",
  20645. protocol: 'regular expressions',
  20646. fn: function (aRegexp,aString){
  20647. var self=this;
  20648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20649. return $core.withContext(function($ctx1) {
  20650. //>>excludeEnd("ctx");
  20651. return self.replace(aRegexp, aString);
  20652. return self;
  20653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20654. }, function($ctx1) {$ctx1.fill(self,"replaceRegexp:with:",{aRegexp:aRegexp,aString:aString},$globals.String)});
  20655. //>>excludeEnd("ctx");
  20656. },
  20657. //>>excludeStart("ide", pragmas.excludeIdeData);
  20658. args: ["aRegexp", "aString"],
  20659. source: "replaceRegexp: aRegexp with: aString\x0a\x09<return self.replace(aRegexp, aString)>",
  20660. referencedClasses: [],
  20661. //>>excludeEnd("ide");
  20662. messageSends: []
  20663. }),
  20664. $globals.String);
  20665. $core.addMethod(
  20666. $core.method({
  20667. selector: "reversed",
  20668. protocol: 'converting',
  20669. fn: function (){
  20670. var self=this;
  20671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20672. return $core.withContext(function($ctx1) {
  20673. //>>excludeEnd("ctx");
  20674. return self.split("").reverse().join("");
  20675. return self;
  20676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20677. }, function($ctx1) {$ctx1.fill(self,"reversed",{},$globals.String)});
  20678. //>>excludeEnd("ctx");
  20679. },
  20680. //>>excludeStart("ide", pragmas.excludeIdeData);
  20681. args: [],
  20682. source: "reversed\x0a\x09<return self.split(\x22\x22).reverse().join(\x22\x22)>",
  20683. referencedClasses: [],
  20684. //>>excludeEnd("ide");
  20685. messageSends: []
  20686. }),
  20687. $globals.String);
  20688. $core.addMethod(
  20689. $core.method({
  20690. selector: "shallowCopy",
  20691. protocol: 'copying',
  20692. fn: function (){
  20693. var self=this;
  20694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20695. return $core.withContext(function($ctx1) {
  20696. //>>excludeEnd("ctx");
  20697. var $1;
  20698. $1=$recv(self._class())._fromString_(self);
  20699. return $1;
  20700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20701. }, function($ctx1) {$ctx1.fill(self,"shallowCopy",{},$globals.String)});
  20702. //>>excludeEnd("ctx");
  20703. },
  20704. //>>excludeStart("ide", pragmas.excludeIdeData);
  20705. args: [],
  20706. source: "shallowCopy\x0a\x09^ self class fromString: self",
  20707. referencedClasses: [],
  20708. //>>excludeEnd("ide");
  20709. messageSends: ["fromString:", "class"]
  20710. }),
  20711. $globals.String);
  20712. $core.addMethod(
  20713. $core.method({
  20714. selector: "size",
  20715. protocol: 'accessing',
  20716. fn: function (){
  20717. var self=this;
  20718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20719. return $core.withContext(function($ctx1) {
  20720. //>>excludeEnd("ctx");
  20721. return self.length;
  20722. return self;
  20723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20724. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.String)});
  20725. //>>excludeEnd("ctx");
  20726. },
  20727. //>>excludeStart("ide", pragmas.excludeIdeData);
  20728. args: [],
  20729. source: "size\x0a\x09<return self.length>",
  20730. referencedClasses: [],
  20731. //>>excludeEnd("ide");
  20732. messageSends: []
  20733. }),
  20734. $globals.String);
  20735. $core.addMethod(
  20736. $core.method({
  20737. selector: "subStrings:",
  20738. protocol: 'split join',
  20739. fn: function (aString){
  20740. var self=this;
  20741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20742. return $core.withContext(function($ctx1) {
  20743. //>>excludeEnd("ctx");
  20744. var $1;
  20745. $1=self._tokenize_(aString);
  20746. return $1;
  20747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20748. }, function($ctx1) {$ctx1.fill(self,"subStrings:",{aString:aString},$globals.String)});
  20749. //>>excludeEnd("ctx");
  20750. },
  20751. //>>excludeStart("ide", pragmas.excludeIdeData);
  20752. args: ["aString"],
  20753. source: "subStrings: aString\x0a\x09^ self tokenize: aString",
  20754. referencedClasses: [],
  20755. //>>excludeEnd("ide");
  20756. messageSends: ["tokenize:"]
  20757. }),
  20758. $globals.String);
  20759. $core.addMethod(
  20760. $core.method({
  20761. selector: "tokenize:",
  20762. protocol: 'split join',
  20763. fn: function (aString){
  20764. var self=this;
  20765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20766. return $core.withContext(function($ctx1) {
  20767. //>>excludeEnd("ctx");
  20768. return self.split(aString);
  20769. return self;
  20770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20771. }, function($ctx1) {$ctx1.fill(self,"tokenize:",{aString:aString},$globals.String)});
  20772. //>>excludeEnd("ctx");
  20773. },
  20774. //>>excludeStart("ide", pragmas.excludeIdeData);
  20775. args: ["aString"],
  20776. source: "tokenize: aString\x0a\x09<return self.split(aString)>",
  20777. referencedClasses: [],
  20778. //>>excludeEnd("ide");
  20779. messageSends: []
  20780. }),
  20781. $globals.String);
  20782. $core.addMethod(
  20783. $core.method({
  20784. selector: "trimBoth",
  20785. protocol: 'regular expressions',
  20786. fn: function (){
  20787. var self=this;
  20788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20789. return $core.withContext(function($ctx1) {
  20790. //>>excludeEnd("ctx");
  20791. var $1;
  20792. $1=self._trimBoth_("\x5cs");
  20793. return $1;
  20794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20795. }, function($ctx1) {$ctx1.fill(self,"trimBoth",{},$globals.String)});
  20796. //>>excludeEnd("ctx");
  20797. },
  20798. //>>excludeStart("ide", pragmas.excludeIdeData);
  20799. args: [],
  20800. source: "trimBoth\x0a\x09^ self trimBoth: '\x5cs'",
  20801. referencedClasses: [],
  20802. //>>excludeEnd("ide");
  20803. messageSends: ["trimBoth:"]
  20804. }),
  20805. $globals.String);
  20806. $core.addMethod(
  20807. $core.method({
  20808. selector: "trimBoth:",
  20809. protocol: 'regular expressions',
  20810. fn: function (separators){
  20811. var self=this;
  20812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20813. return $core.withContext(function($ctx1) {
  20814. //>>excludeEnd("ctx");
  20815. var $1;
  20816. $1=$recv(self._trimLeft_(separators))._trimRight_(separators);
  20817. return $1;
  20818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20819. }, function($ctx1) {$ctx1.fill(self,"trimBoth:",{separators:separators},$globals.String)});
  20820. //>>excludeEnd("ctx");
  20821. },
  20822. //>>excludeStart("ide", pragmas.excludeIdeData);
  20823. args: ["separators"],
  20824. source: "trimBoth: separators\x0a\x09^ (self trimLeft: separators) trimRight: separators",
  20825. referencedClasses: [],
  20826. //>>excludeEnd("ide");
  20827. messageSends: ["trimRight:", "trimLeft:"]
  20828. }),
  20829. $globals.String);
  20830. $core.addMethod(
  20831. $core.method({
  20832. selector: "trimLeft",
  20833. protocol: 'regular expressions',
  20834. fn: function (){
  20835. var self=this;
  20836. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20837. return $core.withContext(function($ctx1) {
  20838. //>>excludeEnd("ctx");
  20839. var $1;
  20840. $1=self._trimLeft_("\x5cs");
  20841. return $1;
  20842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20843. }, function($ctx1) {$ctx1.fill(self,"trimLeft",{},$globals.String)});
  20844. //>>excludeEnd("ctx");
  20845. },
  20846. //>>excludeStart("ide", pragmas.excludeIdeData);
  20847. args: [],
  20848. source: "trimLeft\x0a\x09^ self trimLeft: '\x5cs'",
  20849. referencedClasses: [],
  20850. //>>excludeEnd("ide");
  20851. messageSends: ["trimLeft:"]
  20852. }),
  20853. $globals.String);
  20854. $core.addMethod(
  20855. $core.method({
  20856. selector: "trimLeft:",
  20857. protocol: 'regular expressions',
  20858. fn: function (separators){
  20859. var self=this;
  20860. function $RegularExpression(){return $globals.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
  20861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20862. return $core.withContext(function($ctx1) {
  20863. //>>excludeEnd("ctx");
  20864. var $3,$2,$1;
  20865. $3=$recv("^[".__comma(separators)).__comma("]+");
  20866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20867. $ctx1.sendIdx[","]=1;
  20868. //>>excludeEnd("ctx");
  20869. $2=$recv($RegularExpression())._fromString_flag_($3,"g");
  20870. $1=self._replaceRegexp_with_($2,"");
  20871. return $1;
  20872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20873. }, function($ctx1) {$ctx1.fill(self,"trimLeft:",{separators:separators},$globals.String)});
  20874. //>>excludeEnd("ctx");
  20875. },
  20876. //>>excludeStart("ide", pragmas.excludeIdeData);
  20877. args: ["separators"],
  20878. source: "trimLeft: separators\x0a\x09^ self replaceRegexp: (RegularExpression fromString: '^[', separators, ']+' flag: 'g') with: ''",
  20879. referencedClasses: ["RegularExpression"],
  20880. //>>excludeEnd("ide");
  20881. messageSends: ["replaceRegexp:with:", "fromString:flag:", ","]
  20882. }),
  20883. $globals.String);
  20884. $core.addMethod(
  20885. $core.method({
  20886. selector: "trimRight",
  20887. protocol: 'regular expressions',
  20888. fn: function (){
  20889. var self=this;
  20890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20891. return $core.withContext(function($ctx1) {
  20892. //>>excludeEnd("ctx");
  20893. var $1;
  20894. $1=self._trimRight_("\x5cs");
  20895. return $1;
  20896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20897. }, function($ctx1) {$ctx1.fill(self,"trimRight",{},$globals.String)});
  20898. //>>excludeEnd("ctx");
  20899. },
  20900. //>>excludeStart("ide", pragmas.excludeIdeData);
  20901. args: [],
  20902. source: "trimRight\x0a\x09^ self trimRight: '\x5cs'",
  20903. referencedClasses: [],
  20904. //>>excludeEnd("ide");
  20905. messageSends: ["trimRight:"]
  20906. }),
  20907. $globals.String);
  20908. $core.addMethod(
  20909. $core.method({
  20910. selector: "trimRight:",
  20911. protocol: 'regular expressions',
  20912. fn: function (separators){
  20913. var self=this;
  20914. function $RegularExpression(){return $globals.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
  20915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20916. return $core.withContext(function($ctx1) {
  20917. //>>excludeEnd("ctx");
  20918. var $3,$2,$1;
  20919. $3=$recv("[".__comma(separators)).__comma("]+$");
  20920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20921. $ctx1.sendIdx[","]=1;
  20922. //>>excludeEnd("ctx");
  20923. $2=$recv($RegularExpression())._fromString_flag_($3,"g");
  20924. $1=self._replaceRegexp_with_($2,"");
  20925. return $1;
  20926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20927. }, function($ctx1) {$ctx1.fill(self,"trimRight:",{separators:separators},$globals.String)});
  20928. //>>excludeEnd("ctx");
  20929. },
  20930. //>>excludeStart("ide", pragmas.excludeIdeData);
  20931. args: ["separators"],
  20932. source: "trimRight: separators\x0a\x09^ self replaceRegexp: (RegularExpression fromString: '[', separators, ']+$' flag: 'g') with: ''",
  20933. referencedClasses: ["RegularExpression"],
  20934. //>>excludeEnd("ide");
  20935. messageSends: ["replaceRegexp:with:", "fromString:flag:", ","]
  20936. }),
  20937. $globals.String);
  20938. $core.addMethod(
  20939. $core.method({
  20940. selector: "unescaped",
  20941. protocol: 'converting',
  20942. fn: function (){
  20943. var self=this;
  20944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20945. return $core.withContext(function($ctx1) {
  20946. //>>excludeEnd("ctx");
  20947. return unescape(self);
  20948. return self;
  20949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20950. }, function($ctx1) {$ctx1.fill(self,"unescaped",{},$globals.String)});
  20951. //>>excludeEnd("ctx");
  20952. },
  20953. //>>excludeStart("ide", pragmas.excludeIdeData);
  20954. args: [],
  20955. source: "unescaped\x0a\x09<return unescape(self)>",
  20956. referencedClasses: [],
  20957. //>>excludeEnd("ide");
  20958. messageSends: []
  20959. }),
  20960. $globals.String);
  20961. $core.addMethod(
  20962. $core.method({
  20963. selector: "uriComponentDecoded",
  20964. protocol: 'converting',
  20965. fn: function (){
  20966. var self=this;
  20967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20968. return $core.withContext(function($ctx1) {
  20969. //>>excludeEnd("ctx");
  20970. return decodeURIComponent(self);
  20971. return self;
  20972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20973. }, function($ctx1) {$ctx1.fill(self,"uriComponentDecoded",{},$globals.String)});
  20974. //>>excludeEnd("ctx");
  20975. },
  20976. //>>excludeStart("ide", pragmas.excludeIdeData);
  20977. args: [],
  20978. source: "uriComponentDecoded\x0a\x09<return decodeURIComponent(self)>",
  20979. referencedClasses: [],
  20980. //>>excludeEnd("ide");
  20981. messageSends: []
  20982. }),
  20983. $globals.String);
  20984. $core.addMethod(
  20985. $core.method({
  20986. selector: "uriComponentEncoded",
  20987. protocol: 'converting',
  20988. fn: function (){
  20989. var self=this;
  20990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20991. return $core.withContext(function($ctx1) {
  20992. //>>excludeEnd("ctx");
  20993. return encodeURIComponent(self);
  20994. return self;
  20995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20996. }, function($ctx1) {$ctx1.fill(self,"uriComponentEncoded",{},$globals.String)});
  20997. //>>excludeEnd("ctx");
  20998. },
  20999. //>>excludeStart("ide", pragmas.excludeIdeData);
  21000. args: [],
  21001. source: "uriComponentEncoded\x0a\x09<return encodeURIComponent(self)>",
  21002. referencedClasses: [],
  21003. //>>excludeEnd("ide");
  21004. messageSends: []
  21005. }),
  21006. $globals.String);
  21007. $core.addMethod(
  21008. $core.method({
  21009. selector: "uriDecoded",
  21010. protocol: 'converting',
  21011. fn: function (){
  21012. var self=this;
  21013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21014. return $core.withContext(function($ctx1) {
  21015. //>>excludeEnd("ctx");
  21016. return decodeURI(self);
  21017. return self;
  21018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21019. }, function($ctx1) {$ctx1.fill(self,"uriDecoded",{},$globals.String)});
  21020. //>>excludeEnd("ctx");
  21021. },
  21022. //>>excludeStart("ide", pragmas.excludeIdeData);
  21023. args: [],
  21024. source: "uriDecoded\x0a\x09<return decodeURI(self)>",
  21025. referencedClasses: [],
  21026. //>>excludeEnd("ide");
  21027. messageSends: []
  21028. }),
  21029. $globals.String);
  21030. $core.addMethod(
  21031. $core.method({
  21032. selector: "uriEncoded",
  21033. protocol: 'converting',
  21034. fn: function (){
  21035. var self=this;
  21036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21037. return $core.withContext(function($ctx1) {
  21038. //>>excludeEnd("ctx");
  21039. return encodeURI(self);
  21040. return self;
  21041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21042. }, function($ctx1) {$ctx1.fill(self,"uriEncoded",{},$globals.String)});
  21043. //>>excludeEnd("ctx");
  21044. },
  21045. //>>excludeStart("ide", pragmas.excludeIdeData);
  21046. args: [],
  21047. source: "uriEncoded\x0a\x09<return encodeURI(self)>",
  21048. referencedClasses: [],
  21049. //>>excludeEnd("ide");
  21050. messageSends: []
  21051. }),
  21052. $globals.String);
  21053. $core.addMethod(
  21054. $core.method({
  21055. selector: "value:",
  21056. protocol: 'evaluating',
  21057. fn: function (anObject){
  21058. var self=this;
  21059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21060. return $core.withContext(function($ctx1) {
  21061. //>>excludeEnd("ctx");
  21062. var $1;
  21063. $1=$recv(anObject)._perform_(self);
  21064. return $1;
  21065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21066. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject},$globals.String)});
  21067. //>>excludeEnd("ctx");
  21068. },
  21069. //>>excludeStart("ide", pragmas.excludeIdeData);
  21070. args: ["anObject"],
  21071. source: "value: anObject \x0a\x09^ anObject perform: self",
  21072. referencedClasses: [],
  21073. //>>excludeEnd("ide");
  21074. messageSends: ["perform:"]
  21075. }),
  21076. $globals.String);
  21077. $core.addMethod(
  21078. $core.method({
  21079. selector: "cr",
  21080. protocol: 'accessing',
  21081. fn: function (){
  21082. var self=this;
  21083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21084. return $core.withContext(function($ctx1) {
  21085. //>>excludeEnd("ctx");
  21086. return '\r';
  21087. return self;
  21088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21089. }, function($ctx1) {$ctx1.fill(self,"cr",{},$globals.String.klass)});
  21090. //>>excludeEnd("ctx");
  21091. },
  21092. //>>excludeStart("ide", pragmas.excludeIdeData);
  21093. args: [],
  21094. source: "cr\x0a\x09<return '\x5cr'>",
  21095. referencedClasses: [],
  21096. //>>excludeEnd("ide");
  21097. messageSends: []
  21098. }),
  21099. $globals.String.klass);
  21100. $core.addMethod(
  21101. $core.method({
  21102. selector: "crlf",
  21103. protocol: 'accessing',
  21104. fn: function (){
  21105. var self=this;
  21106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21107. return $core.withContext(function($ctx1) {
  21108. //>>excludeEnd("ctx");
  21109. return '\r\n';
  21110. return self;
  21111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21112. }, function($ctx1) {$ctx1.fill(self,"crlf",{},$globals.String.klass)});
  21113. //>>excludeEnd("ctx");
  21114. },
  21115. //>>excludeStart("ide", pragmas.excludeIdeData);
  21116. args: [],
  21117. source: "crlf\x0a\x09<return '\x5cr\x5cn'>",
  21118. referencedClasses: [],
  21119. //>>excludeEnd("ide");
  21120. messageSends: []
  21121. }),
  21122. $globals.String.klass);
  21123. $core.addMethod(
  21124. $core.method({
  21125. selector: "esc",
  21126. protocol: 'accessing',
  21127. fn: function (){
  21128. var self=this;
  21129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21130. return $core.withContext(function($ctx1) {
  21131. //>>excludeEnd("ctx");
  21132. var $1;
  21133. $1=self._fromCharCode_((27));
  21134. return $1;
  21135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21136. }, function($ctx1) {$ctx1.fill(self,"esc",{},$globals.String.klass)});
  21137. //>>excludeEnd("ctx");
  21138. },
  21139. //>>excludeStart("ide", pragmas.excludeIdeData);
  21140. args: [],
  21141. source: "esc\x0a\x09^ self fromCharCode: 27",
  21142. referencedClasses: [],
  21143. //>>excludeEnd("ide");
  21144. messageSends: ["fromCharCode:"]
  21145. }),
  21146. $globals.String.klass);
  21147. $core.addMethod(
  21148. $core.method({
  21149. selector: "fromCharCode:",
  21150. protocol: 'instance creation',
  21151. fn: function (anInteger){
  21152. var self=this;
  21153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21154. return $core.withContext(function($ctx1) {
  21155. //>>excludeEnd("ctx");
  21156. return String.fromCharCode(anInteger);
  21157. return self;
  21158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21159. }, function($ctx1) {$ctx1.fill(self,"fromCharCode:",{anInteger:anInteger},$globals.String.klass)});
  21160. //>>excludeEnd("ctx");
  21161. },
  21162. //>>excludeStart("ide", pragmas.excludeIdeData);
  21163. args: ["anInteger"],
  21164. source: "fromCharCode: anInteger\x0a\x09<return String.fromCharCode(anInteger)>",
  21165. referencedClasses: [],
  21166. //>>excludeEnd("ide");
  21167. messageSends: []
  21168. }),
  21169. $globals.String.klass);
  21170. $core.addMethod(
  21171. $core.method({
  21172. selector: "fromString:",
  21173. protocol: 'instance creation',
  21174. fn: function (aString){
  21175. var self=this;
  21176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21177. return $core.withContext(function($ctx1) {
  21178. //>>excludeEnd("ctx");
  21179. return String(aString);
  21180. return self;
  21181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21182. }, function($ctx1) {$ctx1.fill(self,"fromString:",{aString:aString},$globals.String.klass)});
  21183. //>>excludeEnd("ctx");
  21184. },
  21185. //>>excludeStart("ide", pragmas.excludeIdeData);
  21186. args: ["aString"],
  21187. source: "fromString: aString\x0a\x09\x09<return String(aString)>",
  21188. referencedClasses: [],
  21189. //>>excludeEnd("ide");
  21190. messageSends: []
  21191. }),
  21192. $globals.String.klass);
  21193. $core.addMethod(
  21194. $core.method({
  21195. selector: "lf",
  21196. protocol: 'accessing',
  21197. fn: function (){
  21198. var self=this;
  21199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21200. return $core.withContext(function($ctx1) {
  21201. //>>excludeEnd("ctx");
  21202. return '\n';
  21203. return self;
  21204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21205. }, function($ctx1) {$ctx1.fill(self,"lf",{},$globals.String.klass)});
  21206. //>>excludeEnd("ctx");
  21207. },
  21208. //>>excludeStart("ide", pragmas.excludeIdeData);
  21209. args: [],
  21210. source: "lf\x0a\x09<return '\x5cn'>",
  21211. referencedClasses: [],
  21212. //>>excludeEnd("ide");
  21213. messageSends: []
  21214. }),
  21215. $globals.String.klass);
  21216. $core.addMethod(
  21217. $core.method({
  21218. selector: "random",
  21219. protocol: 'random',
  21220. fn: function (){
  21221. var self=this;
  21222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21223. return $core.withContext(function($ctx1) {
  21224. //>>excludeEnd("ctx");
  21225. return (Math.random()*(22/32)+(10/32)).toString(32).slice(2);;
  21226. return self;
  21227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21228. }, function($ctx1) {$ctx1.fill(self,"random",{},$globals.String.klass)});
  21229. //>>excludeEnd("ctx");
  21230. },
  21231. //>>excludeStart("ide", pragmas.excludeIdeData);
  21232. args: [],
  21233. 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);>",
  21234. referencedClasses: [],
  21235. //>>excludeEnd("ide");
  21236. messageSends: []
  21237. }),
  21238. $globals.String.klass);
  21239. $core.addMethod(
  21240. $core.method({
  21241. selector: "randomNotIn:",
  21242. protocol: 'random',
  21243. fn: function (aString){
  21244. var self=this;
  21245. var result;
  21246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21247. return $core.withContext(function($ctx1) {
  21248. //>>excludeEnd("ctx");
  21249. var $1;
  21250. $recv((function(){
  21251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21252. return $core.withContext(function($ctx2) {
  21253. //>>excludeEnd("ctx");
  21254. result=self._random();
  21255. result;
  21256. return $recv(aString)._includesSubString_(result);
  21257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21258. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  21259. //>>excludeEnd("ctx");
  21260. }))._whileTrue();
  21261. $1=result;
  21262. return $1;
  21263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21264. }, function($ctx1) {$ctx1.fill(self,"randomNotIn:",{aString:aString,result:result},$globals.String.klass)});
  21265. //>>excludeEnd("ctx");
  21266. },
  21267. //>>excludeStart("ide", pragmas.excludeIdeData);
  21268. args: ["aString"],
  21269. source: "randomNotIn: aString\x0a\x09| result |\x0a\x09[ result := self random. aString includesSubString: result ] whileTrue.\x0a\x09^ result",
  21270. referencedClasses: [],
  21271. //>>excludeEnd("ide");
  21272. messageSends: ["whileTrue", "random", "includesSubString:"]
  21273. }),
  21274. $globals.String.klass);
  21275. $core.addMethod(
  21276. $core.method({
  21277. selector: "space",
  21278. protocol: 'accessing',
  21279. fn: function (){
  21280. var self=this;
  21281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21282. return $core.withContext(function($ctx1) {
  21283. //>>excludeEnd("ctx");
  21284. return ' ';
  21285. return self;
  21286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21287. }, function($ctx1) {$ctx1.fill(self,"space",{},$globals.String.klass)});
  21288. //>>excludeEnd("ctx");
  21289. },
  21290. //>>excludeStart("ide", pragmas.excludeIdeData);
  21291. args: [],
  21292. source: "space\x0a\x09<return ' '>",
  21293. referencedClasses: [],
  21294. //>>excludeEnd("ide");
  21295. messageSends: []
  21296. }),
  21297. $globals.String.klass);
  21298. $core.addMethod(
  21299. $core.method({
  21300. selector: "streamClass",
  21301. protocol: 'accessing',
  21302. fn: function (){
  21303. var self=this;
  21304. function $StringStream(){return $globals.StringStream||(typeof StringStream=="undefined"?nil:StringStream)}
  21305. return $StringStream();
  21306. },
  21307. //>>excludeStart("ide", pragmas.excludeIdeData);
  21308. args: [],
  21309. source: "streamClass\x0a\x09\x09^ StringStream",
  21310. referencedClasses: ["StringStream"],
  21311. //>>excludeEnd("ide");
  21312. messageSends: []
  21313. }),
  21314. $globals.String.klass);
  21315. $core.addMethod(
  21316. $core.method({
  21317. selector: "tab",
  21318. protocol: 'accessing',
  21319. fn: function (){
  21320. var self=this;
  21321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21322. return $core.withContext(function($ctx1) {
  21323. //>>excludeEnd("ctx");
  21324. return '\t';
  21325. return self;
  21326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21327. }, function($ctx1) {$ctx1.fill(self,"tab",{},$globals.String.klass)});
  21328. //>>excludeEnd("ctx");
  21329. },
  21330. //>>excludeStart("ide", pragmas.excludeIdeData);
  21331. args: [],
  21332. source: "tab\x0a\x09<return '\x5ct'>",
  21333. referencedClasses: [],
  21334. //>>excludeEnd("ide");
  21335. messageSends: []
  21336. }),
  21337. $globals.String.klass);
  21338. $core.addMethod(
  21339. $core.method({
  21340. selector: "value:",
  21341. protocol: 'instance creation',
  21342. fn: function (aUTFCharCode){
  21343. var self=this;
  21344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21345. return $core.withContext(function($ctx1) {
  21346. //>>excludeEnd("ctx");
  21347. return String.fromCharCode(aUTFCharCode);;
  21348. return self;
  21349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21350. }, function($ctx1) {$ctx1.fill(self,"value:",{aUTFCharCode:aUTFCharCode},$globals.String.klass)});
  21351. //>>excludeEnd("ctx");
  21352. },
  21353. //>>excludeStart("ide", pragmas.excludeIdeData);
  21354. args: ["aUTFCharCode"],
  21355. source: "value: aUTFCharCode\x0a\x0a\x09<return String.fromCharCode(aUTFCharCode);>",
  21356. referencedClasses: [],
  21357. //>>excludeEnd("ide");
  21358. messageSends: []
  21359. }),
  21360. $globals.String.klass);
  21361. $core.addClass('Set', $globals.Collection, ['defaultBucket', 'slowBucketStores', 'fastBuckets', 'size'], 'Kernel-Collections');
  21362. //>>excludeStart("ide", pragmas.excludeIdeData);
  21363. $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`.";
  21364. //>>excludeEnd("ide");
  21365. $core.addMethod(
  21366. $core.method({
  21367. selector: "=",
  21368. protocol: 'comparing',
  21369. fn: function (aCollection){
  21370. var self=this;
  21371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21372. return $core.withContext(function($ctx1) {
  21373. //>>excludeEnd("ctx");
  21374. var $2,$1,$4,$3,$5;
  21375. var $early={};
  21376. try {
  21377. $2=self._class();
  21378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21379. $ctx1.sendIdx["class"]=1;
  21380. //>>excludeEnd("ctx");
  21381. $1=$recv($2).__eq($recv(aCollection)._class());
  21382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21383. $ctx1.sendIdx["="]=1;
  21384. //>>excludeEnd("ctx");
  21385. if(!$core.assert($1)){
  21386. return false;
  21387. };
  21388. $4=self._size();
  21389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21390. $ctx1.sendIdx["size"]=1;
  21391. //>>excludeEnd("ctx");
  21392. $3=$recv($4).__eq($recv(aCollection)._size());
  21393. if(!$core.assert($3)){
  21394. return false;
  21395. };
  21396. self._do_((function(each){
  21397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21398. return $core.withContext(function($ctx2) {
  21399. //>>excludeEnd("ctx");
  21400. $5=$recv(aCollection)._includes_(each);
  21401. if(!$core.assert($5)){
  21402. throw $early=[false];
  21403. };
  21404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21405. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  21406. //>>excludeEnd("ctx");
  21407. }));
  21408. return true;
  21409. }
  21410. catch(e) {if(e===$early)return e[0]; throw e}
  21411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21412. }, function($ctx1) {$ctx1.fill(self,"=",{aCollection:aCollection},$globals.Set)});
  21413. //>>excludeEnd("ctx");
  21414. },
  21415. //>>excludeStart("ide", pragmas.excludeIdeData);
  21416. args: ["aCollection"],
  21417. 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",
  21418. referencedClasses: [],
  21419. //>>excludeEnd("ide");
  21420. messageSends: ["ifFalse:", "=", "class", "size", "do:", "includes:"]
  21421. }),
  21422. $globals.Set);
  21423. $core.addMethod(
  21424. $core.method({
  21425. selector: "add:",
  21426. protocol: 'adding/removing',
  21427. fn: function (anObject){
  21428. var self=this;
  21429. var bucket;
  21430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21431. return $core.withContext(function($ctx1) {
  21432. //>>excludeEnd("ctx");
  21433. var $2,$1,$receiver;
  21434. bucket=self._bucketsOfElement_(anObject);
  21435. $2=$recv(bucket)._second();
  21436. if(($receiver = $2) == null || $receiver.isNil){
  21437. var object,slowBucket;
  21438. object=$recv(bucket)._first();
  21439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21440. $ctx1.sendIdx["first"]=1;
  21441. //>>excludeEnd("ctx");
  21442. object;
  21443. slowBucket=$recv(bucket)._third();
  21444. slowBucket;
  21445. $recv(slowBucket)._indexOf_ifAbsent_(object,(function(){
  21446. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21447. return $core.withContext(function($ctx2) {
  21448. //>>excludeEnd("ctx");
  21449. $recv(slowBucket)._add_(object);
  21450. self["@size"]=$recv(self["@size"]).__plus((1));
  21451. return self["@size"];
  21452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21453. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  21454. //>>excludeEnd("ctx");
  21455. }));
  21456. $1=object;
  21457. } else {
  21458. var primitiveBucket;
  21459. primitiveBucket=$receiver;
  21460. $1=self._add_in_($recv(bucket)._first(),primitiveBucket);
  21461. };
  21462. return $1;
  21463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21464. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject,bucket:bucket},$globals.Set)});
  21465. //>>excludeEnd("ctx");
  21466. },
  21467. //>>excludeStart("ide", pragmas.excludeIdeData);
  21468. args: ["anObject"],
  21469. 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 ]",
  21470. referencedClasses: [],
  21471. //>>excludeEnd("ide");
  21472. messageSends: ["bucketsOfElement:", "ifNil:ifNotNil:", "second", "first", "third", "indexOf:ifAbsent:", "add:", "+", "add:in:"]
  21473. }),
  21474. $globals.Set);
  21475. $core.addMethod(
  21476. $core.method({
  21477. selector: "add:in:",
  21478. protocol: 'private',
  21479. fn: function (anObject,anotherObject){
  21480. var self=this;
  21481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21482. return $core.withContext(function($ctx1) {
  21483. //>>excludeEnd("ctx");
  21484. if (anObject in anotherObject.store) { return false; }
  21485. self['@size']++;
  21486. return anotherObject.store[anObject] = true;
  21487. ;
  21488. return self;
  21489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21490. }, function($ctx1) {$ctx1.fill(self,"add:in:",{anObject:anObject,anotherObject:anotherObject},$globals.Set)});
  21491. //>>excludeEnd("ctx");
  21492. },
  21493. //>>excludeStart("ide", pragmas.excludeIdeData);
  21494. args: ["anObject", "anotherObject"],
  21495. 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>",
  21496. referencedClasses: [],
  21497. //>>excludeEnd("ide");
  21498. messageSends: []
  21499. }),
  21500. $globals.Set);
  21501. $core.addMethod(
  21502. $core.method({
  21503. selector: "bucketsOfElement:",
  21504. protocol: 'private',
  21505. fn: function (anObject){
  21506. var self=this;
  21507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21508. return $core.withContext(function($ctx1) {
  21509. //>>excludeEnd("ctx");
  21510. var type, bucket, prim = anObject == null ? (anObject = nil) : anObject.valueOf();
  21511. if ((type = typeof prim) === "object") {
  21512. if (anObject !== nil) {
  21513. bucket = null;
  21514. self['@slowBucketStores'].some(function (store) {
  21515. return bucket = store._bucketOfElement_(anObject);
  21516. });
  21517. return [ anObject, null, bucket || self['@defaultBucket'] ];
  21518. }
  21519. // include nil to well-known objects under 'boolean' fastBucket
  21520. prim = null;
  21521. type = 'boolean';
  21522. }
  21523. return [ prim, self['@fastBuckets'][type] ];
  21524. ;
  21525. return self;
  21526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21527. }, function($ctx1) {$ctx1.fill(self,"bucketsOfElement:",{anObject:anObject},$globals.Set)});
  21528. //>>excludeEnd("ctx");
  21529. },
  21530. //>>excludeStart("ide", pragmas.excludeIdeData);
  21531. args: ["anObject"],
  21532. 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>",
  21533. referencedClasses: [],
  21534. //>>excludeEnd("ide");
  21535. messageSends: []
  21536. }),
  21537. $globals.Set);
  21538. $core.addMethod(
  21539. $core.method({
  21540. selector: "classNameOf:",
  21541. protocol: 'private',
  21542. fn: function (anObject){
  21543. var self=this;
  21544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21545. return $core.withContext(function($ctx1) {
  21546. //>>excludeEnd("ctx");
  21547. return anObject.klass && anObject.klass.className;
  21548. return self;
  21549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21550. }, function($ctx1) {$ctx1.fill(self,"classNameOf:",{anObject:anObject},$globals.Set)});
  21551. //>>excludeEnd("ctx");
  21552. },
  21553. //>>excludeStart("ide", pragmas.excludeIdeData);
  21554. args: ["anObject"],
  21555. 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>",
  21556. referencedClasses: [],
  21557. //>>excludeEnd("ide");
  21558. messageSends: []
  21559. }),
  21560. $globals.Set);
  21561. $core.addMethod(
  21562. $core.method({
  21563. selector: "collect:",
  21564. protocol: 'enumerating',
  21565. fn: function (aBlock){
  21566. var self=this;
  21567. var collection;
  21568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21569. return $core.withContext(function($ctx1) {
  21570. //>>excludeEnd("ctx");
  21571. var $1;
  21572. collection=$recv(self._class())._new();
  21573. self._do_((function(each){
  21574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21575. return $core.withContext(function($ctx2) {
  21576. //>>excludeEnd("ctx");
  21577. return $recv(collection)._add_($recv(aBlock)._value_(each));
  21578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21579. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  21580. //>>excludeEnd("ctx");
  21581. }));
  21582. $1=collection;
  21583. return $1;
  21584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21585. }, function($ctx1) {$ctx1.fill(self,"collect:",{aBlock:aBlock,collection:collection},$globals.Set)});
  21586. //>>excludeEnd("ctx");
  21587. },
  21588. //>>excludeStart("ide", pragmas.excludeIdeData);
  21589. args: ["aBlock"],
  21590. source: "collect: aBlock\x0a\x09| collection |\x0a\x09collection := self class new.\x0a\x09self do: [ :each | collection add: (aBlock value: each) ].\x0a\x09^ collection",
  21591. referencedClasses: [],
  21592. //>>excludeEnd("ide");
  21593. messageSends: ["new", "class", "do:", "add:", "value:"]
  21594. }),
  21595. $globals.Set);
  21596. $core.addMethod(
  21597. $core.method({
  21598. selector: "detect:ifNone:",
  21599. protocol: 'enumerating',
  21600. fn: function (aBlock,anotherBlock){
  21601. var self=this;
  21602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21603. return $core.withContext(function($ctx1) {
  21604. //>>excludeEnd("ctx");
  21605. var $1,$2;
  21606. var $early={};
  21607. try {
  21608. self._do_((function(each){
  21609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21610. return $core.withContext(function($ctx2) {
  21611. //>>excludeEnd("ctx");
  21612. $1=$recv(aBlock)._value_(each);
  21613. if($core.assert($1)){
  21614. throw $early=[each];
  21615. };
  21616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21617. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  21618. //>>excludeEnd("ctx");
  21619. }));
  21620. $2=$recv(anotherBlock)._value();
  21621. return $2;
  21622. }
  21623. catch(e) {if(e===$early)return e[0]; throw e}
  21624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21625. }, function($ctx1) {$ctx1.fill(self,"detect:ifNone:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Set)});
  21626. //>>excludeEnd("ctx");
  21627. },
  21628. //>>excludeStart("ide", pragmas.excludeIdeData);
  21629. args: ["aBlock", "anotherBlock"],
  21630. source: "detect: aBlock ifNone: anotherBlock\x0a\x09self do: [ :each | (aBlock value: each) ifTrue: [ ^each ] ].\x0a\x09^ anotherBlock value",
  21631. referencedClasses: [],
  21632. //>>excludeEnd("ide");
  21633. messageSends: ["do:", "ifTrue:", "value:", "value"]
  21634. }),
  21635. $globals.Set);
  21636. $core.addMethod(
  21637. $core.method({
  21638. selector: "do:",
  21639. protocol: 'enumerating',
  21640. fn: function (aBlock){
  21641. var self=this;
  21642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21643. return $core.withContext(function($ctx1) {
  21644. //>>excludeEnd("ctx");
  21645. var el, keys, i;
  21646. el = self['@fastBuckets'];
  21647. keys = Object.keys(el);
  21648. for (i = 0; i < keys.length; ++i) {
  21649. var fastBucket = el[keys[i]], fn = fastBucket.fn, store = Object.keys(fastBucket.store);
  21650. if (fn) { for (var j = 0; j < store.length; ++j) { aBlock._value_(fn(store[j])); } }
  21651. else { store._do_(aBlock); }
  21652. }
  21653. el = self['@slowBucketStores'];
  21654. for (i = 0; i < el.length; ++i) { el[i]._do_(aBlock); }
  21655. self['@defaultBucket']._do_(aBlock);
  21656. ;
  21657. return self;
  21658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21659. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.Set)});
  21660. //>>excludeEnd("ctx");
  21661. },
  21662. //>>excludeStart("ide", pragmas.excludeIdeData);
  21663. args: ["aBlock"],
  21664. 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>",
  21665. referencedClasses: [],
  21666. //>>excludeEnd("ide");
  21667. messageSends: []
  21668. }),
  21669. $globals.Set);
  21670. $core.addMethod(
  21671. $core.method({
  21672. selector: "includes:",
  21673. protocol: 'testing',
  21674. fn: function (anObject){
  21675. var self=this;
  21676. var bucket;
  21677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21678. return $core.withContext(function($ctx1) {
  21679. //>>excludeEnd("ctx");
  21680. var $2,$3,$4,$1,$receiver;
  21681. bucket=self._bucketsOfElement_(anObject);
  21682. $2=$recv(bucket)._second();
  21683. if(($receiver = $2) == null || $receiver.isNil){
  21684. $3=$recv(bucket)._third();
  21685. $4=$recv(bucket)._first();
  21686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21687. $ctx1.sendIdx["first"]=1;
  21688. //>>excludeEnd("ctx");
  21689. $1=$recv($3)._includes_($4);
  21690. } else {
  21691. var primitiveBucket;
  21692. primitiveBucket=$receiver;
  21693. $1=self._includes_in_($recv(bucket)._first(),primitiveBucket);
  21694. };
  21695. return $1;
  21696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21697. }, function($ctx1) {$ctx1.fill(self,"includes:",{anObject:anObject,bucket:bucket},$globals.Set)});
  21698. //>>excludeEnd("ctx");
  21699. },
  21700. //>>excludeStart("ide", pragmas.excludeIdeData);
  21701. args: ["anObject"],
  21702. 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 ]",
  21703. referencedClasses: [],
  21704. //>>excludeEnd("ide");
  21705. messageSends: ["bucketsOfElement:", "ifNil:ifNotNil:", "second", "includes:", "third", "first", "includes:in:"]
  21706. }),
  21707. $globals.Set);
  21708. $core.addMethod(
  21709. $core.method({
  21710. selector: "includes:in:",
  21711. protocol: 'private',
  21712. fn: function (anObject,anotherObject){
  21713. var self=this;
  21714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21715. return $core.withContext(function($ctx1) {
  21716. //>>excludeEnd("ctx");
  21717. return anObject in anotherObject.store;
  21718. return self;
  21719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21720. }, function($ctx1) {$ctx1.fill(self,"includes:in:",{anObject:anObject,anotherObject:anotherObject},$globals.Set)});
  21721. //>>excludeEnd("ctx");
  21722. },
  21723. //>>excludeStart("ide", pragmas.excludeIdeData);
  21724. args: ["anObject", "anotherObject"],
  21725. source: "includes: anObject in: anotherObject\x0a\x09<return anObject in anotherObject.store>",
  21726. referencedClasses: [],
  21727. //>>excludeEnd("ide");
  21728. messageSends: []
  21729. }),
  21730. $globals.Set);
  21731. $core.addMethod(
  21732. $core.method({
  21733. selector: "initialize",
  21734. protocol: 'initialization',
  21735. fn: function (){
  21736. var self=this;
  21737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21738. return $core.withContext(function($ctx1) {
  21739. //>>excludeEnd("ctx");
  21740. var $1;
  21741. (
  21742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21743. $ctx1.supercall = true,
  21744. //>>excludeEnd("ctx");
  21745. $globals.Set.superclass.fn.prototype._initialize.apply($recv(self), []));
  21746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21747. $ctx1.supercall = false;
  21748. //>>excludeEnd("ctx");;
  21749. self["@defaultBucket"]=[];
  21750. self._initializeSlowBucketStores();
  21751. $1=self._removeAll();
  21752. return self;
  21753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21754. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Set)});
  21755. //>>excludeEnd("ctx");
  21756. },
  21757. //>>excludeStart("ide", pragmas.excludeIdeData);
  21758. args: [],
  21759. source: "initialize\x0a\x09super initialize.\x0a\x09\x0a\x09defaultBucket := #().\x0a\x09self\x0a\x09\x09initializeSlowBucketStores;\x0a\x09\x09removeAll",
  21760. referencedClasses: [],
  21761. //>>excludeEnd("ide");
  21762. messageSends: ["initialize", "initializeSlowBucketStores", "removeAll"]
  21763. }),
  21764. $globals.Set);
  21765. $core.addMethod(
  21766. $core.method({
  21767. selector: "initializeSlowBucketStores",
  21768. protocol: 'initialization',
  21769. fn: function (){
  21770. var self=this;
  21771. function $ArrayBucketStore(){return $globals.ArrayBucketStore||(typeof ArrayBucketStore=="undefined"?nil:ArrayBucketStore)}
  21772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21773. return $core.withContext(function($ctx1) {
  21774. //>>excludeEnd("ctx");
  21775. var $1;
  21776. $1=$recv($ArrayBucketStore())._hashBlock_((function(x){
  21777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21778. return $core.withContext(function($ctx2) {
  21779. //>>excludeEnd("ctx");
  21780. return self._classNameOf_(x);
  21781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21782. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  21783. //>>excludeEnd("ctx");
  21784. }));
  21785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21786. $ctx1.sendIdx["hashBlock:"]=1;
  21787. //>>excludeEnd("ctx");
  21788. self["@slowBucketStores"]=[$1,$recv($ArrayBucketStore())._hashBlock_((function(x){
  21789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21790. return $core.withContext(function($ctx2) {
  21791. //>>excludeEnd("ctx");
  21792. return self._jsConstructorNameOf_(x);
  21793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21794. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,2)});
  21795. //>>excludeEnd("ctx");
  21796. }))];
  21797. return self;
  21798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21799. }, function($ctx1) {$ctx1.fill(self,"initializeSlowBucketStores",{},$globals.Set)});
  21800. //>>excludeEnd("ctx");
  21801. },
  21802. //>>excludeStart("ide", pragmas.excludeIdeData);
  21803. args: [],
  21804. source: "initializeSlowBucketStores\x0a\x09slowBucketStores := {\x0a\x09\x09ArrayBucketStore hashBlock: [ :x | self classNameOf: x ].\x0a\x09\x09ArrayBucketStore hashBlock: [ :x | self jsConstructorNameOf: x ]\x0a\x09}",
  21805. referencedClasses: ["ArrayBucketStore"],
  21806. //>>excludeEnd("ide");
  21807. messageSends: ["hashBlock:", "classNameOf:", "jsConstructorNameOf:"]
  21808. }),
  21809. $globals.Set);
  21810. $core.addMethod(
  21811. $core.method({
  21812. selector: "jsConstructorNameOf:",
  21813. protocol: 'private',
  21814. fn: function (anObject){
  21815. var self=this;
  21816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21817. return $core.withContext(function($ctx1) {
  21818. //>>excludeEnd("ctx");
  21819. return anObject.constructor && anObject.constructor.name;
  21820. return self;
  21821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21822. }, function($ctx1) {$ctx1.fill(self,"jsConstructorNameOf:",{anObject:anObject},$globals.Set)});
  21823. //>>excludeEnd("ctx");
  21824. },
  21825. //>>excludeStart("ide", pragmas.excludeIdeData);
  21826. args: ["anObject"],
  21827. source: "jsConstructorNameOf: anObject\x0a\x09<return anObject.constructor && anObject.constructor.name>",
  21828. referencedClasses: [],
  21829. //>>excludeEnd("ide");
  21830. messageSends: []
  21831. }),
  21832. $globals.Set);
  21833. $core.addMethod(
  21834. $core.method({
  21835. selector: "printOn:",
  21836. protocol: 'printing',
  21837. fn: function (aStream){
  21838. var self=this;
  21839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21840. return $core.withContext(function($ctx1) {
  21841. //>>excludeEnd("ctx");
  21842. (
  21843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21844. $ctx1.supercall = true,
  21845. //>>excludeEnd("ctx");
  21846. $globals.Set.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  21847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21848. $ctx1.supercall = false;
  21849. //>>excludeEnd("ctx");;
  21850. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21851. $ctx1.sendIdx["printOn:"]=1;
  21852. //>>excludeEnd("ctx");
  21853. $recv(aStream)._nextPutAll_(" (");
  21854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21855. $ctx1.sendIdx["nextPutAll:"]=1;
  21856. //>>excludeEnd("ctx");
  21857. self._do_separatedBy_((function(each){
  21858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21859. return $core.withContext(function($ctx2) {
  21860. //>>excludeEnd("ctx");
  21861. return $recv(each)._printOn_(aStream);
  21862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21863. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  21864. //>>excludeEnd("ctx");
  21865. }),(function(){
  21866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21867. return $core.withContext(function($ctx2) {
  21868. //>>excludeEnd("ctx");
  21869. return $recv(aStream)._nextPutAll_(" ");
  21870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21871. $ctx2.sendIdx["nextPutAll:"]=2;
  21872. //>>excludeEnd("ctx");
  21873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21874. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  21875. //>>excludeEnd("ctx");
  21876. }));
  21877. $recv(aStream)._nextPutAll_(")");
  21878. return self;
  21879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21880. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Set)});
  21881. //>>excludeEnd("ctx");
  21882. },
  21883. //>>excludeStart("ide", pragmas.excludeIdeData);
  21884. args: ["aStream"],
  21885. 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: ')'",
  21886. referencedClasses: [],
  21887. //>>excludeEnd("ide");
  21888. messageSends: ["printOn:", "nextPutAll:", "do:separatedBy:"]
  21889. }),
  21890. $globals.Set);
  21891. $core.addMethod(
  21892. $core.method({
  21893. selector: "remove:ifAbsent:",
  21894. protocol: 'adding/removing',
  21895. fn: function (anObject,aBlock){
  21896. var self=this;
  21897. var bucket;
  21898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21899. return $core.withContext(function($ctx1) {
  21900. //>>excludeEnd("ctx");
  21901. var $2,$3,$4,$5,$1,$receiver;
  21902. var $early={};
  21903. try {
  21904. bucket=self._bucketsOfElement_(anObject);
  21905. $2=$recv(bucket)._second();
  21906. if(($receiver = $2) == null || $receiver.isNil){
  21907. $3=$recv(bucket)._third();
  21908. $4=$recv(bucket)._first();
  21909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21910. $ctx1.sendIdx["first"]=1;
  21911. //>>excludeEnd("ctx");
  21912. $recv($3)._remove_ifAbsent_($4,(function(){
  21913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21914. return $core.withContext(function($ctx2) {
  21915. //>>excludeEnd("ctx");
  21916. $5=$recv(aBlock)._value();
  21917. throw $early=[$5];
  21918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21919. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  21920. //>>excludeEnd("ctx");
  21921. }));
  21922. self["@size"]=$recv(self["@size"]).__minus((1));
  21923. $1=self["@size"];
  21924. } else {
  21925. var primitiveBucket;
  21926. primitiveBucket=$receiver;
  21927. $1=self._remove_in_($recv(bucket)._first(),primitiveBucket);
  21928. };
  21929. return $1;
  21930. }
  21931. catch(e) {if(e===$early)return e[0]; throw e}
  21932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21933. }, function($ctx1) {$ctx1.fill(self,"remove:ifAbsent:",{anObject:anObject,aBlock:aBlock,bucket:bucket},$globals.Set)});
  21934. //>>excludeEnd("ctx");
  21935. },
  21936. //>>excludeStart("ide", pragmas.excludeIdeData);
  21937. args: ["anObject", "aBlock"],
  21938. 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 ]",
  21939. referencedClasses: [],
  21940. //>>excludeEnd("ide");
  21941. messageSends: ["bucketsOfElement:", "ifNil:ifNotNil:", "second", "remove:ifAbsent:", "third", "first", "value", "-", "remove:in:"]
  21942. }),
  21943. $globals.Set);
  21944. $core.addMethod(
  21945. $core.method({
  21946. selector: "remove:in:",
  21947. protocol: 'private',
  21948. fn: function (anObject,anotherObject){
  21949. var self=this;
  21950. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21951. return $core.withContext(function($ctx1) {
  21952. //>>excludeEnd("ctx");
  21953. if (delete anotherObject.store[anObject]) self['@size']--;
  21954. return self;
  21955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21956. }, function($ctx1) {$ctx1.fill(self,"remove:in:",{anObject:anObject,anotherObject:anotherObject},$globals.Set)});
  21957. //>>excludeEnd("ctx");
  21958. },
  21959. //>>excludeStart("ide", pragmas.excludeIdeData);
  21960. args: ["anObject", "anotherObject"],
  21961. source: "remove: anObject in: anotherObject\x0a\x09<if (delete anotherObject.store[anObject]) self['@size']-->",
  21962. referencedClasses: [],
  21963. //>>excludeEnd("ide");
  21964. messageSends: []
  21965. }),
  21966. $globals.Set);
  21967. $core.addMethod(
  21968. $core.method({
  21969. selector: "removeAll",
  21970. protocol: 'adding/removing',
  21971. fn: function (){
  21972. var self=this;
  21973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21974. return $core.withContext(function($ctx1) {
  21975. //>>excludeEnd("ctx");
  21976. self['@fastBuckets'] = {
  21977. 'boolean': { store: Object.create(null), fn: function (x) { return {'true': true, 'false': false, 'null': null}[x]; } },
  21978. 'number': { store: Object.create(null), fn: Number },
  21979. 'string': { store: Object.create(null) }
  21980. };
  21981. self['@slowBucketStores'].forEach(function (x) { x._removeAll(); });
  21982. self['@defaultBucket']._removeAll();
  21983. self['@size'] = 0;
  21984. ;
  21985. return self;
  21986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21987. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.Set)});
  21988. //>>excludeEnd("ctx");
  21989. },
  21990. //>>excludeStart("ide", pragmas.excludeIdeData);
  21991. args: [],
  21992. 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>",
  21993. referencedClasses: [],
  21994. //>>excludeEnd("ide");
  21995. messageSends: []
  21996. }),
  21997. $globals.Set);
  21998. $core.addMethod(
  21999. $core.method({
  22000. selector: "select:",
  22001. protocol: 'enumerating',
  22002. fn: function (aBlock){
  22003. var self=this;
  22004. var collection;
  22005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22006. return $core.withContext(function($ctx1) {
  22007. //>>excludeEnd("ctx");
  22008. var $1,$2;
  22009. collection=$recv(self._class())._new();
  22010. self._do_((function(each){
  22011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22012. return $core.withContext(function($ctx2) {
  22013. //>>excludeEnd("ctx");
  22014. $1=$recv(aBlock)._value_(each);
  22015. if($core.assert($1)){
  22016. return $recv(collection)._add_(each);
  22017. };
  22018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22019. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  22020. //>>excludeEnd("ctx");
  22021. }));
  22022. $2=collection;
  22023. return $2;
  22024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22025. }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,collection:collection},$globals.Set)});
  22026. //>>excludeEnd("ctx");
  22027. },
  22028. //>>excludeStart("ide", pragmas.excludeIdeData);
  22029. args: ["aBlock"],
  22030. 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",
  22031. referencedClasses: [],
  22032. //>>excludeEnd("ide");
  22033. messageSends: ["new", "class", "do:", "ifTrue:", "value:", "add:"]
  22034. }),
  22035. $globals.Set);
  22036. $core.addMethod(
  22037. $core.method({
  22038. selector: "size",
  22039. protocol: 'accessing',
  22040. fn: function (){
  22041. var self=this;
  22042. var $1;
  22043. $1=self["@size"];
  22044. return $1;
  22045. },
  22046. //>>excludeStart("ide", pragmas.excludeIdeData);
  22047. args: [],
  22048. source: "size\x0a\x09^ size",
  22049. referencedClasses: [],
  22050. //>>excludeEnd("ide");
  22051. messageSends: []
  22052. }),
  22053. $globals.Set);
  22054. $core.addClass('Queue', $globals.Object, ['read', 'readIndex', 'write'], 'Kernel-Collections');
  22055. //>>excludeStart("ide", pragmas.excludeIdeData);
  22056. $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.";
  22057. //>>excludeEnd("ide");
  22058. $core.addMethod(
  22059. $core.method({
  22060. selector: "initialize",
  22061. protocol: 'initialization',
  22062. fn: function (){
  22063. var self=this;
  22064. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  22065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22066. return $core.withContext(function($ctx1) {
  22067. //>>excludeEnd("ctx");
  22068. (
  22069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22070. $ctx1.supercall = true,
  22071. //>>excludeEnd("ctx");
  22072. $globals.Queue.superclass.fn.prototype._initialize.apply($recv(self), []));
  22073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22074. $ctx1.supercall = false;
  22075. //>>excludeEnd("ctx");;
  22076. self["@read"]=$recv($OrderedCollection())._new();
  22077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22078. $ctx1.sendIdx["new"]=1;
  22079. //>>excludeEnd("ctx");
  22080. self["@write"]=$recv($OrderedCollection())._new();
  22081. self["@readIndex"]=(1);
  22082. return self;
  22083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22084. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Queue)});
  22085. //>>excludeEnd("ctx");
  22086. },
  22087. //>>excludeStart("ide", pragmas.excludeIdeData);
  22088. args: [],
  22089. source: "initialize\x0a\x09super initialize.\x0a\x09read := OrderedCollection new.\x0a\x09write := OrderedCollection new.\x0a\x09readIndex := 1",
  22090. referencedClasses: ["OrderedCollection"],
  22091. //>>excludeEnd("ide");
  22092. messageSends: ["initialize", "new"]
  22093. }),
  22094. $globals.Queue);
  22095. $core.addMethod(
  22096. $core.method({
  22097. selector: "next",
  22098. protocol: 'accessing',
  22099. fn: function (){
  22100. var self=this;
  22101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22102. return $core.withContext(function($ctx1) {
  22103. //>>excludeEnd("ctx");
  22104. var $1;
  22105. $1=self._nextIfAbsent_((function(){
  22106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22107. return $core.withContext(function($ctx2) {
  22108. //>>excludeEnd("ctx");
  22109. return self._error_("Cannot read from empty Queue.");
  22110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22111. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  22112. //>>excludeEnd("ctx");
  22113. }));
  22114. return $1;
  22115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22116. }, function($ctx1) {$ctx1.fill(self,"next",{},$globals.Queue)});
  22117. //>>excludeEnd("ctx");
  22118. },
  22119. //>>excludeStart("ide", pragmas.excludeIdeData);
  22120. args: [],
  22121. source: "next\x0a\x09^ self nextIfAbsent: [ self error: 'Cannot read from empty Queue.' ]",
  22122. referencedClasses: [],
  22123. //>>excludeEnd("ide");
  22124. messageSends: ["nextIfAbsent:", "error:"]
  22125. }),
  22126. $globals.Queue);
  22127. $core.addMethod(
  22128. $core.method({
  22129. selector: "nextIfAbsent:",
  22130. protocol: 'accessing',
  22131. fn: function (aBlock){
  22132. var self=this;
  22133. var result;
  22134. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  22135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22136. return $core.withContext(function($ctx1) {
  22137. //>>excludeEnd("ctx");
  22138. var $1,$2,$3,$4;
  22139. var $early={};
  22140. try {
  22141. result=$recv(self["@read"])._at_ifAbsent_(self["@readIndex"],(function(){
  22142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22143. return $core.withContext(function($ctx2) {
  22144. //>>excludeEnd("ctx");
  22145. $1=$recv(self["@write"])._isEmpty();
  22146. if($core.assert($1)){
  22147. $2=$recv(self["@readIndex"]).__gt((1));
  22148. if($core.assert($2)){
  22149. self["@read"]=[];
  22150. self["@read"];
  22151. self["@readIndex"]=(1);
  22152. self["@readIndex"];
  22153. };
  22154. $3=$recv(aBlock)._value();
  22155. throw $early=[$3];
  22156. };
  22157. self["@read"]=self["@write"];
  22158. self["@read"];
  22159. self["@readIndex"]=(1);
  22160. self["@readIndex"];
  22161. self["@write"]=$recv($OrderedCollection())._new();
  22162. self["@write"];
  22163. return $recv(self["@read"])._first();
  22164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22165. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  22166. //>>excludeEnd("ctx");
  22167. }));
  22168. $recv(self["@read"])._at_put_(self["@readIndex"],nil);
  22169. self["@readIndex"]=$recv(self["@readIndex"]).__plus((1));
  22170. $4=result;
  22171. return $4;
  22172. }
  22173. catch(e) {if(e===$early)return e[0]; throw e}
  22174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22175. }, function($ctx1) {$ctx1.fill(self,"nextIfAbsent:",{aBlock:aBlock,result:result},$globals.Queue)});
  22176. //>>excludeEnd("ctx");
  22177. },
  22178. //>>excludeStart("ide", pragmas.excludeIdeData);
  22179. args: ["aBlock"],
  22180. 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",
  22181. referencedClasses: ["OrderedCollection"],
  22182. //>>excludeEnd("ide");
  22183. messageSends: ["at:ifAbsent:", "ifTrue:", "isEmpty", ">", "value", "new", "first", "at:put:", "+"]
  22184. }),
  22185. $globals.Queue);
  22186. $core.addMethod(
  22187. $core.method({
  22188. selector: "nextPut:",
  22189. protocol: 'accessing',
  22190. fn: function (anObject){
  22191. var self=this;
  22192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22193. return $core.withContext(function($ctx1) {
  22194. //>>excludeEnd("ctx");
  22195. $recv(self["@write"])._add_(anObject);
  22196. return self;
  22197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22198. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{anObject:anObject},$globals.Queue)});
  22199. //>>excludeEnd("ctx");
  22200. },
  22201. //>>excludeStart("ide", pragmas.excludeIdeData);
  22202. args: ["anObject"],
  22203. source: "nextPut: anObject\x0a\x09write add: anObject",
  22204. referencedClasses: [],
  22205. //>>excludeEnd("ide");
  22206. messageSends: ["add:"]
  22207. }),
  22208. $globals.Queue);
  22209. $core.addClass('RegularExpression', $globals.Object, [], 'Kernel-Collections');
  22210. //>>excludeStart("ide", pragmas.excludeIdeData);
  22211. $globals.RegularExpression.comment="I represent a regular expression object. My instances are JavaScript `RegExp` object.";
  22212. //>>excludeEnd("ide");
  22213. $core.addMethod(
  22214. $core.method({
  22215. selector: "compile:",
  22216. protocol: 'evaluating',
  22217. fn: function (aString){
  22218. var self=this;
  22219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22220. return $core.withContext(function($ctx1) {
  22221. //>>excludeEnd("ctx");
  22222. return self.compile(aString);
  22223. return self;
  22224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22225. }, function($ctx1) {$ctx1.fill(self,"compile:",{aString:aString},$globals.RegularExpression)});
  22226. //>>excludeEnd("ctx");
  22227. },
  22228. //>>excludeStart("ide", pragmas.excludeIdeData);
  22229. args: ["aString"],
  22230. source: "compile: aString\x0a\x09<return self.compile(aString)>",
  22231. referencedClasses: [],
  22232. //>>excludeEnd("ide");
  22233. messageSends: []
  22234. }),
  22235. $globals.RegularExpression);
  22236. $core.addMethod(
  22237. $core.method({
  22238. selector: "exec:",
  22239. protocol: 'evaluating',
  22240. fn: function (aString){
  22241. var self=this;
  22242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22243. return $core.withContext(function($ctx1) {
  22244. //>>excludeEnd("ctx");
  22245. return self.exec(aString) || nil;
  22246. return self;
  22247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22248. }, function($ctx1) {$ctx1.fill(self,"exec:",{aString:aString},$globals.RegularExpression)});
  22249. //>>excludeEnd("ctx");
  22250. },
  22251. //>>excludeStart("ide", pragmas.excludeIdeData);
  22252. args: ["aString"],
  22253. source: "exec: aString\x0a\x09<return self.exec(aString) || nil>",
  22254. referencedClasses: [],
  22255. //>>excludeEnd("ide");
  22256. messageSends: []
  22257. }),
  22258. $globals.RegularExpression);
  22259. $core.addMethod(
  22260. $core.method({
  22261. selector: "test:",
  22262. protocol: 'evaluating',
  22263. fn: function (aString){
  22264. var self=this;
  22265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22266. return $core.withContext(function($ctx1) {
  22267. //>>excludeEnd("ctx");
  22268. return self.test(aString);
  22269. return self;
  22270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22271. }, function($ctx1) {$ctx1.fill(self,"test:",{aString:aString},$globals.RegularExpression)});
  22272. //>>excludeEnd("ctx");
  22273. },
  22274. //>>excludeStart("ide", pragmas.excludeIdeData);
  22275. args: ["aString"],
  22276. source: "test: aString\x0a\x09<return self.test(aString)>",
  22277. referencedClasses: [],
  22278. //>>excludeEnd("ide");
  22279. messageSends: []
  22280. }),
  22281. $globals.RegularExpression);
  22282. $core.addMethod(
  22283. $core.method({
  22284. selector: "fromString:",
  22285. protocol: 'instance creation',
  22286. fn: function (aString){
  22287. var self=this;
  22288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22289. return $core.withContext(function($ctx1) {
  22290. //>>excludeEnd("ctx");
  22291. var $1;
  22292. $1=self._fromString_flag_(aString,"");
  22293. return $1;
  22294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22295. }, function($ctx1) {$ctx1.fill(self,"fromString:",{aString:aString},$globals.RegularExpression.klass)});
  22296. //>>excludeEnd("ctx");
  22297. },
  22298. //>>excludeStart("ide", pragmas.excludeIdeData);
  22299. args: ["aString"],
  22300. source: "fromString: aString\x0a\x09\x09^ self fromString: aString flag: ''",
  22301. referencedClasses: [],
  22302. //>>excludeEnd("ide");
  22303. messageSends: ["fromString:flag:"]
  22304. }),
  22305. $globals.RegularExpression.klass);
  22306. $core.addMethod(
  22307. $core.method({
  22308. selector: "fromString:flag:",
  22309. protocol: 'instance creation',
  22310. fn: function (aString,anotherString){
  22311. var self=this;
  22312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22313. return $core.withContext(function($ctx1) {
  22314. //>>excludeEnd("ctx");
  22315. return new RegExp(aString, anotherString);
  22316. return self;
  22317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22318. }, function($ctx1) {$ctx1.fill(self,"fromString:flag:",{aString:aString,anotherString:anotherString},$globals.RegularExpression.klass)});
  22319. //>>excludeEnd("ctx");
  22320. },
  22321. //>>excludeStart("ide", pragmas.excludeIdeData);
  22322. args: ["aString", "anotherString"],
  22323. source: "fromString: aString flag: anotherString\x0a\x09<return new RegExp(aString, anotherString)>",
  22324. referencedClasses: [],
  22325. //>>excludeEnd("ide");
  22326. messageSends: []
  22327. }),
  22328. $globals.RegularExpression.klass);
  22329. $core.addClass('Stream', $globals.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections');
  22330. //>>excludeStart("ide", pragmas.excludeIdeData);
  22331. $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.";
  22332. //>>excludeEnd("ide");
  22333. $core.addMethod(
  22334. $core.method({
  22335. selector: "<<",
  22336. protocol: 'writing',
  22337. fn: function (anObject){
  22338. var self=this;
  22339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22340. return $core.withContext(function($ctx1) {
  22341. //>>excludeEnd("ctx");
  22342. self._write_(anObject);
  22343. return self;
  22344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22345. }, function($ctx1) {$ctx1.fill(self,"<<",{anObject:anObject},$globals.Stream)});
  22346. //>>excludeEnd("ctx");
  22347. },
  22348. //>>excludeStart("ide", pragmas.excludeIdeData);
  22349. args: ["anObject"],
  22350. source: "<< anObject\x0a\x09self write: anObject",
  22351. referencedClasses: [],
  22352. //>>excludeEnd("ide");
  22353. messageSends: ["write:"]
  22354. }),
  22355. $globals.Stream);
  22356. $core.addMethod(
  22357. $core.method({
  22358. selector: "atEnd",
  22359. protocol: 'testing',
  22360. fn: function (){
  22361. var self=this;
  22362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22363. return $core.withContext(function($ctx1) {
  22364. //>>excludeEnd("ctx");
  22365. var $1;
  22366. $1=$recv(self._position()).__eq(self._size());
  22367. return $1;
  22368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22369. }, function($ctx1) {$ctx1.fill(self,"atEnd",{},$globals.Stream)});
  22370. //>>excludeEnd("ctx");
  22371. },
  22372. //>>excludeStart("ide", pragmas.excludeIdeData);
  22373. args: [],
  22374. source: "atEnd\x0a\x09^ self position = self size",
  22375. referencedClasses: [],
  22376. //>>excludeEnd("ide");
  22377. messageSends: ["=", "position", "size"]
  22378. }),
  22379. $globals.Stream);
  22380. $core.addMethod(
  22381. $core.method({
  22382. selector: "atStart",
  22383. protocol: 'testing',
  22384. fn: function (){
  22385. var self=this;
  22386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22387. return $core.withContext(function($ctx1) {
  22388. //>>excludeEnd("ctx");
  22389. var $1;
  22390. $1=$recv(self._position()).__eq((0));
  22391. return $1;
  22392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22393. }, function($ctx1) {$ctx1.fill(self,"atStart",{},$globals.Stream)});
  22394. //>>excludeEnd("ctx");
  22395. },
  22396. //>>excludeStart("ide", pragmas.excludeIdeData);
  22397. args: [],
  22398. source: "atStart\x0a\x09^ self position = 0",
  22399. referencedClasses: [],
  22400. //>>excludeEnd("ide");
  22401. messageSends: ["=", "position"]
  22402. }),
  22403. $globals.Stream);
  22404. $core.addMethod(
  22405. $core.method({
  22406. selector: "close",
  22407. protocol: 'actions',
  22408. fn: function (){
  22409. var self=this;
  22410. return self;
  22411. },
  22412. //>>excludeStart("ide", pragmas.excludeIdeData);
  22413. args: [],
  22414. source: "close",
  22415. referencedClasses: [],
  22416. //>>excludeEnd("ide");
  22417. messageSends: []
  22418. }),
  22419. $globals.Stream);
  22420. $core.addMethod(
  22421. $core.method({
  22422. selector: "collection",
  22423. protocol: 'accessing',
  22424. fn: function (){
  22425. var self=this;
  22426. var $1;
  22427. $1=self["@collection"];
  22428. return $1;
  22429. },
  22430. //>>excludeStart("ide", pragmas.excludeIdeData);
  22431. args: [],
  22432. source: "collection\x0a\x09^ collection",
  22433. referencedClasses: [],
  22434. //>>excludeEnd("ide");
  22435. messageSends: []
  22436. }),
  22437. $globals.Stream);
  22438. $core.addMethod(
  22439. $core.method({
  22440. selector: "contents",
  22441. protocol: 'accessing',
  22442. fn: function (){
  22443. var self=this;
  22444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22445. return $core.withContext(function($ctx1) {
  22446. //>>excludeEnd("ctx");
  22447. var $1;
  22448. $1=$recv(self._collection())._copyFrom_to_((1),self._streamSize());
  22449. return $1;
  22450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22451. }, function($ctx1) {$ctx1.fill(self,"contents",{},$globals.Stream)});
  22452. //>>excludeEnd("ctx");
  22453. },
  22454. //>>excludeStart("ide", pragmas.excludeIdeData);
  22455. args: [],
  22456. source: "contents\x0a\x09^ self collection\x0a\x09\x09copyFrom: 1\x0a\x09\x09to: self streamSize",
  22457. referencedClasses: [],
  22458. //>>excludeEnd("ide");
  22459. messageSends: ["copyFrom:to:", "collection", "streamSize"]
  22460. }),
  22461. $globals.Stream);
  22462. $core.addMethod(
  22463. $core.method({
  22464. selector: "do:",
  22465. protocol: 'enumerating',
  22466. fn: function (aBlock){
  22467. var self=this;
  22468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22469. return $core.withContext(function($ctx1) {
  22470. //>>excludeEnd("ctx");
  22471. $recv((function(){
  22472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22473. return $core.withContext(function($ctx2) {
  22474. //>>excludeEnd("ctx");
  22475. return self._atEnd();
  22476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22477. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  22478. //>>excludeEnd("ctx");
  22479. }))._whileFalse_((function(){
  22480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22481. return $core.withContext(function($ctx2) {
  22482. //>>excludeEnd("ctx");
  22483. return $recv(aBlock)._value_(self._next());
  22484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22485. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  22486. //>>excludeEnd("ctx");
  22487. }));
  22488. return self;
  22489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22490. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.Stream)});
  22491. //>>excludeEnd("ctx");
  22492. },
  22493. //>>excludeStart("ide", pragmas.excludeIdeData);
  22494. args: ["aBlock"],
  22495. source: "do: aBlock\x0a\x09[ self atEnd ] whileFalse: [ aBlock value: self next ]",
  22496. referencedClasses: [],
  22497. //>>excludeEnd("ide");
  22498. messageSends: ["whileFalse:", "atEnd", "value:", "next"]
  22499. }),
  22500. $globals.Stream);
  22501. $core.addMethod(
  22502. $core.method({
  22503. selector: "flush",
  22504. protocol: 'actions',
  22505. fn: function (){
  22506. var self=this;
  22507. return self;
  22508. },
  22509. //>>excludeStart("ide", pragmas.excludeIdeData);
  22510. args: [],
  22511. source: "flush",
  22512. referencedClasses: [],
  22513. //>>excludeEnd("ide");
  22514. messageSends: []
  22515. }),
  22516. $globals.Stream);
  22517. $core.addMethod(
  22518. $core.method({
  22519. selector: "isEmpty",
  22520. protocol: 'testing',
  22521. fn: function (){
  22522. var self=this;
  22523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22524. return $core.withContext(function($ctx1) {
  22525. //>>excludeEnd("ctx");
  22526. var $1;
  22527. $1=$recv(self._size()).__eq((0));
  22528. return $1;
  22529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22530. }, function($ctx1) {$ctx1.fill(self,"isEmpty",{},$globals.Stream)});
  22531. //>>excludeEnd("ctx");
  22532. },
  22533. //>>excludeStart("ide", pragmas.excludeIdeData);
  22534. args: [],
  22535. source: "isEmpty\x0a\x09^ self size = 0",
  22536. referencedClasses: [],
  22537. //>>excludeEnd("ide");
  22538. messageSends: ["=", "size"]
  22539. }),
  22540. $globals.Stream);
  22541. $core.addMethod(
  22542. $core.method({
  22543. selector: "next",
  22544. protocol: 'reading',
  22545. fn: function (){
  22546. var self=this;
  22547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22548. return $core.withContext(function($ctx1) {
  22549. //>>excludeEnd("ctx");
  22550. var $2,$4,$3,$1;
  22551. $2=self._atEnd();
  22552. if($core.assert($2)){
  22553. $1=nil;
  22554. } else {
  22555. $4=self._position();
  22556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22557. $ctx1.sendIdx["position"]=1;
  22558. //>>excludeEnd("ctx");
  22559. $3=$recv($4).__plus((1));
  22560. self._position_($3);
  22561. $1=$recv(self["@collection"])._at_(self._position());
  22562. };
  22563. return $1;
  22564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22565. }, function($ctx1) {$ctx1.fill(self,"next",{},$globals.Stream)});
  22566. //>>excludeEnd("ctx");
  22567. },
  22568. //>>excludeStart("ide", pragmas.excludeIdeData);
  22569. args: [],
  22570. 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 ]",
  22571. referencedClasses: [],
  22572. //>>excludeEnd("ide");
  22573. messageSends: ["ifTrue:ifFalse:", "atEnd", "position:", "+", "position", "at:"]
  22574. }),
  22575. $globals.Stream);
  22576. $core.addMethod(
  22577. $core.method({
  22578. selector: "next:",
  22579. protocol: 'reading',
  22580. fn: function (anInteger){
  22581. var self=this;
  22582. var tempCollection;
  22583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22584. return $core.withContext(function($ctx1) {
  22585. //>>excludeEnd("ctx");
  22586. var $1,$2;
  22587. tempCollection=$recv($recv(self._collection())._class())._new();
  22588. $recv(anInteger)._timesRepeat_((function(){
  22589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22590. return $core.withContext(function($ctx2) {
  22591. //>>excludeEnd("ctx");
  22592. $1=self._atEnd();
  22593. if(!$core.assert($1)){
  22594. return $recv(tempCollection)._add_(self._next());
  22595. };
  22596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22597. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  22598. //>>excludeEnd("ctx");
  22599. }));
  22600. $2=tempCollection;
  22601. return $2;
  22602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22603. }, function($ctx1) {$ctx1.fill(self,"next:",{anInteger:anInteger,tempCollection:tempCollection},$globals.Stream)});
  22604. //>>excludeEnd("ctx");
  22605. },
  22606. //>>excludeStart("ide", pragmas.excludeIdeData);
  22607. args: ["anInteger"],
  22608. 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",
  22609. referencedClasses: [],
  22610. //>>excludeEnd("ide");
  22611. messageSends: ["new", "class", "collection", "timesRepeat:", "ifFalse:", "atEnd", "add:", "next"]
  22612. }),
  22613. $globals.Stream);
  22614. $core.addMethod(
  22615. $core.method({
  22616. selector: "nextPut:",
  22617. protocol: 'writing',
  22618. fn: function (anObject){
  22619. var self=this;
  22620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22621. return $core.withContext(function($ctx1) {
  22622. //>>excludeEnd("ctx");
  22623. var $2,$1,$3,$4;
  22624. $2=self._position();
  22625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22626. $ctx1.sendIdx["position"]=1;
  22627. //>>excludeEnd("ctx");
  22628. $1=$recv($2).__plus((1));
  22629. self._position_($1);
  22630. $3=self._collection();
  22631. $4=self._position();
  22632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22633. $ctx1.sendIdx["position"]=2;
  22634. //>>excludeEnd("ctx");
  22635. $recv($3)._at_put_($4,anObject);
  22636. self._setStreamSize_($recv(self._streamSize())._max_(self._position()));
  22637. return self;
  22638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22639. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{anObject:anObject},$globals.Stream)});
  22640. //>>excludeEnd("ctx");
  22641. },
  22642. //>>excludeStart("ide", pragmas.excludeIdeData);
  22643. args: ["anObject"],
  22644. 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)",
  22645. referencedClasses: [],
  22646. //>>excludeEnd("ide");
  22647. messageSends: ["position:", "+", "position", "at:put:", "collection", "setStreamSize:", "max:", "streamSize"]
  22648. }),
  22649. $globals.Stream);
  22650. $core.addMethod(
  22651. $core.method({
  22652. selector: "nextPutAll:",
  22653. protocol: 'writing',
  22654. fn: function (aCollection){
  22655. var self=this;
  22656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22657. return $core.withContext(function($ctx1) {
  22658. //>>excludeEnd("ctx");
  22659. $recv(aCollection)._do_((function(each){
  22660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22661. return $core.withContext(function($ctx2) {
  22662. //>>excludeEnd("ctx");
  22663. return self._nextPut_(each);
  22664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22665. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  22666. //>>excludeEnd("ctx");
  22667. }));
  22668. return self;
  22669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22670. }, function($ctx1) {$ctx1.fill(self,"nextPutAll:",{aCollection:aCollection},$globals.Stream)});
  22671. //>>excludeEnd("ctx");
  22672. },
  22673. //>>excludeStart("ide", pragmas.excludeIdeData);
  22674. args: ["aCollection"],
  22675. source: "nextPutAll: aCollection\x0a\x09aCollection do: [ :each |\x0a\x09\x09self nextPut: each ]",
  22676. referencedClasses: [],
  22677. //>>excludeEnd("ide");
  22678. messageSends: ["do:", "nextPut:"]
  22679. }),
  22680. $globals.Stream);
  22681. $core.addMethod(
  22682. $core.method({
  22683. selector: "nextPutString:",
  22684. protocol: 'writing',
  22685. fn: function (aString){
  22686. var self=this;
  22687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22688. return $core.withContext(function($ctx1) {
  22689. //>>excludeEnd("ctx");
  22690. self._nextPut_(aString);
  22691. return self;
  22692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22693. }, function($ctx1) {$ctx1.fill(self,"nextPutString:",{aString:aString},$globals.Stream)});
  22694. //>>excludeEnd("ctx");
  22695. },
  22696. //>>excludeStart("ide", pragmas.excludeIdeData);
  22697. args: ["aString"],
  22698. source: "nextPutString: aString\x0a\x09self nextPut: aString",
  22699. referencedClasses: [],
  22700. //>>excludeEnd("ide");
  22701. messageSends: ["nextPut:"]
  22702. }),
  22703. $globals.Stream);
  22704. $core.addMethod(
  22705. $core.method({
  22706. selector: "peek",
  22707. protocol: 'reading',
  22708. fn: function (){
  22709. var self=this;
  22710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22711. return $core.withContext(function($ctx1) {
  22712. //>>excludeEnd("ctx");
  22713. var $2,$1;
  22714. $2=self._atEnd();
  22715. if(!$core.assert($2)){
  22716. $1=$recv(self._collection())._at_($recv(self._position()).__plus((1)));
  22717. };
  22718. return $1;
  22719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22720. }, function($ctx1) {$ctx1.fill(self,"peek",{},$globals.Stream)});
  22721. //>>excludeEnd("ctx");
  22722. },
  22723. //>>excludeStart("ide", pragmas.excludeIdeData);
  22724. args: [],
  22725. source: "peek\x0a\x09^ self atEnd ifFalse: [\x0a\x09\x09self collection at: self position + 1 ]",
  22726. referencedClasses: [],
  22727. //>>excludeEnd("ide");
  22728. messageSends: ["ifFalse:", "atEnd", "at:", "collection", "+", "position"]
  22729. }),
  22730. $globals.Stream);
  22731. $core.addMethod(
  22732. $core.method({
  22733. selector: "position",
  22734. protocol: 'accessing',
  22735. fn: function (){
  22736. var self=this;
  22737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22738. return $core.withContext(function($ctx1) {
  22739. //>>excludeEnd("ctx");
  22740. var $2,$1,$receiver;
  22741. $2=self["@position"];
  22742. if(($receiver = $2) == null || $receiver.isNil){
  22743. self["@position"]=(0);
  22744. $1=self["@position"];
  22745. } else {
  22746. $1=$2;
  22747. };
  22748. return $1;
  22749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22750. }, function($ctx1) {$ctx1.fill(self,"position",{},$globals.Stream)});
  22751. //>>excludeEnd("ctx");
  22752. },
  22753. //>>excludeStart("ide", pragmas.excludeIdeData);
  22754. args: [],
  22755. source: "position\x0a\x09^ position ifNil: [ position := 0 ]",
  22756. referencedClasses: [],
  22757. //>>excludeEnd("ide");
  22758. messageSends: ["ifNil:"]
  22759. }),
  22760. $globals.Stream);
  22761. $core.addMethod(
  22762. $core.method({
  22763. selector: "position:",
  22764. protocol: 'accessing',
  22765. fn: function (anInteger){
  22766. var self=this;
  22767. self["@position"]=anInteger;
  22768. return self;
  22769. },
  22770. //>>excludeStart("ide", pragmas.excludeIdeData);
  22771. args: ["anInteger"],
  22772. source: "position: anInteger\x0a\x09position := anInteger",
  22773. referencedClasses: [],
  22774. //>>excludeEnd("ide");
  22775. messageSends: []
  22776. }),
  22777. $globals.Stream);
  22778. $core.addMethod(
  22779. $core.method({
  22780. selector: "reset",
  22781. protocol: 'actions',
  22782. fn: function (){
  22783. var self=this;
  22784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22785. return $core.withContext(function($ctx1) {
  22786. //>>excludeEnd("ctx");
  22787. self._position_((0));
  22788. return self;
  22789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22790. }, function($ctx1) {$ctx1.fill(self,"reset",{},$globals.Stream)});
  22791. //>>excludeEnd("ctx");
  22792. },
  22793. //>>excludeStart("ide", pragmas.excludeIdeData);
  22794. args: [],
  22795. source: "reset\x0a\x09self position: 0",
  22796. referencedClasses: [],
  22797. //>>excludeEnd("ide");
  22798. messageSends: ["position:"]
  22799. }),
  22800. $globals.Stream);
  22801. $core.addMethod(
  22802. $core.method({
  22803. selector: "resetContents",
  22804. protocol: 'actions',
  22805. fn: function (){
  22806. var self=this;
  22807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22808. return $core.withContext(function($ctx1) {
  22809. //>>excludeEnd("ctx");
  22810. self._reset();
  22811. self._setStreamSize_((0));
  22812. return self;
  22813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22814. }, function($ctx1) {$ctx1.fill(self,"resetContents",{},$globals.Stream)});
  22815. //>>excludeEnd("ctx");
  22816. },
  22817. //>>excludeStart("ide", pragmas.excludeIdeData);
  22818. args: [],
  22819. source: "resetContents\x0a\x09self reset.\x0a\x09self setStreamSize: 0",
  22820. referencedClasses: [],
  22821. //>>excludeEnd("ide");
  22822. messageSends: ["reset", "setStreamSize:"]
  22823. }),
  22824. $globals.Stream);
  22825. $core.addMethod(
  22826. $core.method({
  22827. selector: "setCollection:",
  22828. protocol: 'accessing',
  22829. fn: function (aCollection){
  22830. var self=this;
  22831. self["@collection"]=aCollection;
  22832. return self;
  22833. },
  22834. //>>excludeStart("ide", pragmas.excludeIdeData);
  22835. args: ["aCollection"],
  22836. source: "setCollection: aCollection\x0a\x09collection := aCollection",
  22837. referencedClasses: [],
  22838. //>>excludeEnd("ide");
  22839. messageSends: []
  22840. }),
  22841. $globals.Stream);
  22842. $core.addMethod(
  22843. $core.method({
  22844. selector: "setStreamSize:",
  22845. protocol: 'accessing',
  22846. fn: function (anInteger){
  22847. var self=this;
  22848. self["@streamSize"]=anInteger;
  22849. return self;
  22850. },
  22851. //>>excludeStart("ide", pragmas.excludeIdeData);
  22852. args: ["anInteger"],
  22853. source: "setStreamSize: anInteger\x0a\x09streamSize := anInteger",
  22854. referencedClasses: [],
  22855. //>>excludeEnd("ide");
  22856. messageSends: []
  22857. }),
  22858. $globals.Stream);
  22859. $core.addMethod(
  22860. $core.method({
  22861. selector: "setToEnd",
  22862. protocol: 'positioning',
  22863. fn: function (){
  22864. var self=this;
  22865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22866. return $core.withContext(function($ctx1) {
  22867. //>>excludeEnd("ctx");
  22868. self._position_(self._size());
  22869. return self;
  22870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22871. }, function($ctx1) {$ctx1.fill(self,"setToEnd",{},$globals.Stream)});
  22872. //>>excludeEnd("ctx");
  22873. },
  22874. //>>excludeStart("ide", pragmas.excludeIdeData);
  22875. args: [],
  22876. source: "setToEnd\x0a\x09self position: self size",
  22877. referencedClasses: [],
  22878. //>>excludeEnd("ide");
  22879. messageSends: ["position:", "size"]
  22880. }),
  22881. $globals.Stream);
  22882. $core.addMethod(
  22883. $core.method({
  22884. selector: "size",
  22885. protocol: 'accessing',
  22886. fn: function (){
  22887. var self=this;
  22888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22889. return $core.withContext(function($ctx1) {
  22890. //>>excludeEnd("ctx");
  22891. var $1;
  22892. $1=self._streamSize();
  22893. return $1;
  22894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22895. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Stream)});
  22896. //>>excludeEnd("ctx");
  22897. },
  22898. //>>excludeStart("ide", pragmas.excludeIdeData);
  22899. args: [],
  22900. source: "size\x0a\x09^ self streamSize",
  22901. referencedClasses: [],
  22902. //>>excludeEnd("ide");
  22903. messageSends: ["streamSize"]
  22904. }),
  22905. $globals.Stream);
  22906. $core.addMethod(
  22907. $core.method({
  22908. selector: "skip:",
  22909. protocol: 'positioning',
  22910. fn: function (anInteger){
  22911. var self=this;
  22912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22913. return $core.withContext(function($ctx1) {
  22914. //>>excludeEnd("ctx");
  22915. self._position_($recv($recv(self._position()).__plus(anInteger))._min_max_(self._size(),(0)));
  22916. return self;
  22917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22918. }, function($ctx1) {$ctx1.fill(self,"skip:",{anInteger:anInteger},$globals.Stream)});
  22919. //>>excludeEnd("ctx");
  22920. },
  22921. //>>excludeStart("ide", pragmas.excludeIdeData);
  22922. args: ["anInteger"],
  22923. source: "skip: anInteger\x0a\x09self position: ((self position + anInteger) min: self size max: 0)",
  22924. referencedClasses: [],
  22925. //>>excludeEnd("ide");
  22926. messageSends: ["position:", "min:max:", "+", "position", "size"]
  22927. }),
  22928. $globals.Stream);
  22929. $core.addMethod(
  22930. $core.method({
  22931. selector: "streamSize",
  22932. protocol: 'accessing',
  22933. fn: function (){
  22934. var self=this;
  22935. var $1;
  22936. $1=self["@streamSize"];
  22937. return $1;
  22938. },
  22939. //>>excludeStart("ide", pragmas.excludeIdeData);
  22940. args: [],
  22941. source: "streamSize\x0a\x09^ streamSize",
  22942. referencedClasses: [],
  22943. //>>excludeEnd("ide");
  22944. messageSends: []
  22945. }),
  22946. $globals.Stream);
  22947. $core.addMethod(
  22948. $core.method({
  22949. selector: "write:",
  22950. protocol: 'writing',
  22951. fn: function (anObject){
  22952. var self=this;
  22953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22954. return $core.withContext(function($ctx1) {
  22955. //>>excludeEnd("ctx");
  22956. $recv(anObject)._putOn_(self);
  22957. return self;
  22958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22959. }, function($ctx1) {$ctx1.fill(self,"write:",{anObject:anObject},$globals.Stream)});
  22960. //>>excludeEnd("ctx");
  22961. },
  22962. //>>excludeStart("ide", pragmas.excludeIdeData);
  22963. args: ["anObject"],
  22964. source: "write: anObject\x0a\x09anObject putOn: self",
  22965. referencedClasses: [],
  22966. //>>excludeEnd("ide");
  22967. messageSends: ["putOn:"]
  22968. }),
  22969. $globals.Stream);
  22970. $core.addMethod(
  22971. $core.method({
  22972. selector: "on:",
  22973. protocol: 'instance creation',
  22974. fn: function (aCollection){
  22975. var self=this;
  22976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22977. return $core.withContext(function($ctx1) {
  22978. //>>excludeEnd("ctx");
  22979. var $2,$3,$1;
  22980. $2=self._new();
  22981. $recv($2)._setCollection_(aCollection);
  22982. $recv($2)._setStreamSize_($recv(aCollection)._size());
  22983. $3=$recv($2)._yourself();
  22984. $1=$3;
  22985. return $1;
  22986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22987. }, function($ctx1) {$ctx1.fill(self,"on:",{aCollection:aCollection},$globals.Stream.klass)});
  22988. //>>excludeEnd("ctx");
  22989. },
  22990. //>>excludeStart("ide", pragmas.excludeIdeData);
  22991. args: ["aCollection"],
  22992. source: "on: aCollection\x0a\x09\x09^ self new\x0a\x09\x09setCollection: aCollection;\x0a\x09\x09setStreamSize: aCollection size;\x0a\x09\x09yourself",
  22993. referencedClasses: [],
  22994. //>>excludeEnd("ide");
  22995. messageSends: ["setCollection:", "new", "setStreamSize:", "size", "yourself"]
  22996. }),
  22997. $globals.Stream.klass);
  22998. $core.addClass('StringStream', $globals.Stream, [], 'Kernel-Collections');
  22999. //>>excludeStart("ide", pragmas.excludeIdeData);
  23000. $globals.StringStream.comment="I am a Stream specific to `String` objects.";
  23001. //>>excludeEnd("ide");
  23002. $core.addMethod(
  23003. $core.method({
  23004. selector: "cr",
  23005. protocol: 'writing',
  23006. fn: function (){
  23007. var self=this;
  23008. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  23009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23010. return $core.withContext(function($ctx1) {
  23011. //>>excludeEnd("ctx");
  23012. var $1;
  23013. $1=self._nextPutAll_($recv($String())._cr());
  23014. return $1;
  23015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23016. }, function($ctx1) {$ctx1.fill(self,"cr",{},$globals.StringStream)});
  23017. //>>excludeEnd("ctx");
  23018. },
  23019. //>>excludeStart("ide", pragmas.excludeIdeData);
  23020. args: [],
  23021. source: "cr\x0a\x09^ self nextPutAll: String cr",
  23022. referencedClasses: ["String"],
  23023. //>>excludeEnd("ide");
  23024. messageSends: ["nextPutAll:", "cr"]
  23025. }),
  23026. $globals.StringStream);
  23027. $core.addMethod(
  23028. $core.method({
  23029. selector: "crlf",
  23030. protocol: 'writing',
  23031. fn: function (){
  23032. var self=this;
  23033. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  23034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23035. return $core.withContext(function($ctx1) {
  23036. //>>excludeEnd("ctx");
  23037. var $1;
  23038. $1=self._nextPutAll_($recv($String())._crlf());
  23039. return $1;
  23040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23041. }, function($ctx1) {$ctx1.fill(self,"crlf",{},$globals.StringStream)});
  23042. //>>excludeEnd("ctx");
  23043. },
  23044. //>>excludeStart("ide", pragmas.excludeIdeData);
  23045. args: [],
  23046. source: "crlf\x0a\x09^ self nextPutAll: String crlf",
  23047. referencedClasses: ["String"],
  23048. //>>excludeEnd("ide");
  23049. messageSends: ["nextPutAll:", "crlf"]
  23050. }),
  23051. $globals.StringStream);
  23052. $core.addMethod(
  23053. $core.method({
  23054. selector: "lf",
  23055. protocol: 'writing',
  23056. fn: function (){
  23057. var self=this;
  23058. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  23059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23060. return $core.withContext(function($ctx1) {
  23061. //>>excludeEnd("ctx");
  23062. var $1;
  23063. $1=self._nextPutAll_($recv($String())._lf());
  23064. return $1;
  23065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23066. }, function($ctx1) {$ctx1.fill(self,"lf",{},$globals.StringStream)});
  23067. //>>excludeEnd("ctx");
  23068. },
  23069. //>>excludeStart("ide", pragmas.excludeIdeData);
  23070. args: [],
  23071. source: "lf\x0a\x09^ self nextPutAll: String lf",
  23072. referencedClasses: ["String"],
  23073. //>>excludeEnd("ide");
  23074. messageSends: ["nextPutAll:", "lf"]
  23075. }),
  23076. $globals.StringStream);
  23077. $core.addMethod(
  23078. $core.method({
  23079. selector: "next:",
  23080. protocol: 'reading',
  23081. fn: function (anInteger){
  23082. var self=this;
  23083. var tempCollection;
  23084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23085. return $core.withContext(function($ctx1) {
  23086. //>>excludeEnd("ctx");
  23087. var $1,$2;
  23088. tempCollection=$recv($recv(self._collection())._class())._new();
  23089. $recv(anInteger)._timesRepeat_((function(){
  23090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23091. return $core.withContext(function($ctx2) {
  23092. //>>excludeEnd("ctx");
  23093. $1=self._atEnd();
  23094. if(!$core.assert($1)){
  23095. tempCollection=$recv(tempCollection).__comma(self._next());
  23096. return tempCollection;
  23097. };
  23098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23099. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  23100. //>>excludeEnd("ctx");
  23101. }));
  23102. $2=tempCollection;
  23103. return $2;
  23104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23105. }, function($ctx1) {$ctx1.fill(self,"next:",{anInteger:anInteger,tempCollection:tempCollection},$globals.StringStream)});
  23106. //>>excludeEnd("ctx");
  23107. },
  23108. //>>excludeStart("ide", pragmas.excludeIdeData);
  23109. args: ["anInteger"],
  23110. 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",
  23111. referencedClasses: [],
  23112. //>>excludeEnd("ide");
  23113. messageSends: ["new", "class", "collection", "timesRepeat:", "ifFalse:", "atEnd", ",", "next"]
  23114. }),
  23115. $globals.StringStream);
  23116. $core.addMethod(
  23117. $core.method({
  23118. selector: "nextPut:",
  23119. protocol: 'writing',
  23120. fn: function (aString){
  23121. var self=this;
  23122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23123. return $core.withContext(function($ctx1) {
  23124. //>>excludeEnd("ctx");
  23125. self._nextPutAll_(aString);
  23126. return self;
  23127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23128. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{aString:aString},$globals.StringStream)});
  23129. //>>excludeEnd("ctx");
  23130. },
  23131. //>>excludeStart("ide", pragmas.excludeIdeData);
  23132. args: ["aString"],
  23133. source: "nextPut: aString\x0a\x09self nextPutAll: aString",
  23134. referencedClasses: [],
  23135. //>>excludeEnd("ide");
  23136. messageSends: ["nextPutAll:"]
  23137. }),
  23138. $globals.StringStream);
  23139. $core.addMethod(
  23140. $core.method({
  23141. selector: "nextPutAll:",
  23142. protocol: 'writing',
  23143. fn: function (aString){
  23144. var self=this;
  23145. var pre,post;
  23146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23147. return $core.withContext(function($ctx1) {
  23148. //>>excludeEnd("ctx");
  23149. var $1,$3,$2,$4,$5,$6,$9,$8,$10,$7,$11,$12,$14,$13;
  23150. $1=self._atEnd();
  23151. if($core.assert($1)){
  23152. $3=self._collection();
  23153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23154. $ctx1.sendIdx["collection"]=1;
  23155. //>>excludeEnd("ctx");
  23156. $2=$recv($3).__comma(aString);
  23157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23158. $ctx1.sendIdx[","]=1;
  23159. //>>excludeEnd("ctx");
  23160. self._setCollection_($2);
  23161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23162. $ctx1.sendIdx["setCollection:"]=1;
  23163. //>>excludeEnd("ctx");
  23164. } else {
  23165. $4=self._collection();
  23166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23167. $ctx1.sendIdx["collection"]=2;
  23168. //>>excludeEnd("ctx");
  23169. $5=self._position();
  23170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23171. $ctx1.sendIdx["position"]=1;
  23172. //>>excludeEnd("ctx");
  23173. pre=$recv($4)._copyFrom_to_((1),$5);
  23174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23175. $ctx1.sendIdx["copyFrom:to:"]=1;
  23176. //>>excludeEnd("ctx");
  23177. pre;
  23178. $6=self._collection();
  23179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23180. $ctx1.sendIdx["collection"]=3;
  23181. //>>excludeEnd("ctx");
  23182. $9=self._position();
  23183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23184. $ctx1.sendIdx["position"]=2;
  23185. //>>excludeEnd("ctx");
  23186. $8=$recv($9).__plus((1));
  23187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23188. $ctx1.sendIdx["+"]=2;
  23189. //>>excludeEnd("ctx");
  23190. $10=$recv(aString)._size();
  23191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23192. $ctx1.sendIdx["size"]=1;
  23193. //>>excludeEnd("ctx");
  23194. $7=$recv($8).__plus($10);
  23195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23196. $ctx1.sendIdx["+"]=1;
  23197. //>>excludeEnd("ctx");
  23198. $11=$recv(self._collection())._size();
  23199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23200. $ctx1.sendIdx["size"]=2;
  23201. //>>excludeEnd("ctx");
  23202. post=$recv($6)._copyFrom_to_($7,$11);
  23203. post;
  23204. $12=$recv($recv(pre).__comma(aString)).__comma(post);
  23205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23206. $ctx1.sendIdx[","]=2;
  23207. //>>excludeEnd("ctx");
  23208. self._setCollection_($12);
  23209. };
  23210. $14=self._position();
  23211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23212. $ctx1.sendIdx["position"]=3;
  23213. //>>excludeEnd("ctx");
  23214. $13=$recv($14).__plus($recv(aString)._size());
  23215. self._position_($13);
  23216. self._setStreamSize_($recv(self._streamSize())._max_(self._position()));
  23217. return self;
  23218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23219. }, function($ctx1) {$ctx1.fill(self,"nextPutAll:",{aString:aString,pre:pre,post:post},$globals.StringStream)});
  23220. //>>excludeEnd("ctx");
  23221. },
  23222. //>>excludeStart("ide", pragmas.excludeIdeData);
  23223. args: ["aString"],
  23224. 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)",
  23225. referencedClasses: [],
  23226. //>>excludeEnd("ide");
  23227. messageSends: ["ifTrue:ifFalse:", "atEnd", "setCollection:", ",", "collection", "copyFrom:to:", "position", "+", "size", "position:", "setStreamSize:", "max:", "streamSize"]
  23228. }),
  23229. $globals.StringStream);
  23230. $core.addMethod(
  23231. $core.method({
  23232. selector: "nextPutString:",
  23233. protocol: 'writing',
  23234. fn: function (aString){
  23235. var self=this;
  23236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23237. return $core.withContext(function($ctx1) {
  23238. //>>excludeEnd("ctx");
  23239. self._nextPutAll_(aString);
  23240. return self;
  23241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23242. }, function($ctx1) {$ctx1.fill(self,"nextPutString:",{aString:aString},$globals.StringStream)});
  23243. //>>excludeEnd("ctx");
  23244. },
  23245. //>>excludeStart("ide", pragmas.excludeIdeData);
  23246. args: ["aString"],
  23247. source: "nextPutString: aString\x0a\x09self nextPutAll: aString",
  23248. referencedClasses: [],
  23249. //>>excludeEnd("ide");
  23250. messageSends: ["nextPutAll:"]
  23251. }),
  23252. $globals.StringStream);
  23253. $core.addMethod(
  23254. $core.method({
  23255. selector: "space",
  23256. protocol: 'writing',
  23257. fn: function (){
  23258. var self=this;
  23259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23260. return $core.withContext(function($ctx1) {
  23261. //>>excludeEnd("ctx");
  23262. self._nextPut_(" ");
  23263. return self;
  23264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23265. }, function($ctx1) {$ctx1.fill(self,"space",{},$globals.StringStream)});
  23266. //>>excludeEnd("ctx");
  23267. },
  23268. //>>excludeStart("ide", pragmas.excludeIdeData);
  23269. args: [],
  23270. source: "space\x0a\x09self nextPut: ' '",
  23271. referencedClasses: [],
  23272. //>>excludeEnd("ide");
  23273. messageSends: ["nextPut:"]
  23274. }),
  23275. $globals.StringStream);
  23276. $core.addMethod(
  23277. $core.method({
  23278. selector: "tab",
  23279. protocol: 'writing',
  23280. fn: function (){
  23281. var self=this;
  23282. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  23283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23284. return $core.withContext(function($ctx1) {
  23285. //>>excludeEnd("ctx");
  23286. var $1;
  23287. $1=self._nextPutAll_($recv($String())._tab());
  23288. return $1;
  23289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23290. }, function($ctx1) {$ctx1.fill(self,"tab",{},$globals.StringStream)});
  23291. //>>excludeEnd("ctx");
  23292. },
  23293. //>>excludeStart("ide", pragmas.excludeIdeData);
  23294. args: [],
  23295. source: "tab\x0a\x09^ self nextPutAll: String tab",
  23296. referencedClasses: ["String"],
  23297. //>>excludeEnd("ide");
  23298. messageSends: ["nextPutAll:", "tab"]
  23299. }),
  23300. $globals.StringStream);
  23301. });
  23302. define("amber_core/Kernel-Infrastructure", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Collections"], function($boot){
  23303. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  23304. $core.addPackage('Kernel-Infrastructure');
  23305. $core.packages["Kernel-Infrastructure"].innerEval = function (expr) { return eval(expr); };
  23306. $core.packages["Kernel-Infrastructure"].transport = {"type":"amd","amdNamespace":"amber_core"};
  23307. $core.addClass('JSObjectProxy', $globals.ProtoObject, ['jsObject'], 'Kernel-Infrastructure');
  23308. //>>excludeStart("ide", pragmas.excludeIdeData);
  23309. $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`.";
  23310. //>>excludeEnd("ide");
  23311. $core.addMethod(
  23312. $core.method({
  23313. selector: "=",
  23314. protocol: 'comparing',
  23315. fn: function (anObject){
  23316. var self=this;
  23317. function $JSObjectProxy(){return $globals.JSObjectProxy||(typeof JSObjectProxy=="undefined"?nil:JSObjectProxy)}
  23318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23319. return $core.withContext(function($ctx1) {
  23320. //>>excludeEnd("ctx");
  23321. var $2,$1,$3;
  23322. $2=$recv(anObject)._class();
  23323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23324. $ctx1.sendIdx["class"]=1;
  23325. //>>excludeEnd("ctx");
  23326. $1=$recv($2).__eq_eq(self._class());
  23327. if(!$core.assert($1)){
  23328. return false;
  23329. };
  23330. $3=$recv($JSObjectProxy())._compareJSObjectOfProxy_withProxy_(self,anObject);
  23331. return $3;
  23332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23333. }, function($ctx1) {$ctx1.fill(self,"=",{anObject:anObject},$globals.JSObjectProxy)});
  23334. //>>excludeEnd("ctx");
  23335. },
  23336. //>>excludeStart("ide", pragmas.excludeIdeData);
  23337. args: ["anObject"],
  23338. source: "= anObject\x0a\x09anObject class == self class ifFalse: [ ^ false ].\x0a\x09^ JSObjectProxy compareJSObjectOfProxy: self withProxy: anObject",
  23339. referencedClasses: ["JSObjectProxy"],
  23340. //>>excludeEnd("ide");
  23341. messageSends: ["ifFalse:", "==", "class", "compareJSObjectOfProxy:withProxy:"]
  23342. }),
  23343. $globals.JSObjectProxy);
  23344. $core.addMethod(
  23345. $core.method({
  23346. selector: "asJSON",
  23347. protocol: 'enumerating',
  23348. fn: function (){
  23349. var self=this;
  23350. var $1;
  23351. $1=self["@jsObject"];
  23352. return $1;
  23353. },
  23354. //>>excludeStart("ide", pragmas.excludeIdeData);
  23355. args: [],
  23356. source: "asJSON\x0a\x09\x22Answers the receiver in a stringyfy-friendly fashion\x22\x0a\x0a\x09^ jsObject",
  23357. referencedClasses: [],
  23358. //>>excludeEnd("ide");
  23359. messageSends: []
  23360. }),
  23361. $globals.JSObjectProxy);
  23362. $core.addMethod(
  23363. $core.method({
  23364. selector: "at:",
  23365. protocol: 'accessing',
  23366. fn: function (aString){
  23367. var self=this;
  23368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23369. return $core.withContext(function($ctx1) {
  23370. //>>excludeEnd("ctx");
  23371. return self['@jsObject'][aString];
  23372. return self;
  23373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23374. }, function($ctx1) {$ctx1.fill(self,"at:",{aString:aString},$globals.JSObjectProxy)});
  23375. //>>excludeEnd("ctx");
  23376. },
  23377. //>>excludeStart("ide", pragmas.excludeIdeData);
  23378. args: ["aString"],
  23379. source: "at: aString\x0a\x09<return self['@jsObject'][aString]>",
  23380. referencedClasses: [],
  23381. //>>excludeEnd("ide");
  23382. messageSends: []
  23383. }),
  23384. $globals.JSObjectProxy);
  23385. $core.addMethod(
  23386. $core.method({
  23387. selector: "at:ifAbsent:",
  23388. protocol: 'accessing',
  23389. fn: function (aString,aBlock){
  23390. var self=this;
  23391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23392. return $core.withContext(function($ctx1) {
  23393. //>>excludeEnd("ctx");
  23394. var obj = self['@jsObject'];
  23395. return aString in obj ? obj[aString] : aBlock._value();
  23396. ;
  23397. return self;
  23398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23399. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aString:aString,aBlock:aBlock},$globals.JSObjectProxy)});
  23400. //>>excludeEnd("ctx");
  23401. },
  23402. //>>excludeStart("ide", pragmas.excludeIdeData);
  23403. args: ["aString", "aBlock"],
  23404. 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>",
  23405. referencedClasses: [],
  23406. //>>excludeEnd("ide");
  23407. messageSends: []
  23408. }),
  23409. $globals.JSObjectProxy);
  23410. $core.addMethod(
  23411. $core.method({
  23412. selector: "at:ifPresent:",
  23413. protocol: 'accessing',
  23414. fn: function (aString,aBlock){
  23415. var self=this;
  23416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23417. return $core.withContext(function($ctx1) {
  23418. //>>excludeEnd("ctx");
  23419. var obj = self['@jsObject'];
  23420. return aString in obj ? aBlock._value_(obj[aString]) : nil;
  23421. ;
  23422. return self;
  23423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23424. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:",{aString:aString,aBlock:aBlock},$globals.JSObjectProxy)});
  23425. //>>excludeEnd("ctx");
  23426. },
  23427. //>>excludeStart("ide", pragmas.excludeIdeData);
  23428. args: ["aString", "aBlock"],
  23429. 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>",
  23430. referencedClasses: [],
  23431. //>>excludeEnd("ide");
  23432. messageSends: []
  23433. }),
  23434. $globals.JSObjectProxy);
  23435. $core.addMethod(
  23436. $core.method({
  23437. selector: "at:ifPresent:ifAbsent:",
  23438. protocol: 'accessing',
  23439. fn: function (aString,aBlock,anotherBlock){
  23440. var self=this;
  23441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23442. return $core.withContext(function($ctx1) {
  23443. //>>excludeEnd("ctx");
  23444. var obj = self['@jsObject'];
  23445. return aString in obj ? aBlock._value_(obj[aString]) : anotherBlock._value();
  23446. ;
  23447. return self;
  23448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23449. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{aString:aString,aBlock:aBlock,anotherBlock:anotherBlock},$globals.JSObjectProxy)});
  23450. //>>excludeEnd("ctx");
  23451. },
  23452. //>>excludeStart("ide", pragmas.excludeIdeData);
  23453. args: ["aString", "aBlock", "anotherBlock"],
  23454. 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>",
  23455. referencedClasses: [],
  23456. //>>excludeEnd("ide");
  23457. messageSends: []
  23458. }),
  23459. $globals.JSObjectProxy);
  23460. $core.addMethod(
  23461. $core.method({
  23462. selector: "at:put:",
  23463. protocol: 'accessing',
  23464. fn: function (aString,anObject){
  23465. var self=this;
  23466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23467. return $core.withContext(function($ctx1) {
  23468. //>>excludeEnd("ctx");
  23469. return self['@jsObject'][aString] = anObject;
  23470. return self;
  23471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23472. }, function($ctx1) {$ctx1.fill(self,"at:put:",{aString:aString,anObject:anObject},$globals.JSObjectProxy)});
  23473. //>>excludeEnd("ctx");
  23474. },
  23475. //>>excludeStart("ide", pragmas.excludeIdeData);
  23476. args: ["aString", "anObject"],
  23477. source: "at: aString put: anObject\x0a\x09<return self['@jsObject'][aString] = anObject>",
  23478. referencedClasses: [],
  23479. //>>excludeEnd("ide");
  23480. messageSends: []
  23481. }),
  23482. $globals.JSObjectProxy);
  23483. $core.addMethod(
  23484. $core.method({
  23485. selector: "doesNotUnderstand:",
  23486. protocol: 'proxy',
  23487. fn: function (aMessage){
  23488. var self=this;
  23489. function $JSObjectProxy(){return $globals.JSObjectProxy||(typeof JSObjectProxy=="undefined"?nil:JSObjectProxy)}
  23490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23491. return $core.withContext(function($ctx1) {
  23492. //>>excludeEnd("ctx");
  23493. var $2,$1,$receiver;
  23494. $2=$recv($JSObjectProxy())._lookupProperty_ofProxy_($recv($recv(aMessage)._selector())._asJavaScriptPropertyName(),self);
  23495. if(($receiver = $2) == null || $receiver.isNil){
  23496. $1=(
  23497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23498. $ctx1.supercall = true,
  23499. //>>excludeEnd("ctx");
  23500. $globals.JSObjectProxy.superclass.fn.prototype._doesNotUnderstand_.apply($recv(self), [aMessage]));
  23501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23502. $ctx1.supercall = false;
  23503. //>>excludeEnd("ctx");;
  23504. } else {
  23505. var jsSelector;
  23506. jsSelector=$receiver;
  23507. $1=$recv($JSObjectProxy())._forwardMessage_withArguments_ofProxy_(jsSelector,$recv(aMessage)._arguments(),self);
  23508. };
  23509. return $1;
  23510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23511. }, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage},$globals.JSObjectProxy)});
  23512. //>>excludeEnd("ctx");
  23513. },
  23514. //>>excludeStart("ide", pragmas.excludeIdeData);
  23515. args: ["aMessage"],
  23516. source: "doesNotUnderstand: aMessage\x0a\x09^ (JSObjectProxy lookupProperty: aMessage selector asJavaScriptPropertyName ofProxy: self)\x0a\x09\x09ifNil: [ super doesNotUnderstand: aMessage ]\x0a\x09\x09ifNotNil: [ :jsSelector | \x0a\x09\x09\x09JSObjectProxy \x0a\x09\x09\x09\x09forwardMessage: jsSelector \x0a\x09\x09\x09\x09withArguments: aMessage arguments\x0a\x09\x09\x09\x09ofProxy: self ]",
  23517. referencedClasses: ["JSObjectProxy"],
  23518. //>>excludeEnd("ide");
  23519. messageSends: ["ifNil:ifNotNil:", "lookupProperty:ofProxy:", "asJavaScriptPropertyName", "selector", "doesNotUnderstand:", "forwardMessage:withArguments:ofProxy:", "arguments"]
  23520. }),
  23521. $globals.JSObjectProxy);
  23522. $core.addMethod(
  23523. $core.method({
  23524. selector: "inspectOn:",
  23525. protocol: 'proxy',
  23526. fn: function (anInspector){
  23527. var self=this;
  23528. var variables;
  23529. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  23530. function $JSObjectProxy(){return $globals.JSObjectProxy||(typeof JSObjectProxy=="undefined"?nil:JSObjectProxy)}
  23531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23532. return $core.withContext(function($ctx1) {
  23533. //>>excludeEnd("ctx");
  23534. variables=$recv($Dictionary())._new();
  23535. $recv(variables)._at_put_("#self",self._jsObject());
  23536. $recv(anInspector)._setLabel_(self._printString());
  23537. $recv($JSObjectProxy())._addObjectVariablesTo_ofProxy_(variables,self);
  23538. $recv(anInspector)._setVariables_(variables);
  23539. return self;
  23540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23541. }, function($ctx1) {$ctx1.fill(self,"inspectOn:",{anInspector:anInspector,variables:variables},$globals.JSObjectProxy)});
  23542. //>>excludeEnd("ctx");
  23543. },
  23544. //>>excludeStart("ide", pragmas.excludeIdeData);
  23545. args: ["anInspector"],
  23546. source: "inspectOn: anInspector\x0a\x09| variables |\x0a\x09variables := Dictionary new.\x0a\x09variables at: '#self' put: self jsObject.\x0a\x09anInspector setLabel: self printString.\x0a\x09JSObjectProxy addObjectVariablesTo: variables ofProxy: self.\x0a\x09anInspector setVariables: variables",
  23547. referencedClasses: ["Dictionary", "JSObjectProxy"],
  23548. //>>excludeEnd("ide");
  23549. messageSends: ["new", "at:put:", "jsObject", "setLabel:", "printString", "addObjectVariablesTo:ofProxy:", "setVariables:"]
  23550. }),
  23551. $globals.JSObjectProxy);
  23552. $core.addMethod(
  23553. $core.method({
  23554. selector: "jsObject",
  23555. protocol: 'accessing',
  23556. fn: function (){
  23557. var self=this;
  23558. var $1;
  23559. $1=self["@jsObject"];
  23560. return $1;
  23561. },
  23562. //>>excludeStart("ide", pragmas.excludeIdeData);
  23563. args: [],
  23564. source: "jsObject\x0a\x09^ jsObject",
  23565. referencedClasses: [],
  23566. //>>excludeEnd("ide");
  23567. messageSends: []
  23568. }),
  23569. $globals.JSObjectProxy);
  23570. $core.addMethod(
  23571. $core.method({
  23572. selector: "keysAndValuesDo:",
  23573. protocol: 'enumerating',
  23574. fn: function (aBlock){
  23575. var self=this;
  23576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23577. return $core.withContext(function($ctx1) {
  23578. //>>excludeEnd("ctx");
  23579. var o = self['@jsObject'];
  23580. for(var i in o) {
  23581. aBlock._value_value_(i, o[i]);
  23582. }
  23583. ;
  23584. return self;
  23585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23586. }, function($ctx1) {$ctx1.fill(self,"keysAndValuesDo:",{aBlock:aBlock},$globals.JSObjectProxy)});
  23587. //>>excludeEnd("ctx");
  23588. },
  23589. //>>excludeStart("ide", pragmas.excludeIdeData);
  23590. args: ["aBlock"],
  23591. 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>",
  23592. referencedClasses: [],
  23593. //>>excludeEnd("ide");
  23594. messageSends: []
  23595. }),
  23596. $globals.JSObjectProxy);
  23597. $core.addMethod(
  23598. $core.method({
  23599. selector: "printOn:",
  23600. protocol: 'printing',
  23601. fn: function (aStream){
  23602. var self=this;
  23603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23604. return $core.withContext(function($ctx1) {
  23605. //>>excludeEnd("ctx");
  23606. $recv(aStream)._nextPutAll_(self._printString());
  23607. return self;
  23608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23609. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.JSObjectProxy)});
  23610. //>>excludeEnd("ctx");
  23611. },
  23612. //>>excludeStart("ide", pragmas.excludeIdeData);
  23613. args: ["aStream"],
  23614. source: "printOn: aStream\x0a\x09aStream nextPutAll: self printString",
  23615. referencedClasses: [],
  23616. //>>excludeEnd("ide");
  23617. messageSends: ["nextPutAll:", "printString"]
  23618. }),
  23619. $globals.JSObjectProxy);
  23620. $core.addMethod(
  23621. $core.method({
  23622. selector: "printString",
  23623. protocol: 'printing',
  23624. fn: function (){
  23625. var self=this;
  23626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23627. return $core.withContext(function($ctx1) {
  23628. //>>excludeEnd("ctx");
  23629. var js = self['@jsObject'];
  23630. return js.toString
  23631. ? js.toString()
  23632. : Object.prototype.toString.call(js)
  23633. ;
  23634. return self;
  23635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23636. }, function($ctx1) {$ctx1.fill(self,"printString",{},$globals.JSObjectProxy)});
  23637. //>>excludeEnd("ctx");
  23638. },
  23639. //>>excludeStart("ide", pragmas.excludeIdeData);
  23640. args: [],
  23641. 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>",
  23642. referencedClasses: [],
  23643. //>>excludeEnd("ide");
  23644. messageSends: []
  23645. }),
  23646. $globals.JSObjectProxy);
  23647. $core.addMethod(
  23648. $core.method({
  23649. selector: "addObjectVariablesTo:ofProxy:",
  23650. protocol: 'proxy',
  23651. fn: function (aDictionary,aProxy){
  23652. var self=this;
  23653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23654. return $core.withContext(function($ctx1) {
  23655. //>>excludeEnd("ctx");
  23656. var jsObject = aProxy['@jsObject'];
  23657. for(var i in jsObject) {
  23658. aDictionary._at_put_(i, jsObject[i]);
  23659. }
  23660. ;
  23661. return self;
  23662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23663. }, function($ctx1) {$ctx1.fill(self,"addObjectVariablesTo:ofProxy:",{aDictionary:aDictionary,aProxy:aProxy},$globals.JSObjectProxy.klass)});
  23664. //>>excludeEnd("ctx");
  23665. },
  23666. //>>excludeStart("ide", pragmas.excludeIdeData);
  23667. args: ["aDictionary", "aProxy"],
  23668. source: "addObjectVariablesTo: aDictionary ofProxy: aProxy\x0a\x09<\x0a\x09\x09var jsObject = aProxy['@jsObject'];\x0a\x09\x09for(var i in jsObject) {\x0a\x09\x09\x09aDictionary._at_put_(i, jsObject[i]);\x0a\x09\x09}\x0a\x09>",
  23669. referencedClasses: [],
  23670. //>>excludeEnd("ide");
  23671. messageSends: []
  23672. }),
  23673. $globals.JSObjectProxy.klass);
  23674. $core.addMethod(
  23675. $core.method({
  23676. selector: "compareJSObjectOfProxy:withProxy:",
  23677. protocol: 'proxy',
  23678. fn: function (aProxy,anotherProxy){
  23679. var self=this;
  23680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23681. return $core.withContext(function($ctx1) {
  23682. //>>excludeEnd("ctx");
  23683. var anotherJSObject = anotherProxy.klass ? anotherProxy["@jsObject"] : anotherProxy;
  23684. return aProxy["@jsObject"] === anotherJSObject;
  23685. return self;
  23686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23687. }, function($ctx1) {$ctx1.fill(self,"compareJSObjectOfProxy:withProxy:",{aProxy:aProxy,anotherProxy:anotherProxy},$globals.JSObjectProxy.klass)});
  23688. //>>excludeEnd("ctx");
  23689. },
  23690. //>>excludeStart("ide", pragmas.excludeIdeData);
  23691. args: ["aProxy", "anotherProxy"],
  23692. source: "compareJSObjectOfProxy: aProxy withProxy: anotherProxy\x0a<\x0a\x09var anotherJSObject = anotherProxy.klass ? anotherProxy[\x22@jsObject\x22] : anotherProxy;\x0a\x09return aProxy[\x22@jsObject\x22] === anotherJSObject\x0a>",
  23693. referencedClasses: [],
  23694. //>>excludeEnd("ide");
  23695. messageSends: []
  23696. }),
  23697. $globals.JSObjectProxy.klass);
  23698. $core.addMethod(
  23699. $core.method({
  23700. selector: "forwardMessage:withArguments:ofProxy:",
  23701. protocol: 'proxy',
  23702. fn: function (aString,anArray,aProxy){
  23703. var self=this;
  23704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23705. return $core.withContext(function($ctx1) {
  23706. //>>excludeEnd("ctx");
  23707. return $core.accessJavaScript(aProxy._jsObject(), aString, anArray);
  23708. ;
  23709. return self;
  23710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23711. }, function($ctx1) {$ctx1.fill(self,"forwardMessage:withArguments:ofProxy:",{aString:aString,anArray:anArray,aProxy:aProxy},$globals.JSObjectProxy.klass)});
  23712. //>>excludeEnd("ctx");
  23713. },
  23714. //>>excludeStart("ide", pragmas.excludeIdeData);
  23715. args: ["aString", "anArray", "aProxy"],
  23716. source: "forwardMessage: aString withArguments: anArray ofProxy: aProxy\x0a\x09<\x0a\x09\x09return $core.accessJavaScript(aProxy._jsObject(), aString, anArray);\x0a\x09>",
  23717. referencedClasses: [],
  23718. //>>excludeEnd("ide");
  23719. messageSends: []
  23720. }),
  23721. $globals.JSObjectProxy.klass);
  23722. $core.addMethod(
  23723. $core.method({
  23724. selector: "jsObject:ofProxy:",
  23725. protocol: 'proxy',
  23726. fn: function (aJSObject,aProxy){
  23727. var self=this;
  23728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23729. return $core.withContext(function($ctx1) {
  23730. //>>excludeEnd("ctx");
  23731. aProxy['@jsObject'] = aJSObject;
  23732. return self;
  23733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23734. }, function($ctx1) {$ctx1.fill(self,"jsObject:ofProxy:",{aJSObject:aJSObject,aProxy:aProxy},$globals.JSObjectProxy.klass)});
  23735. //>>excludeEnd("ctx");
  23736. },
  23737. //>>excludeStart("ide", pragmas.excludeIdeData);
  23738. args: ["aJSObject", "aProxy"],
  23739. source: "jsObject: aJSObject ofProxy: aProxy\x0a\x09<aProxy['@jsObject'] = aJSObject>",
  23740. referencedClasses: [],
  23741. //>>excludeEnd("ide");
  23742. messageSends: []
  23743. }),
  23744. $globals.JSObjectProxy.klass);
  23745. $core.addMethod(
  23746. $core.method({
  23747. selector: "lookupProperty:ofProxy:",
  23748. protocol: 'proxy',
  23749. fn: function (aString,aProxy){
  23750. var self=this;
  23751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23752. return $core.withContext(function($ctx1) {
  23753. //>>excludeEnd("ctx");
  23754. return aString in aProxy._jsObject() ? aString : nil;
  23755. return self;
  23756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23757. }, function($ctx1) {$ctx1.fill(self,"lookupProperty:ofProxy:",{aString:aString,aProxy:aProxy},$globals.JSObjectProxy.klass)});
  23758. //>>excludeEnd("ctx");
  23759. },
  23760. //>>excludeStart("ide", pragmas.excludeIdeData);
  23761. args: ["aString", "aProxy"],
  23762. source: "lookupProperty: aString ofProxy: aProxy\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 aProxy._jsObject() ? aString : nil>",
  23763. referencedClasses: [],
  23764. //>>excludeEnd("ide");
  23765. messageSends: []
  23766. }),
  23767. $globals.JSObjectProxy.klass);
  23768. $core.addMethod(
  23769. $core.method({
  23770. selector: "on:",
  23771. protocol: 'instance creation',
  23772. fn: function (aJSObject){
  23773. var self=this;
  23774. var instance;
  23775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23776. return $core.withContext(function($ctx1) {
  23777. //>>excludeEnd("ctx");
  23778. var $1;
  23779. instance=self._new();
  23780. self._jsObject_ofProxy_(aJSObject,instance);
  23781. $1=instance;
  23782. return $1;
  23783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23784. }, function($ctx1) {$ctx1.fill(self,"on:",{aJSObject:aJSObject,instance:instance},$globals.JSObjectProxy.klass)});
  23785. //>>excludeEnd("ctx");
  23786. },
  23787. //>>excludeStart("ide", pragmas.excludeIdeData);
  23788. args: ["aJSObject"],
  23789. source: "on: aJSObject\x0a\x09| instance |\x0a\x09instance := self new.\x0a\x09self jsObject: aJSObject ofProxy: instance.\x0a\x09^ instance",
  23790. referencedClasses: [],
  23791. //>>excludeEnd("ide");
  23792. messageSends: ["new", "jsObject:ofProxy:"]
  23793. }),
  23794. $globals.JSObjectProxy.klass);
  23795. $core.addClass('Organizer', $globals.Object, [], 'Kernel-Infrastructure');
  23796. //>>excludeStart("ide", pragmas.excludeIdeData);
  23797. $globals.Organizer.comment="I represent categorization information. \x0a\x0a## API\x0a\x0aUse `#addElement:` and `#removeElement:` to manipulate instances.";
  23798. //>>excludeEnd("ide");
  23799. $core.addMethod(
  23800. $core.method({
  23801. selector: "addElement:",
  23802. protocol: 'accessing',
  23803. fn: function (anObject){
  23804. var self=this;
  23805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23806. return $core.withContext(function($ctx1) {
  23807. //>>excludeEnd("ctx");
  23808. self.elements.addElement(anObject);
  23809. return self;
  23810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23811. }, function($ctx1) {$ctx1.fill(self,"addElement:",{anObject:anObject},$globals.Organizer)});
  23812. //>>excludeEnd("ctx");
  23813. },
  23814. //>>excludeStart("ide", pragmas.excludeIdeData);
  23815. args: ["anObject"],
  23816. source: "addElement: anObject\x0a\x09<self.elements.addElement(anObject)>",
  23817. referencedClasses: [],
  23818. //>>excludeEnd("ide");
  23819. messageSends: []
  23820. }),
  23821. $globals.Organizer);
  23822. $core.addMethod(
  23823. $core.method({
  23824. selector: "elements",
  23825. protocol: 'accessing',
  23826. fn: function (){
  23827. var self=this;
  23828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23829. return $core.withContext(function($ctx1) {
  23830. //>>excludeEnd("ctx");
  23831. var $1;
  23832. $1=$recv(self._basicAt_("elements"))._copy();
  23833. return $1;
  23834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23835. }, function($ctx1) {$ctx1.fill(self,"elements",{},$globals.Organizer)});
  23836. //>>excludeEnd("ctx");
  23837. },
  23838. //>>excludeStart("ide", pragmas.excludeIdeData);
  23839. args: [],
  23840. source: "elements\x0a\x09^ (self basicAt: 'elements') copy",
  23841. referencedClasses: [],
  23842. //>>excludeEnd("ide");
  23843. messageSends: ["copy", "basicAt:"]
  23844. }),
  23845. $globals.Organizer);
  23846. $core.addMethod(
  23847. $core.method({
  23848. selector: "removeElement:",
  23849. protocol: 'accessing',
  23850. fn: function (anObject){
  23851. var self=this;
  23852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23853. return $core.withContext(function($ctx1) {
  23854. //>>excludeEnd("ctx");
  23855. self.elements.removeElement(anObject);
  23856. return self;
  23857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23858. }, function($ctx1) {$ctx1.fill(self,"removeElement:",{anObject:anObject},$globals.Organizer)});
  23859. //>>excludeEnd("ctx");
  23860. },
  23861. //>>excludeStart("ide", pragmas.excludeIdeData);
  23862. args: ["anObject"],
  23863. source: "removeElement: anObject\x0a\x09<self.elements.removeElement(anObject)>",
  23864. referencedClasses: [],
  23865. //>>excludeEnd("ide");
  23866. messageSends: []
  23867. }),
  23868. $globals.Organizer);
  23869. $core.addClass('ClassOrganizer', $globals.Organizer, [], 'Kernel-Infrastructure');
  23870. //>>excludeStart("ide", pragmas.excludeIdeData);
  23871. $globals.ClassOrganizer.comment="I am an organizer specific to classes. I hold method categorization information for classes.";
  23872. //>>excludeEnd("ide");
  23873. $core.addMethod(
  23874. $core.method({
  23875. selector: "addElement:",
  23876. protocol: 'accessing',
  23877. fn: function (aString){
  23878. var self=this;
  23879. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  23880. function $ProtocolAdded(){return $globals.ProtocolAdded||(typeof ProtocolAdded=="undefined"?nil:ProtocolAdded)}
  23881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23882. return $core.withContext(function($ctx1) {
  23883. //>>excludeEnd("ctx");
  23884. var $1,$2;
  23885. (
  23886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23887. $ctx1.supercall = true,
  23888. //>>excludeEnd("ctx");
  23889. $globals.ClassOrganizer.superclass.fn.prototype._addElement_.apply($recv(self), [aString]));
  23890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23891. $ctx1.supercall = false;
  23892. //>>excludeEnd("ctx");;
  23893. $1=$recv($ProtocolAdded())._new();
  23894. $recv($1)._protocol_(aString);
  23895. $recv($1)._theClass_(self._theClass());
  23896. $2=$recv($1)._yourself();
  23897. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  23898. return self;
  23899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23900. }, function($ctx1) {$ctx1.fill(self,"addElement:",{aString:aString},$globals.ClassOrganizer)});
  23901. //>>excludeEnd("ctx");
  23902. },
  23903. //>>excludeStart("ide", pragmas.excludeIdeData);
  23904. args: ["aString"],
  23905. 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)",
  23906. referencedClasses: ["SystemAnnouncer", "ProtocolAdded"],
  23907. //>>excludeEnd("ide");
  23908. messageSends: ["addElement:", "announce:", "current", "protocol:", "new", "theClass:", "theClass", "yourself"]
  23909. }),
  23910. $globals.ClassOrganizer);
  23911. $core.addMethod(
  23912. $core.method({
  23913. selector: "removeElement:",
  23914. protocol: 'accessing',
  23915. fn: function (aString){
  23916. var self=this;
  23917. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  23918. function $ProtocolRemoved(){return $globals.ProtocolRemoved||(typeof ProtocolRemoved=="undefined"?nil:ProtocolRemoved)}
  23919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23920. return $core.withContext(function($ctx1) {
  23921. //>>excludeEnd("ctx");
  23922. var $1,$2;
  23923. (
  23924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23925. $ctx1.supercall = true,
  23926. //>>excludeEnd("ctx");
  23927. $globals.ClassOrganizer.superclass.fn.prototype._removeElement_.apply($recv(self), [aString]));
  23928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23929. $ctx1.supercall = false;
  23930. //>>excludeEnd("ctx");;
  23931. $1=$recv($ProtocolRemoved())._new();
  23932. $recv($1)._protocol_(aString);
  23933. $recv($1)._theClass_(self._theClass());
  23934. $2=$recv($1)._yourself();
  23935. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  23936. return self;
  23937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23938. }, function($ctx1) {$ctx1.fill(self,"removeElement:",{aString:aString},$globals.ClassOrganizer)});
  23939. //>>excludeEnd("ctx");
  23940. },
  23941. //>>excludeStart("ide", pragmas.excludeIdeData);
  23942. args: ["aString"],
  23943. 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)",
  23944. referencedClasses: ["SystemAnnouncer", "ProtocolRemoved"],
  23945. //>>excludeEnd("ide");
  23946. messageSends: ["removeElement:", "announce:", "current", "protocol:", "new", "theClass:", "theClass", "yourself"]
  23947. }),
  23948. $globals.ClassOrganizer);
  23949. $core.addMethod(
  23950. $core.method({
  23951. selector: "theClass",
  23952. protocol: 'accessing',
  23953. fn: function (){
  23954. var self=this;
  23955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23956. return $core.withContext(function($ctx1) {
  23957. //>>excludeEnd("ctx");
  23958. return self.theClass ;
  23959. return self;
  23960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23961. }, function($ctx1) {$ctx1.fill(self,"theClass",{},$globals.ClassOrganizer)});
  23962. //>>excludeEnd("ctx");
  23963. },
  23964. //>>excludeStart("ide", pragmas.excludeIdeData);
  23965. args: [],
  23966. source: "theClass\x0a\x09< return self.theClass >",
  23967. referencedClasses: [],
  23968. //>>excludeEnd("ide");
  23969. messageSends: []
  23970. }),
  23971. $globals.ClassOrganizer);
  23972. $core.addClass('PackageOrganizer', $globals.Organizer, [], 'Kernel-Infrastructure');
  23973. //>>excludeStart("ide", pragmas.excludeIdeData);
  23974. $globals.PackageOrganizer.comment="I am an organizer specific to packages. I hold classes categorization information.";
  23975. //>>excludeEnd("ide");
  23976. $core.addClass('Package', $globals.Object, ['transport', 'imports', 'dirty'], 'Kernel-Infrastructure');
  23977. //>>excludeStart("ide", pragmas.excludeIdeData);
  23978. $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'";
  23979. //>>excludeEnd("ide");
  23980. $core.addMethod(
  23981. $core.method({
  23982. selector: "basicImports",
  23983. protocol: 'private',
  23984. fn: function (){
  23985. var self=this;
  23986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23987. return $core.withContext(function($ctx1) {
  23988. //>>excludeEnd("ctx");
  23989. return self.imports || [];
  23990. return self;
  23991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23992. }, function($ctx1) {$ctx1.fill(self,"basicImports",{},$globals.Package)});
  23993. //>>excludeEnd("ctx");
  23994. },
  23995. //>>excludeStart("ide", pragmas.excludeIdeData);
  23996. args: [],
  23997. source: "basicImports\x0a\x09\x22Answer the imports literal JavaScript object as setup in the JavaScript file, if any\x22\x0a\x09\x0a\x09<return self.imports || []>",
  23998. referencedClasses: [],
  23999. //>>excludeEnd("ide");
  24000. messageSends: []
  24001. }),
  24002. $globals.Package);
  24003. $core.addMethod(
  24004. $core.method({
  24005. selector: "basicName:",
  24006. protocol: 'private',
  24007. fn: function (aString){
  24008. var self=this;
  24009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24010. return $core.withContext(function($ctx1) {
  24011. //>>excludeEnd("ctx");
  24012. self.pkgName = aString;
  24013. return self;
  24014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24015. }, function($ctx1) {$ctx1.fill(self,"basicName:",{aString:aString},$globals.Package)});
  24016. //>>excludeEnd("ctx");
  24017. },
  24018. //>>excludeStart("ide", pragmas.excludeIdeData);
  24019. args: ["aString"],
  24020. source: "basicName: aString\x0a\x09<self.pkgName = aString>",
  24021. referencedClasses: [],
  24022. //>>excludeEnd("ide");
  24023. messageSends: []
  24024. }),
  24025. $globals.Package);
  24026. $core.addMethod(
  24027. $core.method({
  24028. selector: "basicTransport",
  24029. protocol: 'private',
  24030. fn: function (){
  24031. var self=this;
  24032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24033. return $core.withContext(function($ctx1) {
  24034. //>>excludeEnd("ctx");
  24035. return self.transport;
  24036. return self;
  24037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24038. }, function($ctx1) {$ctx1.fill(self,"basicTransport",{},$globals.Package)});
  24039. //>>excludeEnd("ctx");
  24040. },
  24041. //>>excludeStart("ide", pragmas.excludeIdeData);
  24042. args: [],
  24043. 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>",
  24044. referencedClasses: [],
  24045. //>>excludeEnd("ide");
  24046. messageSends: []
  24047. }),
  24048. $globals.Package);
  24049. $core.addMethod(
  24050. $core.method({
  24051. selector: "beClean",
  24052. protocol: 'accessing',
  24053. fn: function (){
  24054. var self=this;
  24055. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  24056. function $PackageClean(){return $globals.PackageClean||(typeof PackageClean=="undefined"?nil:PackageClean)}
  24057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24058. return $core.withContext(function($ctx1) {
  24059. //>>excludeEnd("ctx");
  24060. var $1,$2;
  24061. self["@dirty"]=false;
  24062. $1=$recv($PackageClean())._new();
  24063. $recv($1)._package_(self);
  24064. $2=$recv($1)._yourself();
  24065. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  24066. return self;
  24067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24068. }, function($ctx1) {$ctx1.fill(self,"beClean",{},$globals.Package)});
  24069. //>>excludeEnd("ctx");
  24070. },
  24071. //>>excludeStart("ide", pragmas.excludeIdeData);
  24072. args: [],
  24073. source: "beClean\x0a\x09dirty := false.\x0a\x09\x0a\x09SystemAnnouncer current announce: (PackageClean new\x0a\x09\x09package: self;\x0a\x09\x09yourself)",
  24074. referencedClasses: ["SystemAnnouncer", "PackageClean"],
  24075. //>>excludeEnd("ide");
  24076. messageSends: ["announce:", "current", "package:", "new", "yourself"]
  24077. }),
  24078. $globals.Package);
  24079. $core.addMethod(
  24080. $core.method({
  24081. selector: "beDirty",
  24082. protocol: 'accessing',
  24083. fn: function (){
  24084. var self=this;
  24085. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  24086. function $PackageDirty(){return $globals.PackageDirty||(typeof PackageDirty=="undefined"?nil:PackageDirty)}
  24087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24088. return $core.withContext(function($ctx1) {
  24089. //>>excludeEnd("ctx");
  24090. var $1,$2;
  24091. self["@dirty"]=true;
  24092. $1=$recv($PackageDirty())._new();
  24093. $recv($1)._package_(self);
  24094. $2=$recv($1)._yourself();
  24095. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  24096. return self;
  24097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24098. }, function($ctx1) {$ctx1.fill(self,"beDirty",{},$globals.Package)});
  24099. //>>excludeEnd("ctx");
  24100. },
  24101. //>>excludeStart("ide", pragmas.excludeIdeData);
  24102. args: [],
  24103. source: "beDirty\x0a\x09dirty := true.\x0a\x09\x0a\x09SystemAnnouncer current announce: (PackageDirty new\x0a\x09\x09package: self;\x0a\x09\x09yourself)",
  24104. referencedClasses: ["SystemAnnouncer", "PackageDirty"],
  24105. //>>excludeEnd("ide");
  24106. messageSends: ["announce:", "current", "package:", "new", "yourself"]
  24107. }),
  24108. $globals.Package);
  24109. $core.addMethod(
  24110. $core.method({
  24111. selector: "classTemplate",
  24112. protocol: 'accessing',
  24113. fn: function (){
  24114. var self=this;
  24115. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  24116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24117. return $core.withContext(function($ctx1) {
  24118. //>>excludeEnd("ctx");
  24119. var $3,$4,$2,$5,$6,$7,$1;
  24120. $1=$recv($String())._streamContents_((function(stream){
  24121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24122. return $core.withContext(function($ctx2) {
  24123. //>>excludeEnd("ctx");
  24124. $recv(stream)._nextPutAll_("Object");
  24125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24126. $ctx2.sendIdx["nextPutAll:"]=1;
  24127. //>>excludeEnd("ctx");
  24128. $recv(stream)._nextPutAll_(" subclass: #NameOfSubclass");
  24129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24130. $ctx2.sendIdx["nextPutAll:"]=2;
  24131. //>>excludeEnd("ctx");
  24132. $3=$recv($String())._lf();
  24133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24134. $ctx2.sendIdx["lf"]=1;
  24135. //>>excludeEnd("ctx");
  24136. $4=$recv($String())._tab();
  24137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24138. $ctx2.sendIdx["tab"]=1;
  24139. //>>excludeEnd("ctx");
  24140. $2=$recv($3).__comma($4);
  24141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24142. $ctx2.sendIdx[","]=1;
  24143. //>>excludeEnd("ctx");
  24144. $recv(stream)._nextPutAll_($2);
  24145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24146. $ctx2.sendIdx["nextPutAll:"]=3;
  24147. //>>excludeEnd("ctx");
  24148. $5=$recv(stream)._nextPutAll_("instanceVariableNames: ''");
  24149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24150. $ctx2.sendIdx["nextPutAll:"]=4;
  24151. //>>excludeEnd("ctx");
  24152. $5;
  24153. $6=$recv("'".__comma($recv($String())._lf())).__comma($recv($String())._tab());
  24154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24155. $ctx2.sendIdx[","]=2;
  24156. //>>excludeEnd("ctx");
  24157. $recv(stream)._nextPutAll_($6);
  24158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24159. $ctx2.sendIdx["nextPutAll:"]=5;
  24160. //>>excludeEnd("ctx");
  24161. $recv(stream)._nextPutAll_("package: '");
  24162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24163. $ctx2.sendIdx["nextPutAll:"]=6;
  24164. //>>excludeEnd("ctx");
  24165. $recv(stream)._nextPutAll_(self._name());
  24166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24167. $ctx2.sendIdx["nextPutAll:"]=7;
  24168. //>>excludeEnd("ctx");
  24169. $7=$recv(stream)._nextPutAll_("'");
  24170. return $7;
  24171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24172. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  24173. //>>excludeEnd("ctx");
  24174. }));
  24175. return $1;
  24176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24177. }, function($ctx1) {$ctx1.fill(self,"classTemplate",{},$globals.Package)});
  24178. //>>excludeEnd("ctx");
  24179. },
  24180. //>>excludeStart("ide", pragmas.excludeIdeData);
  24181. args: [],
  24182. 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: '''' ]",
  24183. referencedClasses: ["String"],
  24184. //>>excludeEnd("ide");
  24185. messageSends: ["streamContents:", "nextPutAll:", ",", "lf", "tab", "name"]
  24186. }),
  24187. $globals.Package);
  24188. $core.addMethod(
  24189. $core.method({
  24190. selector: "classes",
  24191. protocol: 'classes',
  24192. fn: function (){
  24193. var self=this;
  24194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24195. return $core.withContext(function($ctx1) {
  24196. //>>excludeEnd("ctx");
  24197. var $1;
  24198. $1=$recv(self._organization())._elements();
  24199. return $1;
  24200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24201. }, function($ctx1) {$ctx1.fill(self,"classes",{},$globals.Package)});
  24202. //>>excludeEnd("ctx");
  24203. },
  24204. //>>excludeStart("ide", pragmas.excludeIdeData);
  24205. args: [],
  24206. source: "classes\x0a\x09^ self organization elements",
  24207. referencedClasses: [],
  24208. //>>excludeEnd("ide");
  24209. messageSends: ["elements", "organization"]
  24210. }),
  24211. $globals.Package);
  24212. $core.addMethod(
  24213. $core.method({
  24214. selector: "definition",
  24215. protocol: 'accessing',
  24216. fn: function (){
  24217. var self=this;
  24218. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  24219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24220. return $core.withContext(function($ctx1) {
  24221. //>>excludeEnd("ctx");
  24222. var $2,$4,$5,$3,$7,$6,$9,$10,$8,$11,$12,$1;
  24223. $1=$recv($String())._streamContents_((function(stream){
  24224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24225. return $core.withContext(function($ctx2) {
  24226. //>>excludeEnd("ctx");
  24227. $2=$recv(self._class())._name();
  24228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24229. $ctx2.sendIdx["name"]=1;
  24230. //>>excludeEnd("ctx");
  24231. $recv(stream)._nextPutAll_($2);
  24232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24233. $ctx2.sendIdx["nextPutAll:"]=1;
  24234. //>>excludeEnd("ctx");
  24235. $4=$recv($String())._lf();
  24236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24237. $ctx2.sendIdx["lf"]=1;
  24238. //>>excludeEnd("ctx");
  24239. $5=$recv($String())._tab();
  24240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24241. $ctx2.sendIdx["tab"]=1;
  24242. //>>excludeEnd("ctx");
  24243. $3=$recv($4).__comma($5);
  24244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24245. $ctx2.sendIdx[","]=1;
  24246. //>>excludeEnd("ctx");
  24247. $recv(stream)._nextPutAll_($3);
  24248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24249. $ctx2.sendIdx["nextPutAll:"]=2;
  24250. //>>excludeEnd("ctx");
  24251. $recv(stream)._nextPutAll_("named: ");
  24252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24253. $ctx2.sendIdx["nextPutAll:"]=3;
  24254. //>>excludeEnd("ctx");
  24255. $7="'".__comma(self._name());
  24256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24257. $ctx2.sendIdx[","]=3;
  24258. //>>excludeEnd("ctx");
  24259. $6=$recv($7).__comma("'");
  24260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24261. $ctx2.sendIdx[","]=2;
  24262. //>>excludeEnd("ctx");
  24263. $recv(stream)._nextPutAll_($6);
  24264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24265. $ctx2.sendIdx["nextPutAll:"]=4;
  24266. //>>excludeEnd("ctx");
  24267. $9=$recv($String())._lf();
  24268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24269. $ctx2.sendIdx["lf"]=2;
  24270. //>>excludeEnd("ctx");
  24271. $10=$recv($String())._tab();
  24272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24273. $ctx2.sendIdx["tab"]=2;
  24274. //>>excludeEnd("ctx");
  24275. $8=$recv($9).__comma($10);
  24276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24277. $ctx2.sendIdx[","]=4;
  24278. //>>excludeEnd("ctx");
  24279. $recv(stream)._nextPutAll_($8);
  24280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24281. $ctx2.sendIdx["nextPutAll:"]=5;
  24282. //>>excludeEnd("ctx");
  24283. $recv(stream)._nextPutAll_("imports: ");
  24284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24285. $ctx2.sendIdx["nextPutAll:"]=6;
  24286. //>>excludeEnd("ctx");
  24287. $recv(stream)._nextPutAll_(self._importsDefinition());
  24288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24289. $ctx2.sendIdx["nextPutAll:"]=7;
  24290. //>>excludeEnd("ctx");
  24291. $11=$recv($recv($String())._lf()).__comma($recv($String())._tab());
  24292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24293. $ctx2.sendIdx[","]=5;
  24294. //>>excludeEnd("ctx");
  24295. $recv(stream)._nextPutAll_($11);
  24296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24297. $ctx2.sendIdx["nextPutAll:"]=8;
  24298. //>>excludeEnd("ctx");
  24299. $recv(stream)._nextPutAll_("transport: (");
  24300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24301. $ctx2.sendIdx["nextPutAll:"]=9;
  24302. //>>excludeEnd("ctx");
  24303. $12=$recv(stream)._nextPutAll_($recv($recv(self._transport())._definition()).__comma(")"));
  24304. return $12;
  24305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24306. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  24307. //>>excludeEnd("ctx");
  24308. }));
  24309. return $1;
  24310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24311. }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.Package)});
  24312. //>>excludeEnd("ctx");
  24313. },
  24314. //>>excludeStart("ide", pragmas.excludeIdeData);
  24315. args: [],
  24316. 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: 'imports: ';\x0a\x09\x09\x09nextPutAll: self importsDefinition;\x0a\x09\x09\x09nextPutAll: String lf, String tab;\x0a\x09\x09\x09nextPutAll: 'transport: (';\x0a\x09\x09\x09nextPutAll: self transport definition, ')' ]",
  24317. referencedClasses: ["String"],
  24318. //>>excludeEnd("ide");
  24319. messageSends: ["streamContents:", "nextPutAll:", "name", "class", ",", "lf", "tab", "importsDefinition", "definition", "transport"]
  24320. }),
  24321. $globals.Package);
  24322. $core.addMethod(
  24323. $core.method({
  24324. selector: "imports",
  24325. protocol: 'accessing',
  24326. fn: function (){
  24327. var self=this;
  24328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24329. return $core.withContext(function($ctx1) {
  24330. //>>excludeEnd("ctx");
  24331. var $2,$1,$receiver;
  24332. $2=self["@imports"];
  24333. if(($receiver = $2) == null || $receiver.isNil){
  24334. var parsed;
  24335. parsed=self._importsFromJson_(self._basicImports());
  24336. parsed;
  24337. self._imports_(parsed);
  24338. $1=self["@imports"];
  24339. } else {
  24340. $1=$2;
  24341. };
  24342. return $1;
  24343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24344. }, function($ctx1) {$ctx1.fill(self,"imports",{},$globals.Package)});
  24345. //>>excludeEnd("ctx");
  24346. },
  24347. //>>excludeStart("ide", pragmas.excludeIdeData);
  24348. args: [],
  24349. source: "imports\x0a\x09^ imports ifNil: [\x0a\x09\x09| parsed |\x0a\x09\x09parsed := self importsFromJson: self basicImports.\x0a\x09\x09self imports: parsed.\x0a\x09\x09imports ]",
  24350. referencedClasses: [],
  24351. //>>excludeEnd("ide");
  24352. messageSends: ["ifNil:", "importsFromJson:", "basicImports", "imports:"]
  24353. }),
  24354. $globals.Package);
  24355. $core.addMethod(
  24356. $core.method({
  24357. selector: "imports:",
  24358. protocol: 'accessing',
  24359. fn: function (anArray){
  24360. var self=this;
  24361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24362. return $core.withContext(function($ctx1) {
  24363. //>>excludeEnd("ctx");
  24364. self._validateImports_(anArray);
  24365. self["@imports"]=$recv(anArray)._asSet();
  24366. return self;
  24367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24368. }, function($ctx1) {$ctx1.fill(self,"imports:",{anArray:anArray},$globals.Package)});
  24369. //>>excludeEnd("ctx");
  24370. },
  24371. //>>excludeStart("ide", pragmas.excludeIdeData);
  24372. args: ["anArray"],
  24373. source: "imports: anArray\x0a\x09self validateImports: anArray.\x0a\x09imports := anArray asSet",
  24374. referencedClasses: [],
  24375. //>>excludeEnd("ide");
  24376. messageSends: ["validateImports:", "asSet"]
  24377. }),
  24378. $globals.Package);
  24379. $core.addMethod(
  24380. $core.method({
  24381. selector: "importsAsJson",
  24382. protocol: 'converting',
  24383. fn: function (){
  24384. var self=this;
  24385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24386. return $core.withContext(function($ctx1) {
  24387. //>>excludeEnd("ctx");
  24388. var $2,$1;
  24389. $1=$recv(self._sortedImportsAsArray())._collect_((function(each){
  24390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24391. return $core.withContext(function($ctx2) {
  24392. //>>excludeEnd("ctx");
  24393. $2=$recv(each)._isString();
  24394. if($core.assert($2)){
  24395. return each;
  24396. } else {
  24397. return $recv($recv($recv(each)._key()).__comma("=")).__comma($recv(each)._value());
  24398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24399. $ctx2.sendIdx[","]=1;
  24400. //>>excludeEnd("ctx");
  24401. };
  24402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24403. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  24404. //>>excludeEnd("ctx");
  24405. }));
  24406. return $1;
  24407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24408. }, function($ctx1) {$ctx1.fill(self,"importsAsJson",{},$globals.Package)});
  24409. //>>excludeEnd("ctx");
  24410. },
  24411. //>>excludeStart("ide", pragmas.excludeIdeData);
  24412. args: [],
  24413. source: "importsAsJson\x0a\x0a\x09^ self sortedImportsAsArray collect: [ :each |\x0a\x09\x09each isString\x0a\x09\x09\x09ifTrue: [ each ]\x0a\x09\x09\x09ifFalse: [ each key, '=', each value ]]",
  24414. referencedClasses: [],
  24415. //>>excludeEnd("ide");
  24416. messageSends: ["collect:", "sortedImportsAsArray", "ifTrue:ifFalse:", "isString", ",", "key", "value"]
  24417. }),
  24418. $globals.Package);
  24419. $core.addMethod(
  24420. $core.method({
  24421. selector: "importsDefinition",
  24422. protocol: 'accessing',
  24423. fn: function (){
  24424. var self=this;
  24425. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  24426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24427. return $core.withContext(function($ctx1) {
  24428. //>>excludeEnd("ctx");
  24429. var $1;
  24430. $1=$recv($String())._streamContents_((function(stream){
  24431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24432. return $core.withContext(function($ctx2) {
  24433. //>>excludeEnd("ctx");
  24434. $recv(stream)._nextPutAll_("{");
  24435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24436. $ctx2.sendIdx["nextPutAll:"]=1;
  24437. //>>excludeEnd("ctx");
  24438. $recv(self._sortedImportsAsArray())._do_separatedBy_((function(each){
  24439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24440. return $core.withContext(function($ctx3) {
  24441. //>>excludeEnd("ctx");
  24442. return $recv(stream)._nextPutAll_($recv(each)._importsString());
  24443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24444. $ctx3.sendIdx["nextPutAll:"]=2;
  24445. //>>excludeEnd("ctx");
  24446. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24447. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  24448. //>>excludeEnd("ctx");
  24449. }),(function(){
  24450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24451. return $core.withContext(function($ctx3) {
  24452. //>>excludeEnd("ctx");
  24453. return $recv(stream)._nextPutAll_(". ");
  24454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24455. $ctx3.sendIdx["nextPutAll:"]=3;
  24456. //>>excludeEnd("ctx");
  24457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24458. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  24459. //>>excludeEnd("ctx");
  24460. }));
  24461. return $recv(stream)._nextPutAll_("}");
  24462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24463. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  24464. //>>excludeEnd("ctx");
  24465. }));
  24466. return $1;
  24467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24468. }, function($ctx1) {$ctx1.fill(self,"importsDefinition",{},$globals.Package)});
  24469. //>>excludeEnd("ctx");
  24470. },
  24471. //>>excludeStart("ide", pragmas.excludeIdeData);
  24472. args: [],
  24473. source: "importsDefinition\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream nextPutAll: '{'.\x0a\x09\x09self sortedImportsAsArray\x0a\x09\x09\x09do: [ :each | stream nextPutAll: each importsString ]\x0a\x09\x09\x09separatedBy: [ stream nextPutAll: '. ' ].\x0a\x09\x09stream nextPutAll: '}' ]",
  24474. referencedClasses: ["String"],
  24475. //>>excludeEnd("ide");
  24476. messageSends: ["streamContents:", "nextPutAll:", "do:separatedBy:", "sortedImportsAsArray", "importsString"]
  24477. }),
  24478. $globals.Package);
  24479. $core.addMethod(
  24480. $core.method({
  24481. selector: "importsFromJson:",
  24482. protocol: 'converting',
  24483. fn: function (anArray){
  24484. var self=this;
  24485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24486. return $core.withContext(function($ctx1) {
  24487. //>>excludeEnd("ctx");
  24488. var $2,$1;
  24489. $1=$recv(anArray)._collect_((function(each){
  24490. var split;
  24491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24492. return $core.withContext(function($ctx2) {
  24493. //>>excludeEnd("ctx");
  24494. split=$recv(each)._tokenize_("=");
  24495. split;
  24496. $2=$recv($recv(split)._size()).__eq((1));
  24497. if($core.assert($2)){
  24498. return $recv(split)._first();
  24499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24500. $ctx2.sendIdx["first"]=1;
  24501. //>>excludeEnd("ctx");
  24502. } else {
  24503. return $recv($recv(split)._first()).__minus_gt($recv(split)._second());
  24504. };
  24505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24506. }, function($ctx2) {$ctx2.fillBlock({each:each,split:split},$ctx1,1)});
  24507. //>>excludeEnd("ctx");
  24508. }));
  24509. return $1;
  24510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24511. }, function($ctx1) {$ctx1.fill(self,"importsFromJson:",{anArray:anArray},$globals.Package)});
  24512. //>>excludeEnd("ctx");
  24513. },
  24514. //>>excludeStart("ide", pragmas.excludeIdeData);
  24515. args: ["anArray"],
  24516. source: "importsFromJson: anArray\x0a\x09\x22Parses array of string, eg. #('asdf' 'qwer=tyuo')\x0a\x09into array of Strings and Associations,\x0a\x09eg. {'asdf'. 'qwer'->'tyuo'}\x22\x0a\x0a\x09^ anArray collect: [ :each |\x0a\x09\x09| split |\x0a\x09\x09split := each tokenize: '='.\x0a\x09\x09split size = 1\x0a\x09\x09\x09ifTrue: [ split first ]\x0a\x09\x09\x09ifFalse: [ split first -> split second ]]",
  24517. referencedClasses: [],
  24518. //>>excludeEnd("ide");
  24519. messageSends: ["collect:", "tokenize:", "ifTrue:ifFalse:", "=", "size", "first", "->", "second"]
  24520. }),
  24521. $globals.Package);
  24522. $core.addMethod(
  24523. $core.method({
  24524. selector: "isDirty",
  24525. protocol: 'testing',
  24526. fn: function (){
  24527. var self=this;
  24528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24529. return $core.withContext(function($ctx1) {
  24530. //>>excludeEnd("ctx");
  24531. var $2,$1,$receiver;
  24532. $2=self["@dirty"];
  24533. if(($receiver = $2) == null || $receiver.isNil){
  24534. $1=false;
  24535. } else {
  24536. $1=$2;
  24537. };
  24538. return $1;
  24539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24540. }, function($ctx1) {$ctx1.fill(self,"isDirty",{},$globals.Package)});
  24541. //>>excludeEnd("ctx");
  24542. },
  24543. //>>excludeStart("ide", pragmas.excludeIdeData);
  24544. args: [],
  24545. source: "isDirty\x0a\x09^ dirty ifNil: [ false ]",
  24546. referencedClasses: [],
  24547. //>>excludeEnd("ide");
  24548. messageSends: ["ifNil:"]
  24549. }),
  24550. $globals.Package);
  24551. $core.addMethod(
  24552. $core.method({
  24553. selector: "isPackage",
  24554. protocol: 'testing',
  24555. fn: function (){
  24556. var self=this;
  24557. return true;
  24558. },
  24559. //>>excludeStart("ide", pragmas.excludeIdeData);
  24560. args: [],
  24561. source: "isPackage\x0a\x09^ true",
  24562. referencedClasses: [],
  24563. //>>excludeEnd("ide");
  24564. messageSends: []
  24565. }),
  24566. $globals.Package);
  24567. $core.addMethod(
  24568. $core.method({
  24569. selector: "loadDependencies",
  24570. protocol: 'dependencies',
  24571. fn: function (){
  24572. var self=this;
  24573. var classes,packages;
  24574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24575. return $core.withContext(function($ctx1) {
  24576. //>>excludeEnd("ctx");
  24577. var $2,$3,$1;
  24578. classes=self._loadDependencyClasses();
  24579. $2=$recv($recv(classes)._collect_((function(each){
  24580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24581. return $core.withContext(function($ctx2) {
  24582. //>>excludeEnd("ctx");
  24583. return $recv(each)._package();
  24584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24585. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  24586. //>>excludeEnd("ctx");
  24587. })))._asSet();
  24588. $recv($2)._remove_ifAbsent_(self,(function(){
  24589. }));
  24590. $3=$recv($2)._yourself();
  24591. $1=$3;
  24592. return $1;
  24593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24594. }, function($ctx1) {$ctx1.fill(self,"loadDependencies",{classes:classes,packages:packages},$globals.Package)});
  24595. //>>excludeEnd("ctx");
  24596. },
  24597. //>>excludeStart("ide", pragmas.excludeIdeData);
  24598. args: [],
  24599. 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",
  24600. referencedClasses: [],
  24601. //>>excludeEnd("ide");
  24602. messageSends: ["loadDependencyClasses", "remove:ifAbsent:", "asSet", "collect:", "package", "yourself"]
  24603. }),
  24604. $globals.Package);
  24605. $core.addMethod(
  24606. $core.method({
  24607. selector: "loadDependencyClasses",
  24608. protocol: 'dependencies',
  24609. fn: function (){
  24610. var self=this;
  24611. var starCategoryName;
  24612. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  24613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24614. return $core.withContext(function($ctx1) {
  24615. //>>excludeEnd("ctx");
  24616. var $4,$3,$2,$6,$5,$7,$1;
  24617. starCategoryName="*".__comma(self._name());
  24618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24619. $ctx1.sendIdx[","]=1;
  24620. //>>excludeEnd("ctx");
  24621. $4=self._classes();
  24622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24623. $ctx1.sendIdx["classes"]=1;
  24624. //>>excludeEnd("ctx");
  24625. $3=$recv($4)._collect_((function(each){
  24626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24627. return $core.withContext(function($ctx2) {
  24628. //>>excludeEnd("ctx");
  24629. return $recv(each)._superclass();
  24630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24631. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  24632. //>>excludeEnd("ctx");
  24633. }));
  24634. $2=$recv($3)._asSet();
  24635. $recv($2)._remove_ifAbsent_(nil,(function(){
  24636. }));
  24637. $recv($2)._addAll_($recv($recv($Smalltalk())._classes())._select_((function(each){
  24638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24639. return $core.withContext(function($ctx2) {
  24640. //>>excludeEnd("ctx");
  24641. $6=$recv(each)._protocols();
  24642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24643. $ctx2.sendIdx["protocols"]=1;
  24644. //>>excludeEnd("ctx");
  24645. $5=$recv($6).__comma($recv($recv(each)._class())._protocols());
  24646. return $recv($5)._includes_(starCategoryName);
  24647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24648. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  24649. //>>excludeEnd("ctx");
  24650. })));
  24651. $7=$recv($2)._yourself();
  24652. $1=$7;
  24653. return $1;
  24654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24655. }, function($ctx1) {$ctx1.fill(self,"loadDependencyClasses",{starCategoryName:starCategoryName},$globals.Package)});
  24656. //>>excludeEnd("ctx");
  24657. },
  24658. //>>excludeStart("ide", pragmas.excludeIdeData);
  24659. args: [],
  24660. 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",
  24661. referencedClasses: ["Smalltalk"],
  24662. //>>excludeEnd("ide");
  24663. messageSends: [",", "name", "remove:ifAbsent:", "asSet", "collect:", "classes", "superclass", "addAll:", "select:", "includes:", "protocols", "class", "yourself"]
  24664. }),
  24665. $globals.Package);
  24666. $core.addMethod(
  24667. $core.method({
  24668. selector: "name",
  24669. protocol: 'accessing',
  24670. fn: function (){
  24671. var self=this;
  24672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24673. return $core.withContext(function($ctx1) {
  24674. //>>excludeEnd("ctx");
  24675. return self.pkgName;
  24676. return self;
  24677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24678. }, function($ctx1) {$ctx1.fill(self,"name",{},$globals.Package)});
  24679. //>>excludeEnd("ctx");
  24680. },
  24681. //>>excludeStart("ide", pragmas.excludeIdeData);
  24682. args: [],
  24683. source: "name\x0a\x09<return self.pkgName>",
  24684. referencedClasses: [],
  24685. //>>excludeEnd("ide");
  24686. messageSends: []
  24687. }),
  24688. $globals.Package);
  24689. $core.addMethod(
  24690. $core.method({
  24691. selector: "name:",
  24692. protocol: 'accessing',
  24693. fn: function (aString){
  24694. var self=this;
  24695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24696. return $core.withContext(function($ctx1) {
  24697. //>>excludeEnd("ctx");
  24698. self._basicName_(aString);
  24699. self._beDirty();
  24700. return self;
  24701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24702. }, function($ctx1) {$ctx1.fill(self,"name:",{aString:aString},$globals.Package)});
  24703. //>>excludeEnd("ctx");
  24704. },
  24705. //>>excludeStart("ide", pragmas.excludeIdeData);
  24706. args: ["aString"],
  24707. source: "name: aString\x0a\x09self basicName: aString.\x0a\x09self beDirty",
  24708. referencedClasses: [],
  24709. //>>excludeEnd("ide");
  24710. messageSends: ["basicName:", "beDirty"]
  24711. }),
  24712. $globals.Package);
  24713. $core.addMethod(
  24714. $core.method({
  24715. selector: "organization",
  24716. protocol: 'accessing',
  24717. fn: function (){
  24718. var self=this;
  24719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24720. return $core.withContext(function($ctx1) {
  24721. //>>excludeEnd("ctx");
  24722. var $1;
  24723. $1=self._basicAt_("organization");
  24724. return $1;
  24725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24726. }, function($ctx1) {$ctx1.fill(self,"organization",{},$globals.Package)});
  24727. //>>excludeEnd("ctx");
  24728. },
  24729. //>>excludeStart("ide", pragmas.excludeIdeData);
  24730. args: [],
  24731. source: "organization\x0a\x09^ self basicAt: 'organization'",
  24732. referencedClasses: [],
  24733. //>>excludeEnd("ide");
  24734. messageSends: ["basicAt:"]
  24735. }),
  24736. $globals.Package);
  24737. $core.addMethod(
  24738. $core.method({
  24739. selector: "printOn:",
  24740. protocol: 'printing',
  24741. fn: function (aStream){
  24742. var self=this;
  24743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24744. return $core.withContext(function($ctx1) {
  24745. //>>excludeEnd("ctx");
  24746. var $1;
  24747. (
  24748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24749. $ctx1.supercall = true,
  24750. //>>excludeEnd("ctx");
  24751. $globals.Package.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  24752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24753. $ctx1.supercall = false;
  24754. //>>excludeEnd("ctx");;
  24755. $recv(aStream)._nextPutAll_(" (");
  24756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24757. $ctx1.sendIdx["nextPutAll:"]=1;
  24758. //>>excludeEnd("ctx");
  24759. $recv(aStream)._nextPutAll_(self._name());
  24760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24761. $ctx1.sendIdx["nextPutAll:"]=2;
  24762. //>>excludeEnd("ctx");
  24763. $1=$recv(aStream)._nextPutAll_(")");
  24764. return self;
  24765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24766. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Package)});
  24767. //>>excludeEnd("ctx");
  24768. },
  24769. //>>excludeStart("ide", pragmas.excludeIdeData);
  24770. args: ["aStream"],
  24771. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream \x0a\x09\x09nextPutAll: ' (';\x0a\x09\x09nextPutAll: self name;\x0a\x09\x09nextPutAll: ')'",
  24772. referencedClasses: [],
  24773. //>>excludeEnd("ide");
  24774. messageSends: ["printOn:", "nextPutAll:", "name"]
  24775. }),
  24776. $globals.Package);
  24777. $core.addMethod(
  24778. $core.method({
  24779. selector: "setupClasses",
  24780. protocol: 'classes',
  24781. fn: function (){
  24782. var self=this;
  24783. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  24784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24785. return $core.withContext(function($ctx1) {
  24786. //>>excludeEnd("ctx");
  24787. var $1,$2;
  24788. $1=self._classes();
  24789. $recv($1)._do_((function(each){
  24790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24791. return $core.withContext(function($ctx2) {
  24792. //>>excludeEnd("ctx");
  24793. return $recv($recv($ClassBuilder())._new())._setupClass_(each);
  24794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24795. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  24796. //>>excludeEnd("ctx");
  24797. }));
  24798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24799. $ctx1.sendIdx["do:"]=1;
  24800. //>>excludeEnd("ctx");
  24801. $2=$recv($1)._do_((function(each){
  24802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24803. return $core.withContext(function($ctx2) {
  24804. //>>excludeEnd("ctx");
  24805. return $recv(each)._initialize();
  24806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24807. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  24808. //>>excludeEnd("ctx");
  24809. }));
  24810. return self;
  24811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24812. }, function($ctx1) {$ctx1.fill(self,"setupClasses",{},$globals.Package)});
  24813. //>>excludeEnd("ctx");
  24814. },
  24815. //>>excludeStart("ide", pragmas.excludeIdeData);
  24816. args: [],
  24817. source: "setupClasses\x0a\x09self classes\x0a\x09\x09do: [ :each | ClassBuilder new setupClass: each ];\x0a\x09\x09do: [ :each | each initialize ]",
  24818. referencedClasses: ["ClassBuilder"],
  24819. //>>excludeEnd("ide");
  24820. messageSends: ["do:", "classes", "setupClass:", "new", "initialize"]
  24821. }),
  24822. $globals.Package);
  24823. $core.addMethod(
  24824. $core.method({
  24825. selector: "sortedClasses",
  24826. protocol: 'classes',
  24827. fn: function (){
  24828. var self=this;
  24829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24830. return $core.withContext(function($ctx1) {
  24831. //>>excludeEnd("ctx");
  24832. var $1;
  24833. $1=$recv(self._class())._sortedClasses_(self._classes());
  24834. return $1;
  24835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24836. }, function($ctx1) {$ctx1.fill(self,"sortedClasses",{},$globals.Package)});
  24837. //>>excludeEnd("ctx");
  24838. },
  24839. //>>excludeStart("ide", pragmas.excludeIdeData);
  24840. args: [],
  24841. 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",
  24842. referencedClasses: [],
  24843. //>>excludeEnd("ide");
  24844. messageSends: ["sortedClasses:", "class", "classes"]
  24845. }),
  24846. $globals.Package);
  24847. $core.addMethod(
  24848. $core.method({
  24849. selector: "sortedImportsAsArray",
  24850. protocol: 'private',
  24851. fn: function (){
  24852. var self=this;
  24853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24854. return $core.withContext(function($ctx1) {
  24855. //>>excludeEnd("ctx");
  24856. var $4,$3,$5,$2,$7,$6,$8,$1;
  24857. $1=$recv($recv(self._imports())._asArray())._sorted_((function(a,b){
  24858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24859. return $core.withContext(function($ctx2) {
  24860. //>>excludeEnd("ctx");
  24861. $4=$recv(a)._isString();
  24862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24863. $ctx2.sendIdx["isString"]=1;
  24864. //>>excludeEnd("ctx");
  24865. $3=$recv($4)._not();
  24866. $5=$recv(b)._isString();
  24867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24868. $ctx2.sendIdx["isString"]=2;
  24869. //>>excludeEnd("ctx");
  24870. $2=$recv($3).__and($5);
  24871. return $recv($2)._or_((function(){
  24872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24873. return $core.withContext(function($ctx3) {
  24874. //>>excludeEnd("ctx");
  24875. $7=$recv(a)._isString();
  24876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24877. $ctx3.sendIdx["isString"]=3;
  24878. //>>excludeEnd("ctx");
  24879. $6=$recv($7).__eq($recv(b)._isString());
  24880. return $recv($6)._and_((function(){
  24881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24882. return $core.withContext(function($ctx4) {
  24883. //>>excludeEnd("ctx");
  24884. $8=$recv(a)._value();
  24885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24886. $ctx4.sendIdx["value"]=1;
  24887. //>>excludeEnd("ctx");
  24888. return $recv($8).__lt_eq($recv(b)._value());
  24889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24890. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,3)});
  24891. //>>excludeEnd("ctx");
  24892. }));
  24893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24894. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  24895. //>>excludeEnd("ctx");
  24896. }));
  24897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24898. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  24899. //>>excludeEnd("ctx");
  24900. }));
  24901. return $1;
  24902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24903. }, function($ctx1) {$ctx1.fill(self,"sortedImportsAsArray",{},$globals.Package)});
  24904. //>>excludeEnd("ctx");
  24905. },
  24906. //>>excludeStart("ide", pragmas.excludeIdeData);
  24907. args: [],
  24908. source: "sortedImportsAsArray\x0a\x09\x22Answer imports sorted first by type (associations first),\x0a\x09then by value\x22\x0a\x0a\x09^ self imports asArray\x0a\x09\x09sorted: [ :a :b |\x0a\x09\x09\x09a isString not & b isString or: [\x0a\x09\x09\x09\x09a isString = b isString and: [\x0a\x09\x09\x09\x09\x09a value <= b value ]]]",
  24909. referencedClasses: [],
  24910. //>>excludeEnd("ide");
  24911. messageSends: ["sorted:", "asArray", "imports", "or:", "&", "not", "isString", "and:", "=", "<=", "value"]
  24912. }),
  24913. $globals.Package);
  24914. $core.addMethod(
  24915. $core.method({
  24916. selector: "transport",
  24917. protocol: 'accessing',
  24918. fn: function (){
  24919. var self=this;
  24920. function $PackageTransport(){return $globals.PackageTransport||(typeof PackageTransport=="undefined"?nil:PackageTransport)}
  24921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24922. return $core.withContext(function($ctx1) {
  24923. //>>excludeEnd("ctx");
  24924. var $2,$3,$4,$1,$receiver;
  24925. $2=self["@transport"];
  24926. if(($receiver = $2) == null || $receiver.isNil){
  24927. $3=$recv($PackageTransport())._fromJson_(self._basicTransport());
  24928. $recv($3)._package_(self);
  24929. $4=$recv($3)._yourself();
  24930. self["@transport"]=$4;
  24931. $1=self["@transport"];
  24932. } else {
  24933. $1=$2;
  24934. };
  24935. return $1;
  24936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24937. }, function($ctx1) {$ctx1.fill(self,"transport",{},$globals.Package)});
  24938. //>>excludeEnd("ctx");
  24939. },
  24940. //>>excludeStart("ide", pragmas.excludeIdeData);
  24941. args: [],
  24942. source: "transport\x0a\x09^ transport ifNil: [ \x0a\x09\x09transport := (PackageTransport fromJson: self basicTransport)\x0a\x09\x09\x09package: self;\x0a\x09\x09\x09yourself ]",
  24943. referencedClasses: ["PackageTransport"],
  24944. //>>excludeEnd("ide");
  24945. messageSends: ["ifNil:", "package:", "fromJson:", "basicTransport", "yourself"]
  24946. }),
  24947. $globals.Package);
  24948. $core.addMethod(
  24949. $core.method({
  24950. selector: "transport:",
  24951. protocol: 'accessing',
  24952. fn: function (aPackageTransport){
  24953. var self=this;
  24954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24955. return $core.withContext(function($ctx1) {
  24956. //>>excludeEnd("ctx");
  24957. self["@transport"]=aPackageTransport;
  24958. $recv(aPackageTransport)._package_(self);
  24959. return self;
  24960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24961. }, function($ctx1) {$ctx1.fill(self,"transport:",{aPackageTransport:aPackageTransport},$globals.Package)});
  24962. //>>excludeEnd("ctx");
  24963. },
  24964. //>>excludeStart("ide", pragmas.excludeIdeData);
  24965. args: ["aPackageTransport"],
  24966. source: "transport: aPackageTransport\x0a\x09transport := aPackageTransport.\x0a\x09aPackageTransport package: self",
  24967. referencedClasses: [],
  24968. //>>excludeEnd("ide");
  24969. messageSends: ["package:"]
  24970. }),
  24971. $globals.Package);
  24972. $core.addMethod(
  24973. $core.method({
  24974. selector: "validateImports:",
  24975. protocol: 'validation',
  24976. fn: function (aCollection){
  24977. var self=this;
  24978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24979. return $core.withContext(function($ctx1) {
  24980. //>>excludeEnd("ctx");
  24981. var $1,$2,$5,$4,$3,$6;
  24982. $recv(aCollection)._do_((function(import_){
  24983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24984. return $core.withContext(function($ctx2) {
  24985. //>>excludeEnd("ctx");
  24986. $1=$recv(import_)._isString();
  24987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24988. $ctx2.sendIdx["isString"]=1;
  24989. //>>excludeEnd("ctx");
  24990. if(!$core.assert($1)){
  24991. $2=$recv(import_)._respondsTo_("key");
  24992. if(!$core.assert($2)){
  24993. self._error_("Imports must be Strings or Associations");
  24994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24995. $ctx2.sendIdx["error:"]=1;
  24996. //>>excludeEnd("ctx");
  24997. };
  24998. $5=$recv(import_)._key();
  24999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25000. $ctx2.sendIdx["key"]=1;
  25001. //>>excludeEnd("ctx");
  25002. $4=$recv($5)._isString();
  25003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25004. $ctx2.sendIdx["isString"]=2;
  25005. //>>excludeEnd("ctx");
  25006. $3=$recv($4).__and($recv($recv(import_)._value())._isString());
  25007. if(!$core.assert($3)){
  25008. self._error_("Key and value must be Strings");
  25009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25010. $ctx2.sendIdx["error:"]=2;
  25011. //>>excludeEnd("ctx");
  25012. };
  25013. $6=$recv($recv(import_)._key())._match_("^[a-zA-Z][a-zA-Z0-9]*$");
  25014. if(!$core.assert($6)){
  25015. return self._error_("Keys must be identifiers");
  25016. };
  25017. };
  25018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25019. }, function($ctx2) {$ctx2.fillBlock({import_:import_},$ctx1,1)});
  25020. //>>excludeEnd("ctx");
  25021. }));
  25022. return self;
  25023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25024. }, function($ctx1) {$ctx1.fill(self,"validateImports:",{aCollection:aCollection},$globals.Package)});
  25025. //>>excludeEnd("ctx");
  25026. },
  25027. //>>excludeStart("ide", pragmas.excludeIdeData);
  25028. args: ["aCollection"],
  25029. source: "validateImports: aCollection\x0a\x0a\x09aCollection do: [ :import |\x0a\x09\x09import isString ifFalse: [\x0a\x09\x09\x09(import respondsTo: #key) ifFalse: [\x0a\x09\x09\x09\x09self error: 'Imports must be Strings or Associations' ].\x0a\x09\x09\x09import key isString & import value isString ifFalse: [\x0a\x09\x09\x09\x09self error: 'Key and value must be Strings' ].\x0a\x09\x09\x09(import key match: '^[a-zA-Z][a-zA-Z0-9]*$') ifFalse: [\x0a\x09\x09\x09\x09self error: 'Keys must be identifiers' ]]]",
  25030. referencedClasses: [],
  25031. //>>excludeEnd("ide");
  25032. messageSends: ["do:", "ifFalse:", "isString", "respondsTo:", "error:", "&", "key", "value", "match:"]
  25033. }),
  25034. $globals.Package);
  25035. $globals.Package.klass.iVarNames = ['defaultCommitPathJs','defaultCommitPathSt'];
  25036. $core.addMethod(
  25037. $core.method({
  25038. selector: "named:",
  25039. protocol: 'accessing',
  25040. fn: function (aPackageName){
  25041. var self=this;
  25042. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  25043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25044. return $core.withContext(function($ctx1) {
  25045. //>>excludeEnd("ctx");
  25046. var $1;
  25047. $1=$recv($Smalltalk())._packageAt_ifAbsent_(aPackageName,(function(){
  25048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25049. return $core.withContext(function($ctx2) {
  25050. //>>excludeEnd("ctx");
  25051. return $recv($Smalltalk())._createPackage_(aPackageName);
  25052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25053. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  25054. //>>excludeEnd("ctx");
  25055. }));
  25056. return $1;
  25057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25058. }, function($ctx1) {$ctx1.fill(self,"named:",{aPackageName:aPackageName},$globals.Package.klass)});
  25059. //>>excludeEnd("ctx");
  25060. },
  25061. //>>excludeStart("ide", pragmas.excludeIdeData);
  25062. args: ["aPackageName"],
  25063. source: "named: aPackageName\x0a\x09^ Smalltalk \x0a\x09\x09packageAt: aPackageName\x0a\x09\x09ifAbsent: [ \x0a\x09\x09\x09Smalltalk createPackage: aPackageName ]",
  25064. referencedClasses: ["Smalltalk"],
  25065. //>>excludeEnd("ide");
  25066. messageSends: ["packageAt:ifAbsent:", "createPackage:"]
  25067. }),
  25068. $globals.Package.klass);
  25069. $core.addMethod(
  25070. $core.method({
  25071. selector: "named:ifAbsent:",
  25072. protocol: 'accessing',
  25073. fn: function (aPackageName,aBlock){
  25074. var self=this;
  25075. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  25076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25077. return $core.withContext(function($ctx1) {
  25078. //>>excludeEnd("ctx");
  25079. var $1;
  25080. $1=$recv($Smalltalk())._packageAt_ifAbsent_(aPackageName,aBlock);
  25081. return $1;
  25082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25083. }, function($ctx1) {$ctx1.fill(self,"named:ifAbsent:",{aPackageName:aPackageName,aBlock:aBlock},$globals.Package.klass)});
  25084. //>>excludeEnd("ctx");
  25085. },
  25086. //>>excludeStart("ide", pragmas.excludeIdeData);
  25087. args: ["aPackageName", "aBlock"],
  25088. source: "named: aPackageName ifAbsent: aBlock\x0a\x09^ Smalltalk packageAt: aPackageName ifAbsent: aBlock",
  25089. referencedClasses: ["Smalltalk"],
  25090. //>>excludeEnd("ide");
  25091. messageSends: ["packageAt:ifAbsent:"]
  25092. }),
  25093. $globals.Package.klass);
  25094. $core.addMethod(
  25095. $core.method({
  25096. selector: "named:imports:transport:",
  25097. protocol: 'accessing',
  25098. fn: function (aPackageName,anArray,aTransport){
  25099. var self=this;
  25100. var package_;
  25101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25102. return $core.withContext(function($ctx1) {
  25103. //>>excludeEnd("ctx");
  25104. var $1;
  25105. package_=self._named_(aPackageName);
  25106. $recv(package_)._imports_(anArray);
  25107. $recv(package_)._transport_(aTransport);
  25108. $1=package_;
  25109. return $1;
  25110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25111. }, function($ctx1) {$ctx1.fill(self,"named:imports:transport:",{aPackageName:aPackageName,anArray:anArray,aTransport:aTransport,package_:package_},$globals.Package.klass)});
  25112. //>>excludeEnd("ctx");
  25113. },
  25114. //>>excludeStart("ide", pragmas.excludeIdeData);
  25115. args: ["aPackageName", "anArray", "aTransport"],
  25116. source: "named: aPackageName imports: anArray transport: aTransport\x0a\x09| package |\x0a\x09\x0a\x09package := self named: aPackageName.\x0a\x09package imports: anArray.\x0a\x09package transport: aTransport.\x0a\x09\x0a\x09^ package",
  25117. referencedClasses: [],
  25118. //>>excludeEnd("ide");
  25119. messageSends: ["named:", "imports:", "transport:"]
  25120. }),
  25121. $globals.Package.klass);
  25122. $core.addMethod(
  25123. $core.method({
  25124. selector: "named:transport:",
  25125. protocol: 'accessing',
  25126. fn: function (aPackageName,aTransport){
  25127. var self=this;
  25128. var package_;
  25129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25130. return $core.withContext(function($ctx1) {
  25131. //>>excludeEnd("ctx");
  25132. var $1;
  25133. package_=self._named_(aPackageName);
  25134. $recv(package_)._transport_(aTransport);
  25135. $1=package_;
  25136. return $1;
  25137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25138. }, function($ctx1) {$ctx1.fill(self,"named:transport:",{aPackageName:aPackageName,aTransport:aTransport,package_:package_},$globals.Package.klass)});
  25139. //>>excludeEnd("ctx");
  25140. },
  25141. //>>excludeStart("ide", pragmas.excludeIdeData);
  25142. args: ["aPackageName", "aTransport"],
  25143. source: "named: aPackageName transport: aTransport\x0a\x09| package |\x0a\x09\x0a\x09package := self named: aPackageName.\x0a\x09package transport: aTransport.\x0a\x09\x0a\x09^ package",
  25144. referencedClasses: [],
  25145. //>>excludeEnd("ide");
  25146. messageSends: ["named:", "transport:"]
  25147. }),
  25148. $globals.Package.klass);
  25149. $core.addMethod(
  25150. $core.method({
  25151. selector: "sortedClasses:",
  25152. protocol: 'sorting',
  25153. fn: function (classes){
  25154. var self=this;
  25155. var children,others,nodes,expandedClasses;
  25156. function $ClassSorterNode(){return $globals.ClassSorterNode||(typeof ClassSorterNode=="undefined"?nil:ClassSorterNode)}
  25157. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  25158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25159. return $core.withContext(function($ctx1) {
  25160. //>>excludeEnd("ctx");
  25161. var $1,$3,$2,$4;
  25162. children=[];
  25163. others=[];
  25164. $recv(classes)._do_((function(each){
  25165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25166. return $core.withContext(function($ctx2) {
  25167. //>>excludeEnd("ctx");
  25168. $1=$recv(classes)._includes_($recv(each)._superclass());
  25169. if($core.assert($1)){
  25170. return $recv(others)._add_(each);
  25171. } else {
  25172. return $recv(children)._add_(each);
  25173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25174. $ctx2.sendIdx["add:"]=1;
  25175. //>>excludeEnd("ctx");
  25176. };
  25177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25178. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  25179. //>>excludeEnd("ctx");
  25180. }));
  25181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25182. $ctx1.sendIdx["do:"]=1;
  25183. //>>excludeEnd("ctx");
  25184. nodes=$recv(children)._collect_((function(each){
  25185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25186. return $core.withContext(function($ctx2) {
  25187. //>>excludeEnd("ctx");
  25188. return $recv($ClassSorterNode())._on_classes_level_(each,others,(0));
  25189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25190. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  25191. //>>excludeEnd("ctx");
  25192. }));
  25193. nodes=$recv(nodes)._sorted_((function(a,b){
  25194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25195. return $core.withContext(function($ctx2) {
  25196. //>>excludeEnd("ctx");
  25197. $3=$recv(a)._theClass();
  25198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25199. $ctx2.sendIdx["theClass"]=1;
  25200. //>>excludeEnd("ctx");
  25201. $2=$recv($3)._name();
  25202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25203. $ctx2.sendIdx["name"]=1;
  25204. //>>excludeEnd("ctx");
  25205. return $recv($2).__lt_eq($recv($recv(b)._theClass())._name());
  25206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25207. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,5)});
  25208. //>>excludeEnd("ctx");
  25209. }));
  25210. expandedClasses=$recv($Array())._new();
  25211. $recv(nodes)._do_((function(aNode){
  25212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25213. return $core.withContext(function($ctx2) {
  25214. //>>excludeEnd("ctx");
  25215. return $recv(aNode)._traverseClassesWith_(expandedClasses);
  25216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25217. }, function($ctx2) {$ctx2.fillBlock({aNode:aNode},$ctx1,6)});
  25218. //>>excludeEnd("ctx");
  25219. }));
  25220. $4=expandedClasses;
  25221. return $4;
  25222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25223. }, function($ctx1) {$ctx1.fill(self,"sortedClasses:",{classes:classes,children:children,others:others,nodes:nodes,expandedClasses:expandedClasses},$globals.Package.klass)});
  25224. //>>excludeEnd("ctx");
  25225. },
  25226. //>>excludeStart("ide", pragmas.excludeIdeData);
  25227. args: ["classes"],
  25228. 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",
  25229. referencedClasses: ["ClassSorterNode", "Array"],
  25230. //>>excludeEnd("ide");
  25231. messageSends: ["do:", "ifFalse:ifTrue:", "includes:", "superclass", "add:", "collect:", "on:classes:level:", "sorted:", "<=", "name", "theClass", "new", "traverseClassesWith:"]
  25232. }),
  25233. $globals.Package.klass);
  25234. $core.addClass('PackageStateObserver', $globals.Object, [], 'Kernel-Infrastructure');
  25235. //>>excludeStart("ide", pragmas.excludeIdeData);
  25236. $globals.PackageStateObserver.comment="My current instance listens for any changes in the system that might affect the state of a package (being dirty).";
  25237. //>>excludeEnd("ide");
  25238. $core.addMethod(
  25239. $core.method({
  25240. selector: "announcer",
  25241. protocol: 'accessing',
  25242. fn: function (){
  25243. var self=this;
  25244. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  25245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25246. return $core.withContext(function($ctx1) {
  25247. //>>excludeEnd("ctx");
  25248. var $1;
  25249. $1=$recv($SystemAnnouncer())._current();
  25250. return $1;
  25251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25252. }, function($ctx1) {$ctx1.fill(self,"announcer",{},$globals.PackageStateObserver)});
  25253. //>>excludeEnd("ctx");
  25254. },
  25255. //>>excludeStart("ide", pragmas.excludeIdeData);
  25256. args: [],
  25257. source: "announcer\x0a\x09^ SystemAnnouncer current",
  25258. referencedClasses: ["SystemAnnouncer"],
  25259. //>>excludeEnd("ide");
  25260. messageSends: ["current"]
  25261. }),
  25262. $globals.PackageStateObserver);
  25263. $core.addMethod(
  25264. $core.method({
  25265. selector: "observeSystem",
  25266. protocol: 'actions',
  25267. fn: function (){
  25268. var self=this;
  25269. function $PackageAdded(){return $globals.PackageAdded||(typeof PackageAdded=="undefined"?nil:PackageAdded)}
  25270. function $ClassAnnouncement(){return $globals.ClassAnnouncement||(typeof ClassAnnouncement=="undefined"?nil:ClassAnnouncement)}
  25271. function $MethodAnnouncement(){return $globals.MethodAnnouncement||(typeof MethodAnnouncement=="undefined"?nil:MethodAnnouncement)}
  25272. function $ProtocolAnnouncement(){return $globals.ProtocolAnnouncement||(typeof ProtocolAnnouncement=="undefined"?nil:ProtocolAnnouncement)}
  25273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25274. return $core.withContext(function($ctx1) {
  25275. //>>excludeEnd("ctx");
  25276. var $1,$2;
  25277. $1=self._announcer();
  25278. $recv($1)._on_send_to_($PackageAdded(),"onPackageAdded:",self);
  25279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25280. $ctx1.sendIdx["on:send:to:"]=1;
  25281. //>>excludeEnd("ctx");
  25282. $recv($1)._on_send_to_($ClassAnnouncement(),"onClassModification:",self);
  25283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25284. $ctx1.sendIdx["on:send:to:"]=2;
  25285. //>>excludeEnd("ctx");
  25286. $recv($1)._on_send_to_($MethodAnnouncement(),"onMethodModification:",self);
  25287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25288. $ctx1.sendIdx["on:send:to:"]=3;
  25289. //>>excludeEnd("ctx");
  25290. $2=$recv($1)._on_send_to_($ProtocolAnnouncement(),"onProtocolModification:",self);
  25291. return self;
  25292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25293. }, function($ctx1) {$ctx1.fill(self,"observeSystem",{},$globals.PackageStateObserver)});
  25294. //>>excludeEnd("ctx");
  25295. },
  25296. //>>excludeStart("ide", pragmas.excludeIdeData);
  25297. args: [],
  25298. 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",
  25299. referencedClasses: ["PackageAdded", "ClassAnnouncement", "MethodAnnouncement", "ProtocolAnnouncement"],
  25300. //>>excludeEnd("ide");
  25301. messageSends: ["on:send:to:", "announcer"]
  25302. }),
  25303. $globals.PackageStateObserver);
  25304. $core.addMethod(
  25305. $core.method({
  25306. selector: "onClassModification:",
  25307. protocol: 'reactions',
  25308. fn: function (anAnnouncement){
  25309. var self=this;
  25310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25311. return $core.withContext(function($ctx1) {
  25312. //>>excludeEnd("ctx");
  25313. var $1,$receiver;
  25314. $1=$recv(anAnnouncement)._theClass();
  25315. if(($receiver = $1) == null || $receiver.isNil){
  25316. $1;
  25317. } else {
  25318. var theClass;
  25319. theClass=$receiver;
  25320. $recv($recv(theClass)._package())._beDirty();
  25321. };
  25322. return self;
  25323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25324. }, function($ctx1) {$ctx1.fill(self,"onClassModification:",{anAnnouncement:anAnnouncement},$globals.PackageStateObserver)});
  25325. //>>excludeEnd("ctx");
  25326. },
  25327. //>>excludeStart("ide", pragmas.excludeIdeData);
  25328. args: ["anAnnouncement"],
  25329. source: "onClassModification: anAnnouncement\x0a\x09anAnnouncement theClass ifNotNil: [ :theClass | theClass package beDirty ]",
  25330. referencedClasses: [],
  25331. //>>excludeEnd("ide");
  25332. messageSends: ["ifNotNil:", "theClass", "beDirty", "package"]
  25333. }),
  25334. $globals.PackageStateObserver);
  25335. $core.addMethod(
  25336. $core.method({
  25337. selector: "onMethodModification:",
  25338. protocol: 'reactions',
  25339. fn: function (anAnnouncement){
  25340. var self=this;
  25341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25342. return $core.withContext(function($ctx1) {
  25343. //>>excludeEnd("ctx");
  25344. var $1,$receiver;
  25345. $1=$recv($recv(anAnnouncement)._method())._package();
  25346. if(($receiver = $1) == null || $receiver.isNil){
  25347. $1;
  25348. } else {
  25349. var package_;
  25350. package_=$receiver;
  25351. $recv(package_)._beDirty();
  25352. };
  25353. return self;
  25354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25355. }, function($ctx1) {$ctx1.fill(self,"onMethodModification:",{anAnnouncement:anAnnouncement},$globals.PackageStateObserver)});
  25356. //>>excludeEnd("ctx");
  25357. },
  25358. //>>excludeStart("ide", pragmas.excludeIdeData);
  25359. args: ["anAnnouncement"],
  25360. source: "onMethodModification: anAnnouncement\x0a\x09anAnnouncement method package ifNotNil: [ :package | package beDirty ]",
  25361. referencedClasses: [],
  25362. //>>excludeEnd("ide");
  25363. messageSends: ["ifNotNil:", "package", "method", "beDirty"]
  25364. }),
  25365. $globals.PackageStateObserver);
  25366. $core.addMethod(
  25367. $core.method({
  25368. selector: "onPackageAdded:",
  25369. protocol: 'reactions',
  25370. fn: function (anAnnouncement){
  25371. var self=this;
  25372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25373. return $core.withContext(function($ctx1) {
  25374. //>>excludeEnd("ctx");
  25375. $recv($recv(anAnnouncement)._package())._beDirty();
  25376. return self;
  25377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25378. }, function($ctx1) {$ctx1.fill(self,"onPackageAdded:",{anAnnouncement:anAnnouncement},$globals.PackageStateObserver)});
  25379. //>>excludeEnd("ctx");
  25380. },
  25381. //>>excludeStart("ide", pragmas.excludeIdeData);
  25382. args: ["anAnnouncement"],
  25383. source: "onPackageAdded: anAnnouncement\x0a\x09anAnnouncement package beDirty",
  25384. referencedClasses: [],
  25385. //>>excludeEnd("ide");
  25386. messageSends: ["beDirty", "package"]
  25387. }),
  25388. $globals.PackageStateObserver);
  25389. $core.addMethod(
  25390. $core.method({
  25391. selector: "onProtocolModification:",
  25392. protocol: 'reactions',
  25393. fn: function (anAnnouncement){
  25394. var self=this;
  25395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25396. return $core.withContext(function($ctx1) {
  25397. //>>excludeEnd("ctx");
  25398. var $1,$receiver;
  25399. $1=$recv(anAnnouncement)._package();
  25400. if(($receiver = $1) == null || $receiver.isNil){
  25401. $1;
  25402. } else {
  25403. var package_;
  25404. package_=$receiver;
  25405. $recv(package_)._beDirty();
  25406. };
  25407. return self;
  25408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25409. }, function($ctx1) {$ctx1.fill(self,"onProtocolModification:",{anAnnouncement:anAnnouncement},$globals.PackageStateObserver)});
  25410. //>>excludeEnd("ctx");
  25411. },
  25412. //>>excludeStart("ide", pragmas.excludeIdeData);
  25413. args: ["anAnnouncement"],
  25414. source: "onProtocolModification: anAnnouncement\x0a\x09anAnnouncement package ifNotNil: [ :package | package beDirty ]",
  25415. referencedClasses: [],
  25416. //>>excludeEnd("ide");
  25417. messageSends: ["ifNotNil:", "package", "beDirty"]
  25418. }),
  25419. $globals.PackageStateObserver);
  25420. $globals.PackageStateObserver.klass.iVarNames = ['current'];
  25421. $core.addMethod(
  25422. $core.method({
  25423. selector: "current",
  25424. protocol: 'accessing',
  25425. fn: function (){
  25426. var self=this;
  25427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25428. return $core.withContext(function($ctx1) {
  25429. //>>excludeEnd("ctx");
  25430. var $2,$1,$receiver;
  25431. $2=self["@current"];
  25432. if(($receiver = $2) == null || $receiver.isNil){
  25433. self["@current"]=self._new();
  25434. $1=self["@current"];
  25435. } else {
  25436. $1=$2;
  25437. };
  25438. return $1;
  25439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25440. }, function($ctx1) {$ctx1.fill(self,"current",{},$globals.PackageStateObserver.klass)});
  25441. //>>excludeEnd("ctx");
  25442. },
  25443. //>>excludeStart("ide", pragmas.excludeIdeData);
  25444. args: [],
  25445. source: "current\x0a\x09^ current ifNil: [ current := self new ]",
  25446. referencedClasses: [],
  25447. //>>excludeEnd("ide");
  25448. messageSends: ["ifNil:", "new"]
  25449. }),
  25450. $globals.PackageStateObserver.klass);
  25451. $core.addMethod(
  25452. $core.method({
  25453. selector: "initialize",
  25454. protocol: 'initialization',
  25455. fn: function (){
  25456. var self=this;
  25457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25458. return $core.withContext(function($ctx1) {
  25459. //>>excludeEnd("ctx");
  25460. $recv(self._current())._observeSystem();
  25461. return self;
  25462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25463. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.PackageStateObserver.klass)});
  25464. //>>excludeEnd("ctx");
  25465. },
  25466. //>>excludeStart("ide", pragmas.excludeIdeData);
  25467. args: [],
  25468. source: "initialize\x0a\x09self current observeSystem",
  25469. referencedClasses: [],
  25470. //>>excludeEnd("ide");
  25471. messageSends: ["observeSystem", "current"]
  25472. }),
  25473. $globals.PackageStateObserver.klass);
  25474. $core.addClass('Setting', $globals.Object, ['key', 'value', 'defaultValue'], 'Kernel-Infrastructure');
  25475. //>>excludeStart("ide", pragmas.excludeIdeData);
  25476. $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`";
  25477. //>>excludeEnd("ide");
  25478. $core.addMethod(
  25479. $core.method({
  25480. selector: "defaultValue",
  25481. protocol: 'accessing',
  25482. fn: function (){
  25483. var self=this;
  25484. var $1;
  25485. $1=self["@defaultValue"];
  25486. return $1;
  25487. },
  25488. //>>excludeStart("ide", pragmas.excludeIdeData);
  25489. args: [],
  25490. source: "defaultValue\x0a\x09^ defaultValue",
  25491. referencedClasses: [],
  25492. //>>excludeEnd("ide");
  25493. messageSends: []
  25494. }),
  25495. $globals.Setting);
  25496. $core.addMethod(
  25497. $core.method({
  25498. selector: "defaultValue:",
  25499. protocol: 'accessing',
  25500. fn: function (aStringifiableObject){
  25501. var self=this;
  25502. self["@defaultValue"]=aStringifiableObject;
  25503. return self;
  25504. },
  25505. //>>excludeStart("ide", pragmas.excludeIdeData);
  25506. args: ["aStringifiableObject"],
  25507. source: "defaultValue: aStringifiableObject\x0a\x09defaultValue := aStringifiableObject",
  25508. referencedClasses: [],
  25509. //>>excludeEnd("ide");
  25510. messageSends: []
  25511. }),
  25512. $globals.Setting);
  25513. $core.addMethod(
  25514. $core.method({
  25515. selector: "key",
  25516. protocol: 'accessing',
  25517. fn: function (){
  25518. var self=this;
  25519. var $1;
  25520. $1=self["@key"];
  25521. return $1;
  25522. },
  25523. //>>excludeStart("ide", pragmas.excludeIdeData);
  25524. args: [],
  25525. source: "key\x0a\x09^ key",
  25526. referencedClasses: [],
  25527. //>>excludeEnd("ide");
  25528. messageSends: []
  25529. }),
  25530. $globals.Setting);
  25531. $core.addMethod(
  25532. $core.method({
  25533. selector: "key:",
  25534. protocol: 'accessing',
  25535. fn: function (aString){
  25536. var self=this;
  25537. self["@key"]=aString;
  25538. return self;
  25539. },
  25540. //>>excludeStart("ide", pragmas.excludeIdeData);
  25541. args: ["aString"],
  25542. source: "key: aString\x0a\x09key := aString",
  25543. referencedClasses: [],
  25544. //>>excludeEnd("ide");
  25545. messageSends: []
  25546. }),
  25547. $globals.Setting);
  25548. $core.addMethod(
  25549. $core.method({
  25550. selector: "value",
  25551. protocol: 'accessing',
  25552. fn: function (){
  25553. var self=this;
  25554. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  25555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25556. return $core.withContext(function($ctx1) {
  25557. //>>excludeEnd("ctx");
  25558. var $1;
  25559. $1=$recv($recv($Smalltalk())._settings())._at_ifAbsent_(self._key(),(function(){
  25560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25561. return $core.withContext(function($ctx2) {
  25562. //>>excludeEnd("ctx");
  25563. return self._defaultValue();
  25564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25565. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  25566. //>>excludeEnd("ctx");
  25567. }));
  25568. return $1;
  25569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25570. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.Setting)});
  25571. //>>excludeEnd("ctx");
  25572. },
  25573. //>>excludeStart("ide", pragmas.excludeIdeData);
  25574. args: [],
  25575. source: "value\x0a\x09^ Smalltalk settings at: self key ifAbsent: [ self defaultValue ]",
  25576. referencedClasses: ["Smalltalk"],
  25577. //>>excludeEnd("ide");
  25578. messageSends: ["at:ifAbsent:", "settings", "key", "defaultValue"]
  25579. }),
  25580. $globals.Setting);
  25581. $core.addMethod(
  25582. $core.method({
  25583. selector: "value:",
  25584. protocol: 'accessing',
  25585. fn: function (aStringifiableObject){
  25586. var self=this;
  25587. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  25588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25589. return $core.withContext(function($ctx1) {
  25590. //>>excludeEnd("ctx");
  25591. var $1;
  25592. $1=$recv($recv($Smalltalk())._settings())._at_put_(self._key(),aStringifiableObject);
  25593. return $1;
  25594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25595. }, function($ctx1) {$ctx1.fill(self,"value:",{aStringifiableObject:aStringifiableObject},$globals.Setting)});
  25596. //>>excludeEnd("ctx");
  25597. },
  25598. //>>excludeStart("ide", pragmas.excludeIdeData);
  25599. args: ["aStringifiableObject"],
  25600. source: "value: aStringifiableObject\x0a\x09^ Smalltalk settings at: self key put: aStringifiableObject",
  25601. referencedClasses: ["Smalltalk"],
  25602. //>>excludeEnd("ide");
  25603. messageSends: ["at:put:", "settings", "key"]
  25604. }),
  25605. $globals.Setting);
  25606. $core.addMethod(
  25607. $core.method({
  25608. selector: "at:ifAbsent:",
  25609. protocol: 'instance creation',
  25610. fn: function (aString,aDefaultValue){
  25611. var self=this;
  25612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25613. return $core.withContext(function($ctx1) {
  25614. //>>excludeEnd("ctx");
  25615. var $2,$3,$1;
  25616. $2=(
  25617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25618. $ctx1.supercall = true,
  25619. //>>excludeEnd("ctx");
  25620. $globals.Setting.klass.superclass.fn.prototype._new.apply($recv(self), []));
  25621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25622. $ctx1.supercall = false;
  25623. //>>excludeEnd("ctx");;
  25624. $recv($2)._key_(aString);
  25625. $recv($2)._defaultValue_(aDefaultValue);
  25626. $3=$recv($2)._yourself();
  25627. $1=$3;
  25628. return $1;
  25629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25630. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aString:aString,aDefaultValue:aDefaultValue},$globals.Setting.klass)});
  25631. //>>excludeEnd("ctx");
  25632. },
  25633. //>>excludeStart("ide", pragmas.excludeIdeData);
  25634. args: ["aString", "aDefaultValue"],
  25635. source: "at: aString ifAbsent: aDefaultValue\x0a\x09\x0a\x09^ super new\x0a\x09\x09key: aString;\x0a\x09\x09defaultValue: aDefaultValue;\x0a\x09\x09yourself",
  25636. referencedClasses: [],
  25637. //>>excludeEnd("ide");
  25638. messageSends: ["key:", "new", "defaultValue:", "yourself"]
  25639. }),
  25640. $globals.Setting.klass);
  25641. $core.addMethod(
  25642. $core.method({
  25643. selector: "new",
  25644. protocol: 'instance creation',
  25645. fn: function (){
  25646. var self=this;
  25647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25648. return $core.withContext(function($ctx1) {
  25649. //>>excludeEnd("ctx");
  25650. self._shouldNotImplement();
  25651. return self;
  25652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25653. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.Setting.klass)});
  25654. //>>excludeEnd("ctx");
  25655. },
  25656. //>>excludeStart("ide", pragmas.excludeIdeData);
  25657. args: [],
  25658. source: "new\x0a\x09self shouldNotImplement",
  25659. referencedClasses: [],
  25660. //>>excludeEnd("ide");
  25661. messageSends: ["shouldNotImplement"]
  25662. }),
  25663. $globals.Setting.klass);
  25664. $core.addClass('SmalltalkImage', $globals.Object, [], 'Kernel-Infrastructure');
  25665. //>>excludeStart("ide", pragmas.excludeIdeData);
  25666. $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.";
  25667. //>>excludeEnd("ide");
  25668. $core.addMethod(
  25669. $core.method({
  25670. selector: "addGlobalJsVariable:",
  25671. protocol: 'globals',
  25672. fn: function (aString){
  25673. var self=this;
  25674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25675. return $core.withContext(function($ctx1) {
  25676. //>>excludeEnd("ctx");
  25677. $recv(self._globalJsVariables())._add_(aString);
  25678. return self;
  25679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25680. }, function($ctx1) {$ctx1.fill(self,"addGlobalJsVariable:",{aString:aString},$globals.SmalltalkImage)});
  25681. //>>excludeEnd("ctx");
  25682. },
  25683. //>>excludeStart("ide", pragmas.excludeIdeData);
  25684. args: ["aString"],
  25685. source: "addGlobalJsVariable: aString\x0a\x09self globalJsVariables add: aString",
  25686. referencedClasses: [],
  25687. //>>excludeEnd("ide");
  25688. messageSends: ["add:", "globalJsVariables"]
  25689. }),
  25690. $globals.SmalltalkImage);
  25691. $core.addMethod(
  25692. $core.method({
  25693. selector: "amdRequire",
  25694. protocol: 'accessing amd',
  25695. fn: function (){
  25696. var self=this;
  25697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25698. return $core.withContext(function($ctx1) {
  25699. //>>excludeEnd("ctx");
  25700. var $1;
  25701. $1=$recv(self._core())._at_("amdRequire");
  25702. return $1;
  25703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25704. }, function($ctx1) {$ctx1.fill(self,"amdRequire",{},$globals.SmalltalkImage)});
  25705. //>>excludeEnd("ctx");
  25706. },
  25707. //>>excludeStart("ide", pragmas.excludeIdeData);
  25708. args: [],
  25709. source: "amdRequire\x0a\x09^ self core at: 'amdRequire'",
  25710. referencedClasses: [],
  25711. //>>excludeEnd("ide");
  25712. messageSends: ["at:", "core"]
  25713. }),
  25714. $globals.SmalltalkImage);
  25715. $core.addMethod(
  25716. $core.method({
  25717. selector: "asSmalltalkException:",
  25718. protocol: 'error handling',
  25719. fn: function (anObject){
  25720. var self=this;
  25721. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  25722. function $JavaScriptException(){return $globals.JavaScriptException||(typeof JavaScriptException=="undefined"?nil:JavaScriptException)}
  25723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25724. return $core.withContext(function($ctx1) {
  25725. //>>excludeEnd("ctx");
  25726. var $2,$1;
  25727. $2=$recv(self._isSmalltalkObject_(anObject))._and_((function(){
  25728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25729. return $core.withContext(function($ctx2) {
  25730. //>>excludeEnd("ctx");
  25731. return $recv(anObject)._isKindOf_($Error());
  25732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25733. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  25734. //>>excludeEnd("ctx");
  25735. }));
  25736. if($core.assert($2)){
  25737. $1=anObject;
  25738. } else {
  25739. $1=$recv($JavaScriptException())._on_(anObject);
  25740. };
  25741. return $1;
  25742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25743. }, function($ctx1) {$ctx1.fill(self,"asSmalltalkException:",{anObject:anObject},$globals.SmalltalkImage)});
  25744. //>>excludeEnd("ctx");
  25745. },
  25746. //>>excludeStart("ide", pragmas.excludeIdeData);
  25747. args: ["anObject"],
  25748. 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 ]",
  25749. referencedClasses: ["Error", "JavaScriptException"],
  25750. //>>excludeEnd("ide");
  25751. messageSends: ["ifTrue:ifFalse:", "and:", "isSmalltalkObject:", "isKindOf:", "on:"]
  25752. }),
  25753. $globals.SmalltalkImage);
  25754. $core.addMethod(
  25755. $core.method({
  25756. selector: "basicCreatePackage:",
  25757. protocol: 'private',
  25758. fn: function (packageName){
  25759. var self=this;
  25760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25761. return $core.withContext(function($ctx1) {
  25762. //>>excludeEnd("ctx");
  25763. return $core.addPackage(packageName);
  25764. return self;
  25765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25766. }, function($ctx1) {$ctx1.fill(self,"basicCreatePackage:",{packageName:packageName},$globals.SmalltalkImage)});
  25767. //>>excludeEnd("ctx");
  25768. },
  25769. //>>excludeStart("ide", pragmas.excludeIdeData);
  25770. args: ["packageName"],
  25771. 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)>",
  25772. referencedClasses: [],
  25773. //>>excludeEnd("ide");
  25774. messageSends: []
  25775. }),
  25776. $globals.SmalltalkImage);
  25777. $core.addMethod(
  25778. $core.method({
  25779. selector: "basicParse:",
  25780. protocol: 'private',
  25781. fn: function (aString){
  25782. var self=this;
  25783. function $SmalltalkParser(){return $globals.SmalltalkParser||(typeof SmalltalkParser=="undefined"?nil:SmalltalkParser)}
  25784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25785. return $core.withContext(function($ctx1) {
  25786. //>>excludeEnd("ctx");
  25787. var $1;
  25788. $1=$recv($SmalltalkParser())._parse_(aString);
  25789. return $1;
  25790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25791. }, function($ctx1) {$ctx1.fill(self,"basicParse:",{aString:aString},$globals.SmalltalkImage)});
  25792. //>>excludeEnd("ctx");
  25793. },
  25794. //>>excludeStart("ide", pragmas.excludeIdeData);
  25795. args: ["aString"],
  25796. source: "basicParse: aString\x0a\x09^ SmalltalkParser parse: aString",
  25797. referencedClasses: ["SmalltalkParser"],
  25798. //>>excludeEnd("ide");
  25799. messageSends: ["parse:"]
  25800. }),
  25801. $globals.SmalltalkImage);
  25802. $core.addMethod(
  25803. $core.method({
  25804. selector: "basicRegisterPackage:",
  25805. protocol: 'private',
  25806. fn: function (aPackage){
  25807. var self=this;
  25808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25809. return $core.withContext(function($ctx1) {
  25810. //>>excludeEnd("ctx");
  25811. $core.packages[aPackage.pkgName]=aPackage;
  25812. return self;
  25813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25814. }, function($ctx1) {$ctx1.fill(self,"basicRegisterPackage:",{aPackage:aPackage},$globals.SmalltalkImage)});
  25815. //>>excludeEnd("ctx");
  25816. },
  25817. //>>excludeStart("ide", pragmas.excludeIdeData);
  25818. args: ["aPackage"],
  25819. source: "basicRegisterPackage: aPackage\x0a\x09\x22Put aPackage in $core.packages object.\x22\x0a\x09<$core.packages[aPackage.pkgName]=aPackage>",
  25820. referencedClasses: [],
  25821. //>>excludeEnd("ide");
  25822. messageSends: []
  25823. }),
  25824. $globals.SmalltalkImage);
  25825. $core.addMethod(
  25826. $core.method({
  25827. selector: "cancelOptOut:",
  25828. protocol: 'accessing',
  25829. fn: function (anObject){
  25830. var self=this;
  25831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25832. return $core.withContext(function($ctx1) {
  25833. //>>excludeEnd("ctx");
  25834. delete anObject.klass;
  25835. return self;
  25836. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25837. }, function($ctx1) {$ctx1.fill(self,"cancelOptOut:",{anObject:anObject},$globals.SmalltalkImage)});
  25838. //>>excludeEnd("ctx");
  25839. },
  25840. //>>excludeStart("ide", pragmas.excludeIdeData);
  25841. args: ["anObject"],
  25842. source: "cancelOptOut: anObject\x0a\x09\x22A Smalltalk object has a 'klass' property.\x0a\x09If this property is shadowed for anObject by optOut:,\x0a\x09the object is treated as plain JS object.\x0a\x09This removes the shadow and anObject is Smalltalk object\x0a\x09again if it was before.\x22\x0a\x09\x0a\x09<delete anObject.klass>",
  25843. referencedClasses: [],
  25844. //>>excludeEnd("ide");
  25845. messageSends: []
  25846. }),
  25847. $globals.SmalltalkImage);
  25848. $core.addMethod(
  25849. $core.method({
  25850. selector: "classes",
  25851. protocol: 'classes',
  25852. fn: function (){
  25853. var self=this;
  25854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25855. return $core.withContext(function($ctx1) {
  25856. //>>excludeEnd("ctx");
  25857. return $core.classes();
  25858. return self;
  25859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25860. }, function($ctx1) {$ctx1.fill(self,"classes",{},$globals.SmalltalkImage)});
  25861. //>>excludeEnd("ctx");
  25862. },
  25863. //>>excludeStart("ide", pragmas.excludeIdeData);
  25864. args: [],
  25865. source: "classes\x0a\x09<return $core.classes()>",
  25866. referencedClasses: [],
  25867. //>>excludeEnd("ide");
  25868. messageSends: []
  25869. }),
  25870. $globals.SmalltalkImage);
  25871. $core.addMethod(
  25872. $core.method({
  25873. selector: "core",
  25874. protocol: 'accessing',
  25875. fn: function (){
  25876. var self=this;
  25877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25878. return $core.withContext(function($ctx1) {
  25879. //>>excludeEnd("ctx");
  25880. return $core;
  25881. return self;
  25882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25883. }, function($ctx1) {$ctx1.fill(self,"core",{},$globals.SmalltalkImage)});
  25884. //>>excludeEnd("ctx");
  25885. },
  25886. //>>excludeStart("ide", pragmas.excludeIdeData);
  25887. args: [],
  25888. source: "core\x0a\x09<return $core>",
  25889. referencedClasses: [],
  25890. //>>excludeEnd("ide");
  25891. messageSends: []
  25892. }),
  25893. $globals.SmalltalkImage);
  25894. $core.addMethod(
  25895. $core.method({
  25896. selector: "createPackage:",
  25897. protocol: 'packages',
  25898. fn: function (packageName){
  25899. var self=this;
  25900. var package_,announcement;
  25901. function $PackageAdded(){return $globals.PackageAdded||(typeof PackageAdded=="undefined"?nil:PackageAdded)}
  25902. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  25903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25904. return $core.withContext(function($ctx1) {
  25905. //>>excludeEnd("ctx");
  25906. var $1,$2,$3;
  25907. package_=self._basicCreatePackage_(packageName);
  25908. $1=$recv($PackageAdded())._new();
  25909. $recv($1)._package_(package_);
  25910. $2=$recv($1)._yourself();
  25911. announcement=$2;
  25912. $recv($recv($SystemAnnouncer())._current())._announce_(announcement);
  25913. $3=package_;
  25914. return $3;
  25915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25916. }, function($ctx1) {$ctx1.fill(self,"createPackage:",{packageName:packageName,package_:package_,announcement:announcement},$globals.SmalltalkImage)});
  25917. //>>excludeEnd("ctx");
  25918. },
  25919. //>>excludeStart("ide", pragmas.excludeIdeData);
  25920. args: ["packageName"],
  25921. 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",
  25922. referencedClasses: ["PackageAdded", "SystemAnnouncer"],
  25923. //>>excludeEnd("ide");
  25924. messageSends: ["basicCreatePackage:", "package:", "new", "yourself", "announce:", "current"]
  25925. }),
  25926. $globals.SmalltalkImage);
  25927. $core.addMethod(
  25928. $core.method({
  25929. selector: "defaultAmdNamespace",
  25930. protocol: 'accessing amd',
  25931. fn: function (){
  25932. var self=this;
  25933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25934. return $core.withContext(function($ctx1) {
  25935. //>>excludeEnd("ctx");
  25936. var $1;
  25937. $1="transport.defaultAmdNamespace"._settingValue();
  25938. return $1;
  25939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25940. }, function($ctx1) {$ctx1.fill(self,"defaultAmdNamespace",{},$globals.SmalltalkImage)});
  25941. //>>excludeEnd("ctx");
  25942. },
  25943. //>>excludeStart("ide", pragmas.excludeIdeData);
  25944. args: [],
  25945. source: "defaultAmdNamespace\x0a\x09^ 'transport.defaultAmdNamespace' settingValue",
  25946. referencedClasses: [],
  25947. //>>excludeEnd("ide");
  25948. messageSends: ["settingValue"]
  25949. }),
  25950. $globals.SmalltalkImage);
  25951. $core.addMethod(
  25952. $core.method({
  25953. selector: "defaultAmdNamespace:",
  25954. protocol: 'accessing amd',
  25955. fn: function (aString){
  25956. var self=this;
  25957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25958. return $core.withContext(function($ctx1) {
  25959. //>>excludeEnd("ctx");
  25960. "transport.defaultAmdNamespace"._settingValue_(aString);
  25961. return self;
  25962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25963. }, function($ctx1) {$ctx1.fill(self,"defaultAmdNamespace:",{aString:aString},$globals.SmalltalkImage)});
  25964. //>>excludeEnd("ctx");
  25965. },
  25966. //>>excludeStart("ide", pragmas.excludeIdeData);
  25967. args: ["aString"],
  25968. source: "defaultAmdNamespace: aString\x0a\x09'transport.defaultAmdNamespace' settingValue: aString",
  25969. referencedClasses: [],
  25970. //>>excludeEnd("ide");
  25971. messageSends: ["settingValue:"]
  25972. }),
  25973. $globals.SmalltalkImage);
  25974. $core.addMethod(
  25975. $core.method({
  25976. selector: "deleteClass:",
  25977. protocol: 'private',
  25978. fn: function (aClass){
  25979. var self=this;
  25980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25981. return $core.withContext(function($ctx1) {
  25982. //>>excludeEnd("ctx");
  25983. $core.removeClass(aClass);
  25984. return self;
  25985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25986. }, function($ctx1) {$ctx1.fill(self,"deleteClass:",{aClass:aClass},$globals.SmalltalkImage)});
  25987. //>>excludeEnd("ctx");
  25988. },
  25989. //>>excludeStart("ide", pragmas.excludeIdeData);
  25990. args: ["aClass"],
  25991. source: "deleteClass: aClass\x0a\x09\x22Deletes a class by deleting its binding only. Use #removeClass instead\x22\x0a\x09\x0a\x09<$core.removeClass(aClass)>",
  25992. referencedClasses: [],
  25993. //>>excludeEnd("ide");
  25994. messageSends: []
  25995. }),
  25996. $globals.SmalltalkImage);
  25997. $core.addMethod(
  25998. $core.method({
  25999. selector: "deleteGlobalJsVariable:",
  26000. protocol: 'globals',
  26001. fn: function (aString){
  26002. var self=this;
  26003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26004. return $core.withContext(function($ctx1) {
  26005. //>>excludeEnd("ctx");
  26006. $recv(self._globalJsVariables())._remove_ifAbsent_(aString,(function(){
  26007. }));
  26008. return self;
  26009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26010. }, function($ctx1) {$ctx1.fill(self,"deleteGlobalJsVariable:",{aString:aString},$globals.SmalltalkImage)});
  26011. //>>excludeEnd("ctx");
  26012. },
  26013. //>>excludeStart("ide", pragmas.excludeIdeData);
  26014. args: ["aString"],
  26015. source: "deleteGlobalJsVariable: aString\x0a\x09self globalJsVariables remove: aString ifAbsent:[]",
  26016. referencedClasses: [],
  26017. //>>excludeEnd("ide");
  26018. messageSends: ["remove:ifAbsent:", "globalJsVariables"]
  26019. }),
  26020. $globals.SmalltalkImage);
  26021. $core.addMethod(
  26022. $core.method({
  26023. selector: "deletePackage:",
  26024. protocol: 'private',
  26025. fn: function (packageName){
  26026. var self=this;
  26027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26028. return $core.withContext(function($ctx1) {
  26029. //>>excludeEnd("ctx");
  26030. delete $core.packages[packageName];
  26031. return self;
  26032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26033. }, function($ctx1) {$ctx1.fill(self,"deletePackage:",{packageName:packageName},$globals.SmalltalkImage)});
  26034. //>>excludeEnd("ctx");
  26035. },
  26036. //>>excludeStart("ide", pragmas.excludeIdeData);
  26037. args: ["packageName"],
  26038. 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]>",
  26039. referencedClasses: [],
  26040. //>>excludeEnd("ide");
  26041. messageSends: []
  26042. }),
  26043. $globals.SmalltalkImage);
  26044. $core.addMethod(
  26045. $core.method({
  26046. selector: "globalJsVariables",
  26047. protocol: 'globals',
  26048. fn: function (){
  26049. var self=this;
  26050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26051. return $core.withContext(function($ctx1) {
  26052. //>>excludeEnd("ctx");
  26053. return $core.globalJsVariables;
  26054. return self;
  26055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26056. }, function($ctx1) {$ctx1.fill(self,"globalJsVariables",{},$globals.SmalltalkImage)});
  26057. //>>excludeEnd("ctx");
  26058. },
  26059. //>>excludeStart("ide", pragmas.excludeIdeData);
  26060. args: [],
  26061. source: "globalJsVariables\x0a\x09\x22Array of global JavaScript variables\x22\x0a\x09<return $core.globalJsVariables>",
  26062. referencedClasses: [],
  26063. //>>excludeEnd("ide");
  26064. messageSends: []
  26065. }),
  26066. $globals.SmalltalkImage);
  26067. $core.addMethod(
  26068. $core.method({
  26069. selector: "globals",
  26070. protocol: 'accessing',
  26071. fn: function (){
  26072. var self=this;
  26073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26074. return $core.withContext(function($ctx1) {
  26075. //>>excludeEnd("ctx");
  26076. return $globals;
  26077. return self;
  26078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26079. }, function($ctx1) {$ctx1.fill(self,"globals",{},$globals.SmalltalkImage)});
  26080. //>>excludeEnd("ctx");
  26081. },
  26082. //>>excludeStart("ide", pragmas.excludeIdeData);
  26083. args: [],
  26084. source: "globals\x0a\x09<return $globals>",
  26085. referencedClasses: [],
  26086. //>>excludeEnd("ide");
  26087. messageSends: []
  26088. }),
  26089. $globals.SmalltalkImage);
  26090. $core.addMethod(
  26091. $core.method({
  26092. selector: "includesKey:",
  26093. protocol: 'accessing',
  26094. fn: function (aKey){
  26095. var self=this;
  26096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26097. return $core.withContext(function($ctx1) {
  26098. //>>excludeEnd("ctx");
  26099. return $core.hasOwnProperty(aKey);
  26100. return self;
  26101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26102. }, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey},$globals.SmalltalkImage)});
  26103. //>>excludeEnd("ctx");
  26104. },
  26105. //>>excludeStart("ide", pragmas.excludeIdeData);
  26106. args: ["aKey"],
  26107. source: "includesKey: aKey\x0a\x09<return $core.hasOwnProperty(aKey)>",
  26108. referencedClasses: [],
  26109. //>>excludeEnd("ide");
  26110. messageSends: []
  26111. }),
  26112. $globals.SmalltalkImage);
  26113. $core.addMethod(
  26114. $core.method({
  26115. selector: "isSmalltalkObject:",
  26116. protocol: 'testing',
  26117. fn: function (anObject){
  26118. var self=this;
  26119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26120. return $core.withContext(function($ctx1) {
  26121. //>>excludeEnd("ctx");
  26122. return typeof anObject.klass !== 'undefined';
  26123. return self;
  26124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26125. }, function($ctx1) {$ctx1.fill(self,"isSmalltalkObject:",{anObject:anObject},$globals.SmalltalkImage)});
  26126. //>>excludeEnd("ctx");
  26127. },
  26128. //>>excludeStart("ide", pragmas.excludeIdeData);
  26129. args: ["anObject"],
  26130. 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'>",
  26131. referencedClasses: [],
  26132. //>>excludeEnd("ide");
  26133. messageSends: []
  26134. }),
  26135. $globals.SmalltalkImage);
  26136. $core.addMethod(
  26137. $core.method({
  26138. selector: "optOut:",
  26139. protocol: 'accessing',
  26140. fn: function (anObject){
  26141. var self=this;
  26142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26143. return $core.withContext(function($ctx1) {
  26144. //>>excludeEnd("ctx");
  26145. anObject.klass = null;
  26146. return self;
  26147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26148. }, function($ctx1) {$ctx1.fill(self,"optOut:",{anObject:anObject},$globals.SmalltalkImage)});
  26149. //>>excludeEnd("ctx");
  26150. },
  26151. //>>excludeStart("ide", pragmas.excludeIdeData);
  26152. args: ["anObject"],
  26153. source: "optOut: anObject\x0a\x09\x22A Smalltalk object has a 'klass' property.\x0a\x09This shadows the property for anObject.\x0a\x09The object is treated as plain JS object following this.\x22\x0a\x09\x0a\x09<anObject.klass = null>",
  26154. referencedClasses: [],
  26155. //>>excludeEnd("ide");
  26156. messageSends: []
  26157. }),
  26158. $globals.SmalltalkImage);
  26159. $core.addMethod(
  26160. $core.method({
  26161. selector: "packageAt:",
  26162. protocol: 'packages',
  26163. fn: function (packageName){
  26164. var self=this;
  26165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26166. return $core.withContext(function($ctx1) {
  26167. //>>excludeEnd("ctx");
  26168. return $core.packages[packageName];
  26169. return self;
  26170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26171. }, function($ctx1) {$ctx1.fill(self,"packageAt:",{packageName:packageName},$globals.SmalltalkImage)});
  26172. //>>excludeEnd("ctx");
  26173. },
  26174. //>>excludeStart("ide", pragmas.excludeIdeData);
  26175. args: ["packageName"],
  26176. source: "packageAt: packageName\x0a\x09<return $core.packages[packageName]>",
  26177. referencedClasses: [],
  26178. //>>excludeEnd("ide");
  26179. messageSends: []
  26180. }),
  26181. $globals.SmalltalkImage);
  26182. $core.addMethod(
  26183. $core.method({
  26184. selector: "packageAt:ifAbsent:",
  26185. protocol: 'packages',
  26186. fn: function (packageName,aBlock){
  26187. var self=this;
  26188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26189. return $core.withContext(function($ctx1) {
  26190. //>>excludeEnd("ctx");
  26191. var $2,$1;
  26192. $2=self._packageAt_(packageName);
  26193. $1=$recv($2)._ifNil_(aBlock);
  26194. return $1;
  26195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26196. }, function($ctx1) {$ctx1.fill(self,"packageAt:ifAbsent:",{packageName:packageName,aBlock:aBlock},$globals.SmalltalkImage)});
  26197. //>>excludeEnd("ctx");
  26198. },
  26199. //>>excludeStart("ide", pragmas.excludeIdeData);
  26200. args: ["packageName", "aBlock"],
  26201. source: "packageAt: packageName ifAbsent: aBlock\x0a\x09^ (self packageAt: packageName) ifNil: aBlock",
  26202. referencedClasses: [],
  26203. //>>excludeEnd("ide");
  26204. messageSends: ["ifNil:", "packageAt:"]
  26205. }),
  26206. $globals.SmalltalkImage);
  26207. $core.addMethod(
  26208. $core.method({
  26209. selector: "packages",
  26210. protocol: 'packages',
  26211. fn: function (){
  26212. var self=this;
  26213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26214. return $core.withContext(function($ctx1) {
  26215. //>>excludeEnd("ctx");
  26216. return Object.keys($core.packages).map(function(k) {
  26217. return $core.packages[k];
  26218. })
  26219. ;
  26220. return self;
  26221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26222. }, function($ctx1) {$ctx1.fill(self,"packages",{},$globals.SmalltalkImage)});
  26223. //>>excludeEnd("ctx");
  26224. },
  26225. //>>excludeStart("ide", pragmas.excludeIdeData);
  26226. args: [],
  26227. 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>",
  26228. referencedClasses: [],
  26229. //>>excludeEnd("ide");
  26230. messageSends: []
  26231. }),
  26232. $globals.SmalltalkImage);
  26233. $core.addMethod(
  26234. $core.method({
  26235. selector: "parse:",
  26236. protocol: 'accessing',
  26237. fn: function (aString){
  26238. var self=this;
  26239. var result;
  26240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26241. return $core.withContext(function($ctx1) {
  26242. //>>excludeEnd("ctx");
  26243. var $2,$3,$1;
  26244. $recv((function(){
  26245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26246. return $core.withContext(function($ctx2) {
  26247. //>>excludeEnd("ctx");
  26248. result=self._basicParse_(aString);
  26249. return result;
  26250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26251. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  26252. //>>excludeEnd("ctx");
  26253. }))._tryCatch_((function(ex){
  26254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26255. return $core.withContext(function($ctx2) {
  26256. //>>excludeEnd("ctx");
  26257. return $recv(self._parseError_parsing_(ex,aString))._signal();
  26258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26259. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,2)});
  26260. //>>excludeEnd("ctx");
  26261. }));
  26262. $2=result;
  26263. $recv($2)._source_(aString);
  26264. $3=$recv($2)._yourself();
  26265. $1=$3;
  26266. return $1;
  26267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26268. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString,result:result},$globals.SmalltalkImage)});
  26269. //>>excludeEnd("ctx");
  26270. },
  26271. //>>excludeStart("ide", pragmas.excludeIdeData);
  26272. args: ["aString"],
  26273. 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",
  26274. referencedClasses: [],
  26275. //>>excludeEnd("ide");
  26276. messageSends: ["tryCatch:", "basicParse:", "signal", "parseError:parsing:", "source:", "yourself"]
  26277. }),
  26278. $globals.SmalltalkImage);
  26279. $core.addMethod(
  26280. $core.method({
  26281. selector: "parseError:parsing:",
  26282. protocol: 'error handling',
  26283. fn: function (anException,aString){
  26284. var self=this;
  26285. function $ParseError(){return $globals.ParseError||(typeof ParseError=="undefined"?nil:ParseError)}
  26286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26287. return $core.withContext(function($ctx1) {
  26288. //>>excludeEnd("ctx");
  26289. var $2,$8,$7,$6,$9,$5,$4,$3,$1;
  26290. $2=$recv($ParseError())._new();
  26291. $8=$recv(anException)._basicAt_("line");
  26292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26293. $ctx1.sendIdx["basicAt:"]=1;
  26294. //>>excludeEnd("ctx");
  26295. $7="Parse error on line ".__comma($8);
  26296. $6=$recv($7).__comma(" column ");
  26297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26298. $ctx1.sendIdx[","]=4;
  26299. //>>excludeEnd("ctx");
  26300. $9=$recv(anException)._basicAt_("column");
  26301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26302. $ctx1.sendIdx["basicAt:"]=2;
  26303. //>>excludeEnd("ctx");
  26304. $5=$recv($6).__comma($9);
  26305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26306. $ctx1.sendIdx[","]=3;
  26307. //>>excludeEnd("ctx");
  26308. $4=$recv($5).__comma(" : Unexpected character ");
  26309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26310. $ctx1.sendIdx[","]=2;
  26311. //>>excludeEnd("ctx");
  26312. $3=$recv($4).__comma($recv(anException)._basicAt_("found"));
  26313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26314. $ctx1.sendIdx[","]=1;
  26315. //>>excludeEnd("ctx");
  26316. $1=$recv($2)._messageText_($3);
  26317. return $1;
  26318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26319. }, function($ctx1) {$ctx1.fill(self,"parseError:parsing:",{anException:anException,aString:aString},$globals.SmalltalkImage)});
  26320. //>>excludeEnd("ctx");
  26321. },
  26322. //>>excludeStart("ide", pragmas.excludeIdeData);
  26323. args: ["anException", "aString"],
  26324. 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')",
  26325. referencedClasses: ["ParseError"],
  26326. //>>excludeEnd("ide");
  26327. messageSends: ["messageText:", "new", ",", "basicAt:"]
  26328. }),
  26329. $globals.SmalltalkImage);
  26330. $core.addMethod(
  26331. $core.method({
  26332. selector: "pseudoVariableNames",
  26333. protocol: 'accessing',
  26334. fn: function (){
  26335. var self=this;
  26336. var $1;
  26337. $1=["self", "super", "nil", "true", "false", "thisContext"];
  26338. return $1;
  26339. },
  26340. //>>excludeStart("ide", pragmas.excludeIdeData);
  26341. args: [],
  26342. source: "pseudoVariableNames\x0a\x09^ #('self' 'super' 'nil' 'true' 'false' 'thisContext')",
  26343. referencedClasses: [],
  26344. //>>excludeEnd("ide");
  26345. messageSends: []
  26346. }),
  26347. $globals.SmalltalkImage);
  26348. $core.addMethod(
  26349. $core.method({
  26350. selector: "readJSObject:",
  26351. protocol: 'accessing',
  26352. fn: function (anObject){
  26353. var self=this;
  26354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26355. return $core.withContext(function($ctx1) {
  26356. //>>excludeEnd("ctx");
  26357. return $core.readJSObject(anObject);
  26358. return self;
  26359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26360. }, function($ctx1) {$ctx1.fill(self,"readJSObject:",{anObject:anObject},$globals.SmalltalkImage)});
  26361. //>>excludeEnd("ctx");
  26362. },
  26363. //>>excludeStart("ide", pragmas.excludeIdeData);
  26364. args: ["anObject"],
  26365. source: "readJSObject: anObject\x0a\x09<return $core.readJSObject(anObject)>",
  26366. referencedClasses: [],
  26367. //>>excludeEnd("ide");
  26368. messageSends: []
  26369. }),
  26370. $globals.SmalltalkImage);
  26371. $core.addMethod(
  26372. $core.method({
  26373. selector: "removeClass:",
  26374. protocol: 'classes',
  26375. fn: function (aClass){
  26376. var self=this;
  26377. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  26378. function $ClassRemoved(){return $globals.ClassRemoved||(typeof ClassRemoved=="undefined"?nil:ClassRemoved)}
  26379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26380. return $core.withContext(function($ctx1) {
  26381. //>>excludeEnd("ctx");
  26382. var $1,$2,$3;
  26383. $1=$recv(aClass)._isMetaclass();
  26384. if($core.assert($1)){
  26385. self._error_($recv($recv(aClass)._asString()).__comma(" is a Metaclass and cannot be removed!"));
  26386. };
  26387. self._deleteClass_(aClass);
  26388. $2=$recv($ClassRemoved())._new();
  26389. $recv($2)._theClass_(aClass);
  26390. $3=$recv($2)._yourself();
  26391. $recv($recv($SystemAnnouncer())._current())._announce_($3);
  26392. return self;
  26393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26394. }, function($ctx1) {$ctx1.fill(self,"removeClass:",{aClass:aClass},$globals.SmalltalkImage)});
  26395. //>>excludeEnd("ctx");
  26396. },
  26397. //>>excludeStart("ide", pragmas.excludeIdeData);
  26398. args: ["aClass"],
  26399. 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)",
  26400. referencedClasses: ["SystemAnnouncer", "ClassRemoved"],
  26401. //>>excludeEnd("ide");
  26402. messageSends: ["ifTrue:", "isMetaclass", "error:", ",", "asString", "deleteClass:", "announce:", "current", "theClass:", "new", "yourself"]
  26403. }),
  26404. $globals.SmalltalkImage);
  26405. $core.addMethod(
  26406. $core.method({
  26407. selector: "removePackage:",
  26408. protocol: 'packages',
  26409. fn: function (packageName){
  26410. var self=this;
  26411. var pkg;
  26412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26413. return $core.withContext(function($ctx1) {
  26414. //>>excludeEnd("ctx");
  26415. pkg=self._packageAt_ifAbsent_(packageName,(function(){
  26416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26417. return $core.withContext(function($ctx2) {
  26418. //>>excludeEnd("ctx");
  26419. return self._error_("Missing package: ".__comma(packageName));
  26420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26421. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  26422. //>>excludeEnd("ctx");
  26423. }));
  26424. $recv($recv(pkg)._classes())._do_((function(each){
  26425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26426. return $core.withContext(function($ctx2) {
  26427. //>>excludeEnd("ctx");
  26428. return self._removeClass_(each);
  26429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26430. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  26431. //>>excludeEnd("ctx");
  26432. }));
  26433. self._deletePackage_(packageName);
  26434. return self;
  26435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26436. }, function($ctx1) {$ctx1.fill(self,"removePackage:",{packageName:packageName,pkg:pkg},$globals.SmalltalkImage)});
  26437. //>>excludeEnd("ctx");
  26438. },
  26439. //>>excludeStart("ide", pragmas.excludeIdeData);
  26440. args: ["packageName"],
  26441. 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",
  26442. referencedClasses: [],
  26443. //>>excludeEnd("ide");
  26444. messageSends: ["packageAt:ifAbsent:", "error:", ",", "do:", "classes", "removeClass:", "deletePackage:"]
  26445. }),
  26446. $globals.SmalltalkImage);
  26447. $core.addMethod(
  26448. $core.method({
  26449. selector: "renamePackage:to:",
  26450. protocol: 'packages',
  26451. fn: function (packageName,newName){
  26452. var self=this;
  26453. var pkg;
  26454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26455. return $core.withContext(function($ctx1) {
  26456. //>>excludeEnd("ctx");
  26457. var $1,$2,$receiver;
  26458. pkg=self._packageAt_ifAbsent_(packageName,(function(){
  26459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26460. return $core.withContext(function($ctx2) {
  26461. //>>excludeEnd("ctx");
  26462. $1="Missing package: ".__comma(packageName);
  26463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26464. $ctx2.sendIdx[","]=1;
  26465. //>>excludeEnd("ctx");
  26466. return self._error_($1);
  26467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26468. $ctx2.sendIdx["error:"]=1;
  26469. //>>excludeEnd("ctx");
  26470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26471. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  26472. //>>excludeEnd("ctx");
  26473. }));
  26474. $2=self._packageAt_(newName);
  26475. if(($receiver = $2) == null || $receiver.isNil){
  26476. $2;
  26477. } else {
  26478. self._error_("Already exists a package called: ".__comma(newName));
  26479. };
  26480. $recv(pkg)._name_(newName);
  26481. self._basicRegisterPackage_(pkg);
  26482. self._deletePackage_(packageName);
  26483. return self;
  26484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26485. }, function($ctx1) {$ctx1.fill(self,"renamePackage:to:",{packageName:packageName,newName:newName,pkg:pkg},$globals.SmalltalkImage)});
  26486. //>>excludeEnd("ctx");
  26487. },
  26488. //>>excludeStart("ide", pragmas.excludeIdeData);
  26489. args: ["packageName", "newName"],
  26490. 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\x09pkg name: newName.\x0a\x09self basicRegisterPackage: pkg.\x0a\x09self deletePackage: packageName.",
  26491. referencedClasses: [],
  26492. //>>excludeEnd("ide");
  26493. messageSends: ["packageAt:ifAbsent:", "error:", ",", "ifNotNil:", "packageAt:", "name:", "basicRegisterPackage:", "deletePackage:"]
  26494. }),
  26495. $globals.SmalltalkImage);
  26496. $core.addMethod(
  26497. $core.method({
  26498. selector: "reservedWords",
  26499. protocol: 'accessing',
  26500. fn: function (){
  26501. var self=this;
  26502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26503. return $core.withContext(function($ctx1) {
  26504. //>>excludeEnd("ctx");
  26505. return $core.reservedWords;
  26506. return self;
  26507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26508. }, function($ctx1) {$ctx1.fill(self,"reservedWords",{},$globals.SmalltalkImage)});
  26509. //>>excludeEnd("ctx");
  26510. },
  26511. //>>excludeStart("ide", pragmas.excludeIdeData);
  26512. args: [],
  26513. source: "reservedWords\x0a\x09\x22JavaScript reserved words\x22\x0a\x09<return $core.reservedWords>",
  26514. referencedClasses: [],
  26515. //>>excludeEnd("ide");
  26516. messageSends: []
  26517. }),
  26518. $globals.SmalltalkImage);
  26519. $core.addMethod(
  26520. $core.method({
  26521. selector: "settings",
  26522. protocol: 'accessing',
  26523. fn: function (){
  26524. var self=this;
  26525. function $SmalltalkSettings(){return $globals.SmalltalkSettings||(typeof SmalltalkSettings=="undefined"?nil:SmalltalkSettings)}
  26526. return $SmalltalkSettings();
  26527. },
  26528. //>>excludeStart("ide", pragmas.excludeIdeData);
  26529. args: [],
  26530. source: "settings\x0a\x09^ SmalltalkSettings",
  26531. referencedClasses: ["SmalltalkSettings"],
  26532. //>>excludeEnd("ide");
  26533. messageSends: []
  26534. }),
  26535. $globals.SmalltalkImage);
  26536. $core.addMethod(
  26537. $core.method({
  26538. selector: "version",
  26539. protocol: 'accessing',
  26540. fn: function (){
  26541. var self=this;
  26542. return "0.15.0-pre";
  26543. },
  26544. //>>excludeStart("ide", pragmas.excludeIdeData);
  26545. args: [],
  26546. source: "version\x0a\x09\x22Answer the version string of Amber\x22\x0a\x09\x0a\x09^ '0.15.0-pre'",
  26547. referencedClasses: [],
  26548. //>>excludeEnd("ide");
  26549. messageSends: []
  26550. }),
  26551. $globals.SmalltalkImage);
  26552. $globals.SmalltalkImage.klass.iVarNames = ['current'];
  26553. $core.addMethod(
  26554. $core.method({
  26555. selector: "current",
  26556. protocol: 'instance creation',
  26557. fn: function (){
  26558. var self=this;
  26559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26560. return $core.withContext(function($ctx1) {
  26561. //>>excludeEnd("ctx");
  26562. var $2,$1,$receiver;
  26563. $2=self["@current"];
  26564. if(($receiver = $2) == null || $receiver.isNil){
  26565. self["@current"]=(
  26566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26567. $ctx1.supercall = true,
  26568. //>>excludeEnd("ctx");
  26569. $globals.SmalltalkImage.klass.superclass.fn.prototype._new.apply($recv(self), []));
  26570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26571. $ctx1.supercall = false;
  26572. //>>excludeEnd("ctx");;
  26573. $1=self["@current"];
  26574. } else {
  26575. self._deprecatedAPI();
  26576. $1=self["@current"];
  26577. };
  26578. return $1;
  26579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26580. }, function($ctx1) {$ctx1.fill(self,"current",{},$globals.SmalltalkImage.klass)});
  26581. //>>excludeEnd("ctx");
  26582. },
  26583. //>>excludeStart("ide", pragmas.excludeIdeData);
  26584. args: [],
  26585. source: "current\x0a\x09^ current ifNil: [ current := super new ] ifNotNil: [ self deprecatedAPI. current ]",
  26586. referencedClasses: [],
  26587. //>>excludeEnd("ide");
  26588. messageSends: ["ifNil:ifNotNil:", "new", "deprecatedAPI"]
  26589. }),
  26590. $globals.SmalltalkImage.klass);
  26591. $core.addMethod(
  26592. $core.method({
  26593. selector: "initialize",
  26594. protocol: 'initialization',
  26595. fn: function (){
  26596. var self=this;
  26597. var st;
  26598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26599. return $core.withContext(function($ctx1) {
  26600. //>>excludeEnd("ctx");
  26601. st=self._current();
  26602. $recv($recv(st)._globals())._at_put_("Smalltalk",st);
  26603. return self;
  26604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26605. }, function($ctx1) {$ctx1.fill(self,"initialize",{st:st},$globals.SmalltalkImage.klass)});
  26606. //>>excludeEnd("ctx");
  26607. },
  26608. //>>excludeStart("ide", pragmas.excludeIdeData);
  26609. args: [],
  26610. source: "initialize\x0a\x09| st |\x0a\x09st := self current.\x0a\x09st globals at: 'Smalltalk' put: st",
  26611. referencedClasses: [],
  26612. //>>excludeEnd("ide");
  26613. messageSends: ["current", "at:put:", "globals"]
  26614. }),
  26615. $globals.SmalltalkImage.klass);
  26616. $core.addMethod(
  26617. $core.method({
  26618. selector: "new",
  26619. protocol: 'instance creation',
  26620. fn: function (){
  26621. var self=this;
  26622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26623. return $core.withContext(function($ctx1) {
  26624. //>>excludeEnd("ctx");
  26625. self._shouldNotImplement();
  26626. return self;
  26627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26628. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.SmalltalkImage.klass)});
  26629. //>>excludeEnd("ctx");
  26630. },
  26631. //>>excludeStart("ide", pragmas.excludeIdeData);
  26632. args: [],
  26633. source: "new\x0a\x09self shouldNotImplement",
  26634. referencedClasses: [],
  26635. //>>excludeEnd("ide");
  26636. messageSends: ["shouldNotImplement"]
  26637. }),
  26638. $globals.SmalltalkImage.klass);
  26639. $core.addMethod(
  26640. $core.method({
  26641. selector: "importsString",
  26642. protocol: '*Kernel-Infrastructure',
  26643. fn: function (){
  26644. var self=this;
  26645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26646. return $core.withContext(function($ctx1) {
  26647. //>>excludeEnd("ctx");
  26648. var $3,$2,$1;
  26649. $3=$recv(self._key())._importsString();
  26650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26651. $ctx1.sendIdx["importsString"]=1;
  26652. //>>excludeEnd("ctx");
  26653. $2=$recv($3).__comma(" -> ");
  26654. $1=$recv($2).__comma($recv(self._value())._importsString());
  26655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26656. $ctx1.sendIdx[","]=1;
  26657. //>>excludeEnd("ctx");
  26658. return $1;
  26659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26660. }, function($ctx1) {$ctx1.fill(self,"importsString",{},$globals.Association)});
  26661. //>>excludeEnd("ctx");
  26662. },
  26663. //>>excludeStart("ide", pragmas.excludeIdeData);
  26664. args: [],
  26665. source: "importsString\x0a\x09\x22This is for use by package exporter.\x0a\x09It can fail for non-string keys and values.\x22\x0a\x0a\x09^ self key importsString, ' -> ', self value importsString",
  26666. referencedClasses: [],
  26667. //>>excludeEnd("ide");
  26668. messageSends: [",", "importsString", "key", "value"]
  26669. }),
  26670. $globals.Association);
  26671. $core.addMethod(
  26672. $core.method({
  26673. selector: "asJavaScriptPropertyName",
  26674. protocol: '*Kernel-Infrastructure',
  26675. fn: function (){
  26676. var self=this;
  26677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26678. return $core.withContext(function($ctx1) {
  26679. //>>excludeEnd("ctx");
  26680. return $core.st2prop(self);
  26681. return self;
  26682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26683. }, function($ctx1) {$ctx1.fill(self,"asJavaScriptPropertyName",{},$globals.String)});
  26684. //>>excludeEnd("ctx");
  26685. },
  26686. //>>excludeStart("ide", pragmas.excludeIdeData);
  26687. args: [],
  26688. source: "asJavaScriptPropertyName\x0a<return $core.st2prop(self)>",
  26689. referencedClasses: [],
  26690. //>>excludeEnd("ide");
  26691. messageSends: []
  26692. }),
  26693. $globals.String);
  26694. $core.addMethod(
  26695. $core.method({
  26696. selector: "asSetting",
  26697. protocol: '*Kernel-Infrastructure',
  26698. fn: function (){
  26699. var self=this;
  26700. function $Setting(){return $globals.Setting||(typeof Setting=="undefined"?nil:Setting)}
  26701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26702. return $core.withContext(function($ctx1) {
  26703. //>>excludeEnd("ctx");
  26704. var $1;
  26705. $1=$recv($Setting())._at_ifAbsent_(self,nil);
  26706. return $1;
  26707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26708. }, function($ctx1) {$ctx1.fill(self,"asSetting",{},$globals.String)});
  26709. //>>excludeEnd("ctx");
  26710. },
  26711. //>>excludeStart("ide", pragmas.excludeIdeData);
  26712. args: [],
  26713. 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",
  26714. referencedClasses: ["Setting"],
  26715. //>>excludeEnd("ide");
  26716. messageSends: ["at:ifAbsent:"]
  26717. }),
  26718. $globals.String);
  26719. $core.addMethod(
  26720. $core.method({
  26721. selector: "asSettingIfAbsent:",
  26722. protocol: '*Kernel-Infrastructure',
  26723. fn: function (aDefaultValue){
  26724. var self=this;
  26725. function $Setting(){return $globals.Setting||(typeof Setting=="undefined"?nil:Setting)}
  26726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26727. return $core.withContext(function($ctx1) {
  26728. //>>excludeEnd("ctx");
  26729. var $1;
  26730. $1=$recv($Setting())._at_ifAbsent_(self,aDefaultValue);
  26731. return $1;
  26732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26733. }, function($ctx1) {$ctx1.fill(self,"asSettingIfAbsent:",{aDefaultValue:aDefaultValue},$globals.String)});
  26734. //>>excludeEnd("ctx");
  26735. },
  26736. //>>excludeStart("ide", pragmas.excludeIdeData);
  26737. args: ["aDefaultValue"],
  26738. 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",
  26739. referencedClasses: ["Setting"],
  26740. //>>excludeEnd("ide");
  26741. messageSends: ["at:ifAbsent:"]
  26742. }),
  26743. $globals.String);
  26744. $core.addMethod(
  26745. $core.method({
  26746. selector: "importsString",
  26747. protocol: '*Kernel-Infrastructure',
  26748. fn: function (){
  26749. var self=this;
  26750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26751. return $core.withContext(function($ctx1) {
  26752. //>>excludeEnd("ctx");
  26753. var $1;
  26754. $1=$recv("'".__comma(self._replace_with_("'","''"))).__comma("'");
  26755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26756. $ctx1.sendIdx[","]=1;
  26757. //>>excludeEnd("ctx");
  26758. return $1;
  26759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26760. }, function($ctx1) {$ctx1.fill(self,"importsString",{},$globals.String)});
  26761. //>>excludeEnd("ctx");
  26762. },
  26763. //>>excludeStart("ide", pragmas.excludeIdeData);
  26764. args: [],
  26765. source: "importsString\x0a\x09\x22Answer receiver as Smalltalk expression\x22\x0a\x09^ '''', (self replace: '''' with: ''''''), ''''",
  26766. referencedClasses: [],
  26767. //>>excludeEnd("ide");
  26768. messageSends: [",", "replace:with:"]
  26769. }),
  26770. $globals.String);
  26771. $core.addMethod(
  26772. $core.method({
  26773. selector: "settingValue",
  26774. protocol: '*Kernel-Infrastructure',
  26775. fn: function (){
  26776. var self=this;
  26777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26778. return $core.withContext(function($ctx1) {
  26779. //>>excludeEnd("ctx");
  26780. var $1;
  26781. $1=$recv(self._asSetting())._value();
  26782. return $1;
  26783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26784. }, function($ctx1) {$ctx1.fill(self,"settingValue",{},$globals.String)});
  26785. //>>excludeEnd("ctx");
  26786. },
  26787. //>>excludeStart("ide", pragmas.excludeIdeData);
  26788. args: [],
  26789. source: "settingValue\x0a\x09^ self asSetting value",
  26790. referencedClasses: [],
  26791. //>>excludeEnd("ide");
  26792. messageSends: ["value", "asSetting"]
  26793. }),
  26794. $globals.String);
  26795. $core.addMethod(
  26796. $core.method({
  26797. selector: "settingValue:",
  26798. protocol: '*Kernel-Infrastructure',
  26799. fn: function (aValue){
  26800. var self=this;
  26801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26802. return $core.withContext(function($ctx1) {
  26803. //>>excludeEnd("ctx");
  26804. var $1;
  26805. $1=$recv(self._asSetting())._value_(aValue);
  26806. return $1;
  26807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26808. }, function($ctx1) {$ctx1.fill(self,"settingValue:",{aValue:aValue},$globals.String)});
  26809. //>>excludeEnd("ctx");
  26810. },
  26811. //>>excludeStart("ide", pragmas.excludeIdeData);
  26812. args: ["aValue"],
  26813. 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",
  26814. referencedClasses: [],
  26815. //>>excludeEnd("ide");
  26816. messageSends: ["value:", "asSetting"]
  26817. }),
  26818. $globals.String);
  26819. $core.addMethod(
  26820. $core.method({
  26821. selector: "settingValueIfAbsent:",
  26822. protocol: '*Kernel-Infrastructure',
  26823. fn: function (aDefaultValue){
  26824. var self=this;
  26825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26826. return $core.withContext(function($ctx1) {
  26827. //>>excludeEnd("ctx");
  26828. var $1;
  26829. $1=$recv(self._asSettingIfAbsent_(aDefaultValue))._value();
  26830. return $1;
  26831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26832. }, function($ctx1) {$ctx1.fill(self,"settingValueIfAbsent:",{aDefaultValue:aDefaultValue},$globals.String)});
  26833. //>>excludeEnd("ctx");
  26834. },
  26835. //>>excludeStart("ide", pragmas.excludeIdeData);
  26836. args: ["aDefaultValue"],
  26837. 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",
  26838. referencedClasses: [],
  26839. //>>excludeEnd("ide");
  26840. messageSends: ["value", "asSettingIfAbsent:"]
  26841. }),
  26842. $globals.String);
  26843. });
  26844. define("amber_core/Kernel-Exceptions", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  26845. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  26846. $core.addPackage('Kernel-Exceptions');
  26847. $core.packages["Kernel-Exceptions"].innerEval = function (expr) { return eval(expr); };
  26848. $core.packages["Kernel-Exceptions"].transport = {"type":"amd","amdNamespace":"amber_core"};
  26849. $core.addClass('Error', $globals.Object, ['messageText'], 'Kernel-Exceptions');
  26850. //>>excludeStart("ide", pragmas.excludeIdeData);
  26851. $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.";
  26852. //>>excludeEnd("ide");
  26853. $core.addMethod(
  26854. $core.method({
  26855. selector: "beHandled",
  26856. protocol: 'accessing',
  26857. fn: function (){
  26858. var self=this;
  26859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26860. return $core.withContext(function($ctx1) {
  26861. //>>excludeEnd("ctx");
  26862. self.amberHandled = true;
  26863. return self;
  26864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26865. }, function($ctx1) {$ctx1.fill(self,"beHandled",{},$globals.Error)});
  26866. //>>excludeEnd("ctx");
  26867. },
  26868. //>>excludeStart("ide", pragmas.excludeIdeData);
  26869. args: [],
  26870. source: "beHandled\x0a\x09<self.amberHandled = true>",
  26871. referencedClasses: [],
  26872. //>>excludeEnd("ide");
  26873. messageSends: []
  26874. }),
  26875. $globals.Error);
  26876. $core.addMethod(
  26877. $core.method({
  26878. selector: "beUnhandled",
  26879. protocol: 'accessing',
  26880. fn: function (){
  26881. var self=this;
  26882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26883. return $core.withContext(function($ctx1) {
  26884. //>>excludeEnd("ctx");
  26885. self.amberHandled = false;
  26886. return self;
  26887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26888. }, function($ctx1) {$ctx1.fill(self,"beUnhandled",{},$globals.Error)});
  26889. //>>excludeEnd("ctx");
  26890. },
  26891. //>>excludeStart("ide", pragmas.excludeIdeData);
  26892. args: [],
  26893. source: "beUnhandled\x0a\x09<self.amberHandled = false>",
  26894. referencedClasses: [],
  26895. //>>excludeEnd("ide");
  26896. messageSends: []
  26897. }),
  26898. $globals.Error);
  26899. $core.addMethod(
  26900. $core.method({
  26901. selector: "context",
  26902. protocol: 'accessing',
  26903. fn: function (){
  26904. var self=this;
  26905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26906. return $core.withContext(function($ctx1) {
  26907. //>>excludeEnd("ctx");
  26908. return self.context;
  26909. return self;
  26910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26911. }, function($ctx1) {$ctx1.fill(self,"context",{},$globals.Error)});
  26912. //>>excludeEnd("ctx");
  26913. },
  26914. //>>excludeStart("ide", pragmas.excludeIdeData);
  26915. args: [],
  26916. source: "context\x0a\x09<return self.context>",
  26917. referencedClasses: [],
  26918. //>>excludeEnd("ide");
  26919. messageSends: []
  26920. }),
  26921. $globals.Error);
  26922. $core.addMethod(
  26923. $core.method({
  26924. selector: "initialize",
  26925. protocol: 'initialization',
  26926. fn: function (){
  26927. var self=this;
  26928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26929. return $core.withContext(function($ctx1) {
  26930. //>>excludeEnd("ctx");
  26931. self._messageText_("Errorclass: ".__comma($recv(self._class())._name()));
  26932. return self;
  26933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26934. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Error)});
  26935. //>>excludeEnd("ctx");
  26936. },
  26937. //>>excludeStart("ide", pragmas.excludeIdeData);
  26938. args: [],
  26939. source: "initialize\x0a\x09self messageText: 'Errorclass: ', (self class name).",
  26940. referencedClasses: [],
  26941. //>>excludeEnd("ide");
  26942. messageSends: ["messageText:", ",", "name", "class"]
  26943. }),
  26944. $globals.Error);
  26945. $core.addMethod(
  26946. $core.method({
  26947. selector: "isSmalltalkError",
  26948. protocol: 'testing',
  26949. fn: function (){
  26950. var self=this;
  26951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26952. return $core.withContext(function($ctx1) {
  26953. //>>excludeEnd("ctx");
  26954. return self.smalltalkError === true;
  26955. return self;
  26956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26957. }, function($ctx1) {$ctx1.fill(self,"isSmalltalkError",{},$globals.Error)});
  26958. //>>excludeEnd("ctx");
  26959. },
  26960. //>>excludeStart("ide", pragmas.excludeIdeData);
  26961. args: [],
  26962. source: "isSmalltalkError\x0a\x09<return self.smalltalkError === true>",
  26963. referencedClasses: [],
  26964. //>>excludeEnd("ide");
  26965. messageSends: []
  26966. }),
  26967. $globals.Error);
  26968. $core.addMethod(
  26969. $core.method({
  26970. selector: "jsStack",
  26971. protocol: 'accessing',
  26972. fn: function (){
  26973. var self=this;
  26974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26975. return $core.withContext(function($ctx1) {
  26976. //>>excludeEnd("ctx");
  26977. return self.stack;
  26978. return self;
  26979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26980. }, function($ctx1) {$ctx1.fill(self,"jsStack",{},$globals.Error)});
  26981. //>>excludeEnd("ctx");
  26982. },
  26983. //>>excludeStart("ide", pragmas.excludeIdeData);
  26984. args: [],
  26985. source: "jsStack\x0a\x09<return self.stack>",
  26986. referencedClasses: [],
  26987. //>>excludeEnd("ide");
  26988. messageSends: []
  26989. }),
  26990. $globals.Error);
  26991. $core.addMethod(
  26992. $core.method({
  26993. selector: "messageText",
  26994. protocol: 'accessing',
  26995. fn: function (){
  26996. var self=this;
  26997. var $1;
  26998. $1=self["@messageText"];
  26999. return $1;
  27000. },
  27001. //>>excludeStart("ide", pragmas.excludeIdeData);
  27002. args: [],
  27003. source: "messageText\x0a\x09^ messageText",
  27004. referencedClasses: [],
  27005. //>>excludeEnd("ide");
  27006. messageSends: []
  27007. }),
  27008. $globals.Error);
  27009. $core.addMethod(
  27010. $core.method({
  27011. selector: "messageText:",
  27012. protocol: 'accessing',
  27013. fn: function (aString){
  27014. var self=this;
  27015. self["@messageText"]=aString;
  27016. return self;
  27017. },
  27018. //>>excludeStart("ide", pragmas.excludeIdeData);
  27019. args: ["aString"],
  27020. source: "messageText: aString\x0a\x09messageText := aString",
  27021. referencedClasses: [],
  27022. //>>excludeEnd("ide");
  27023. messageSends: []
  27024. }),
  27025. $globals.Error);
  27026. $core.addMethod(
  27027. $core.method({
  27028. selector: "resignal",
  27029. protocol: 'signaling',
  27030. fn: function (){
  27031. var self=this;
  27032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27033. return $core.withContext(function($ctx1) {
  27034. //>>excludeEnd("ctx");
  27035. self.amberHandled = false;
  27036. throw(self);
  27037. ;
  27038. return self;
  27039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27040. }, function($ctx1) {$ctx1.fill(self,"resignal",{},$globals.Error)});
  27041. //>>excludeEnd("ctx");
  27042. },
  27043. //>>excludeStart("ide", pragmas.excludeIdeData);
  27044. args: [],
  27045. 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>",
  27046. referencedClasses: [],
  27047. //>>excludeEnd("ide");
  27048. messageSends: []
  27049. }),
  27050. $globals.Error);
  27051. $core.addMethod(
  27052. $core.method({
  27053. selector: "signal",
  27054. protocol: 'signaling',
  27055. fn: function (){
  27056. var self=this;
  27057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27058. return $core.withContext(function($ctx1) {
  27059. //>>excludeEnd("ctx");
  27060. self.amberHandled = false;
  27061. self.context = $core.getThisContext();
  27062. self.smalltalkError = true;
  27063. throw self;
  27064. ;
  27065. return self;
  27066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27067. }, function($ctx1) {$ctx1.fill(self,"signal",{},$globals.Error)});
  27068. //>>excludeEnd("ctx");
  27069. },
  27070. //>>excludeStart("ide", pragmas.excludeIdeData);
  27071. args: [],
  27072. 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>",
  27073. referencedClasses: [],
  27074. //>>excludeEnd("ide");
  27075. messageSends: []
  27076. }),
  27077. $globals.Error);
  27078. $core.addMethod(
  27079. $core.method({
  27080. selector: "signal:",
  27081. protocol: 'signaling',
  27082. fn: function (aString){
  27083. var self=this;
  27084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27085. return $core.withContext(function($ctx1) {
  27086. //>>excludeEnd("ctx");
  27087. self._messageText_(aString);
  27088. self._signal();
  27089. return self;
  27090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27091. }, function($ctx1) {$ctx1.fill(self,"signal:",{aString:aString},$globals.Error)});
  27092. //>>excludeEnd("ctx");
  27093. },
  27094. //>>excludeStart("ide", pragmas.excludeIdeData);
  27095. args: ["aString"],
  27096. source: "signal: aString\x0a\x09self messageText: aString.\x0a\x09self signal",
  27097. referencedClasses: [],
  27098. //>>excludeEnd("ide");
  27099. messageSends: ["messageText:", "signal"]
  27100. }),
  27101. $globals.Error);
  27102. $core.addMethod(
  27103. $core.method({
  27104. selector: "signalerContext",
  27105. protocol: 'accessing',
  27106. fn: function (){
  27107. var self=this;
  27108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27109. return $core.withContext(function($ctx1) {
  27110. //>>excludeEnd("ctx");
  27111. var $1;
  27112. $1=self._signalerContextFrom_(self._context());
  27113. return $1;
  27114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27115. }, function($ctx1) {$ctx1.fill(self,"signalerContext",{},$globals.Error)});
  27116. //>>excludeEnd("ctx");
  27117. },
  27118. //>>excludeStart("ide", pragmas.excludeIdeData);
  27119. args: [],
  27120. source: "signalerContext\x0a\x09^ self signalerContextFrom: self context",
  27121. referencedClasses: [],
  27122. //>>excludeEnd("ide");
  27123. messageSends: ["signalerContextFrom:", "context"]
  27124. }),
  27125. $globals.Error);
  27126. $core.addMethod(
  27127. $core.method({
  27128. selector: "signalerContextFrom:",
  27129. protocol: 'accessing',
  27130. fn: function (aContext){
  27131. var self=this;
  27132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27133. return $core.withContext(function($ctx1) {
  27134. //>>excludeEnd("ctx");
  27135. var $4,$3,$2,$1;
  27136. $1=$recv(aContext)._findContextSuchThat_((function(context){
  27137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27138. return $core.withContext(function($ctx2) {
  27139. //>>excludeEnd("ctx");
  27140. $4=$recv(context)._receiver();
  27141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27142. $ctx2.sendIdx["receiver"]=1;
  27143. //>>excludeEnd("ctx");
  27144. $3=$recv($4).__eq_eq(self);
  27145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27146. $ctx2.sendIdx["=="]=1;
  27147. //>>excludeEnd("ctx");
  27148. $2=$recv($3)._or_((function(){
  27149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27150. return $core.withContext(function($ctx3) {
  27151. //>>excludeEnd("ctx");
  27152. return $recv($recv(context)._receiver()).__eq_eq(self._class());
  27153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27154. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  27155. //>>excludeEnd("ctx");
  27156. }));
  27157. return $recv($2)._not();
  27158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27159. }, function($ctx2) {$ctx2.fillBlock({context:context},$ctx1,1)});
  27160. //>>excludeEnd("ctx");
  27161. }));
  27162. return $1;
  27163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27164. }, function($ctx1) {$ctx1.fill(self,"signalerContextFrom:",{aContext:aContext},$globals.Error)});
  27165. //>>excludeEnd("ctx");
  27166. },
  27167. //>>excludeStart("ide", pragmas.excludeIdeData);
  27168. args: ["aContext"],
  27169. 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 ]",
  27170. referencedClasses: [],
  27171. //>>excludeEnd("ide");
  27172. messageSends: ["findContextSuchThat:", "not", "or:", "==", "receiver", "class"]
  27173. }),
  27174. $globals.Error);
  27175. $core.addMethod(
  27176. $core.method({
  27177. selector: "wasHandled",
  27178. protocol: 'testing',
  27179. fn: function (){
  27180. var self=this;
  27181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27182. return $core.withContext(function($ctx1) {
  27183. //>>excludeEnd("ctx");
  27184. return self.amberHandled || false;
  27185. return self;
  27186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27187. }, function($ctx1) {$ctx1.fill(self,"wasHandled",{},$globals.Error)});
  27188. //>>excludeEnd("ctx");
  27189. },
  27190. //>>excludeStart("ide", pragmas.excludeIdeData);
  27191. args: [],
  27192. source: "wasHandled\x0a\x09<return self.amberHandled || false>",
  27193. referencedClasses: [],
  27194. //>>excludeEnd("ide");
  27195. messageSends: []
  27196. }),
  27197. $globals.Error);
  27198. $core.addMethod(
  27199. $core.method({
  27200. selector: "classTag",
  27201. protocol: 'accessing',
  27202. fn: function (){
  27203. var self=this;
  27204. return "exception";
  27205. },
  27206. //>>excludeStart("ide", pragmas.excludeIdeData);
  27207. args: [],
  27208. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'exception'",
  27209. referencedClasses: [],
  27210. //>>excludeEnd("ide");
  27211. messageSends: []
  27212. }),
  27213. $globals.Error.klass);
  27214. $core.addMethod(
  27215. $core.method({
  27216. selector: "signal",
  27217. protocol: 'instance creation',
  27218. fn: function (){
  27219. var self=this;
  27220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27221. return $core.withContext(function($ctx1) {
  27222. //>>excludeEnd("ctx");
  27223. var $1;
  27224. $1=$recv(self._new())._signal();
  27225. return $1;
  27226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27227. }, function($ctx1) {$ctx1.fill(self,"signal",{},$globals.Error.klass)});
  27228. //>>excludeEnd("ctx");
  27229. },
  27230. //>>excludeStart("ide", pragmas.excludeIdeData);
  27231. args: [],
  27232. source: "signal\x0a\x09^ self new signal",
  27233. referencedClasses: [],
  27234. //>>excludeEnd("ide");
  27235. messageSends: ["signal", "new"]
  27236. }),
  27237. $globals.Error.klass);
  27238. $core.addMethod(
  27239. $core.method({
  27240. selector: "signal:",
  27241. protocol: 'instance creation',
  27242. fn: function (aString){
  27243. var self=this;
  27244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27245. return $core.withContext(function($ctx1) {
  27246. //>>excludeEnd("ctx");
  27247. var $1;
  27248. $1=$recv(self._new())._signal_(aString);
  27249. return $1;
  27250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27251. }, function($ctx1) {$ctx1.fill(self,"signal:",{aString:aString},$globals.Error.klass)});
  27252. //>>excludeEnd("ctx");
  27253. },
  27254. //>>excludeStart("ide", pragmas.excludeIdeData);
  27255. args: ["aString"],
  27256. source: "signal: aString\x0a\x09^ self new\x0a\x09\x09signal: aString",
  27257. referencedClasses: [],
  27258. //>>excludeEnd("ide");
  27259. messageSends: ["signal:", "new"]
  27260. }),
  27261. $globals.Error.klass);
  27262. $core.addClass('Halt', $globals.Error, [], 'Kernel-Exceptions');
  27263. //>>excludeStart("ide", pragmas.excludeIdeData);
  27264. $globals.Halt.comment="I am provided to support `Object>>#halt`.";
  27265. //>>excludeEnd("ide");
  27266. $core.addMethod(
  27267. $core.method({
  27268. selector: "messageText",
  27269. protocol: 'accessing',
  27270. fn: function (){
  27271. var self=this;
  27272. return "Halt encountered";
  27273. },
  27274. //>>excludeStart("ide", pragmas.excludeIdeData);
  27275. args: [],
  27276. source: "messageText\x0a\x09^ 'Halt encountered'",
  27277. referencedClasses: [],
  27278. //>>excludeEnd("ide");
  27279. messageSends: []
  27280. }),
  27281. $globals.Halt);
  27282. $core.addMethod(
  27283. $core.method({
  27284. selector: "signalerContextFrom:",
  27285. protocol: 'accessing',
  27286. fn: function (aContext){
  27287. var self=this;
  27288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27289. return $core.withContext(function($ctx1) {
  27290. //>>excludeEnd("ctx");
  27291. var $4,$3,$2,$1;
  27292. $1=$recv(aContext)._findContextSuchThat_((function(context){
  27293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27294. return $core.withContext(function($ctx2) {
  27295. //>>excludeEnd("ctx");
  27296. $4=$recv(context)._receiver();
  27297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27298. $ctx2.sendIdx["receiver"]=1;
  27299. //>>excludeEnd("ctx");
  27300. $3=$recv($4).__eq_eq(self);
  27301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27302. $ctx2.sendIdx["=="]=1;
  27303. //>>excludeEnd("ctx");
  27304. $2=$recv($3)._or_((function(){
  27305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27306. return $core.withContext(function($ctx3) {
  27307. //>>excludeEnd("ctx");
  27308. return $recv($recv($recv(context)._receiver()).__eq_eq(self._class()))._or_((function(){
  27309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27310. return $core.withContext(function($ctx4) {
  27311. //>>excludeEnd("ctx");
  27312. return $recv($recv($recv(context)._method())._selector()).__eq("halt");
  27313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27314. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,3)});
  27315. //>>excludeEnd("ctx");
  27316. }));
  27317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27318. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  27319. //>>excludeEnd("ctx");
  27320. }));
  27321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27322. $ctx2.sendIdx["or:"]=1;
  27323. //>>excludeEnd("ctx");
  27324. return $recv($2)._not();
  27325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27326. }, function($ctx2) {$ctx2.fillBlock({context:context},$ctx1,1)});
  27327. //>>excludeEnd("ctx");
  27328. }));
  27329. return $1;
  27330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27331. }, function($ctx1) {$ctx1.fill(self,"signalerContextFrom:",{aContext:aContext},$globals.Halt)});
  27332. //>>excludeEnd("ctx");
  27333. },
  27334. //>>excludeStart("ide", pragmas.excludeIdeData);
  27335. args: ["aContext"],
  27336. 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 ]",
  27337. referencedClasses: [],
  27338. //>>excludeEnd("ide");
  27339. messageSends: ["findContextSuchThat:", "not", "or:", "==", "receiver", "class", "=", "selector", "method"]
  27340. }),
  27341. $globals.Halt);
  27342. $core.addClass('JavaScriptException', $globals.Error, ['exception'], 'Kernel-Exceptions');
  27343. //>>excludeStart("ide", pragmas.excludeIdeData);
  27344. $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:`";
  27345. //>>excludeEnd("ide");
  27346. $core.addMethod(
  27347. $core.method({
  27348. selector: "context:",
  27349. protocol: 'accessing',
  27350. fn: function (aMethodContext){
  27351. var self=this;
  27352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27353. return $core.withContext(function($ctx1) {
  27354. //>>excludeEnd("ctx");
  27355. self.context = aMethodContext;
  27356. return self;
  27357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27358. }, function($ctx1) {$ctx1.fill(self,"context:",{aMethodContext:aMethodContext},$globals.JavaScriptException)});
  27359. //>>excludeEnd("ctx");
  27360. },
  27361. //>>excludeStart("ide", pragmas.excludeIdeData);
  27362. args: ["aMethodContext"],
  27363. 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>",
  27364. referencedClasses: [],
  27365. //>>excludeEnd("ide");
  27366. messageSends: []
  27367. }),
  27368. $globals.JavaScriptException);
  27369. $core.addMethod(
  27370. $core.method({
  27371. selector: "exception",
  27372. protocol: 'accessing',
  27373. fn: function (){
  27374. var self=this;
  27375. var $1;
  27376. $1=self["@exception"];
  27377. return $1;
  27378. },
  27379. //>>excludeStart("ide", pragmas.excludeIdeData);
  27380. args: [],
  27381. source: "exception\x0a\x09^ exception",
  27382. referencedClasses: [],
  27383. //>>excludeEnd("ide");
  27384. messageSends: []
  27385. }),
  27386. $globals.JavaScriptException);
  27387. $core.addMethod(
  27388. $core.method({
  27389. selector: "exception:",
  27390. protocol: 'accessing',
  27391. fn: function (anException){
  27392. var self=this;
  27393. self["@exception"]=anException;
  27394. return self;
  27395. },
  27396. //>>excludeStart("ide", pragmas.excludeIdeData);
  27397. args: ["anException"],
  27398. source: "exception: anException\x0a\x09exception := anException",
  27399. referencedClasses: [],
  27400. //>>excludeEnd("ide");
  27401. messageSends: []
  27402. }),
  27403. $globals.JavaScriptException);
  27404. $core.addMethod(
  27405. $core.method({
  27406. selector: "messageText",
  27407. protocol: 'accessing',
  27408. fn: function (){
  27409. var self=this;
  27410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27411. return $core.withContext(function($ctx1) {
  27412. //>>excludeEnd("ctx");
  27413. return 'JavaScript exception: ' + self["@exception"].toString();
  27414. return self;
  27415. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27416. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.JavaScriptException)});
  27417. //>>excludeEnd("ctx");
  27418. },
  27419. //>>excludeStart("ide", pragmas.excludeIdeData);
  27420. args: [],
  27421. source: "messageText\x0a\x09<return 'JavaScript exception: ' + self[\x22@exception\x22].toString()>",
  27422. referencedClasses: [],
  27423. //>>excludeEnd("ide");
  27424. messageSends: []
  27425. }),
  27426. $globals.JavaScriptException);
  27427. $core.addMethod(
  27428. $core.method({
  27429. selector: "on:",
  27430. protocol: 'instance creation',
  27431. fn: function (anException){
  27432. var self=this;
  27433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27434. return $core.withContext(function($ctx1) {
  27435. //>>excludeEnd("ctx");
  27436. var $2,$3,$1;
  27437. $2=self._new();
  27438. $recv($2)._exception_(anException);
  27439. $3=$recv($2)._yourself();
  27440. $1=$3;
  27441. return $1;
  27442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27443. }, function($ctx1) {$ctx1.fill(self,"on:",{anException:anException},$globals.JavaScriptException.klass)});
  27444. //>>excludeEnd("ctx");
  27445. },
  27446. //>>excludeStart("ide", pragmas.excludeIdeData);
  27447. args: ["anException"],
  27448. source: "on: anException\x0a\x09^ self new\x0a\x09\x09exception: anException;\x0a\x09\x09yourself",
  27449. referencedClasses: [],
  27450. //>>excludeEnd("ide");
  27451. messageSends: ["exception:", "new", "yourself"]
  27452. }),
  27453. $globals.JavaScriptException.klass);
  27454. $core.addMethod(
  27455. $core.method({
  27456. selector: "on:context:",
  27457. protocol: 'instance creation',
  27458. fn: function (anException,aMethodContext){
  27459. var self=this;
  27460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27461. return $core.withContext(function($ctx1) {
  27462. //>>excludeEnd("ctx");
  27463. var $2,$3,$1;
  27464. $2=self._new();
  27465. $recv($2)._exception_(anException);
  27466. $recv($2)._context_(aMethodContext);
  27467. $3=$recv($2)._yourself();
  27468. $1=$3;
  27469. return $1;
  27470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27471. }, function($ctx1) {$ctx1.fill(self,"on:context:",{anException:anException,aMethodContext:aMethodContext},$globals.JavaScriptException.klass)});
  27472. //>>excludeEnd("ctx");
  27473. },
  27474. //>>excludeStart("ide", pragmas.excludeIdeData);
  27475. args: ["anException", "aMethodContext"],
  27476. source: "on: anException context: aMethodContext\x0a\x09^ self new\x0a\x09\x09exception: anException;\x0a\x09\x09context: aMethodContext;\x0a\x09\x09yourself",
  27477. referencedClasses: [],
  27478. //>>excludeEnd("ide");
  27479. messageSends: ["exception:", "new", "context:", "yourself"]
  27480. }),
  27481. $globals.JavaScriptException.klass);
  27482. $core.addClass('MessageNotUnderstood', $globals.Error, ['message', 'receiver'], 'Kernel-Exceptions');
  27483. //>>excludeStart("ide", pragmas.excludeIdeData);
  27484. $globals.MessageNotUnderstood.comment="This exception is provided to support `Object>>doesNotUnderstand:`.";
  27485. //>>excludeEnd("ide");
  27486. $core.addMethod(
  27487. $core.method({
  27488. selector: "message",
  27489. protocol: 'accessing',
  27490. fn: function (){
  27491. var self=this;
  27492. var $1;
  27493. $1=self["@message"];
  27494. return $1;
  27495. },
  27496. //>>excludeStart("ide", pragmas.excludeIdeData);
  27497. args: [],
  27498. source: "message\x0a\x09^ message",
  27499. referencedClasses: [],
  27500. //>>excludeEnd("ide");
  27501. messageSends: []
  27502. }),
  27503. $globals.MessageNotUnderstood);
  27504. $core.addMethod(
  27505. $core.method({
  27506. selector: "message:",
  27507. protocol: 'accessing',
  27508. fn: function (aMessage){
  27509. var self=this;
  27510. self["@message"]=aMessage;
  27511. return self;
  27512. },
  27513. //>>excludeStart("ide", pragmas.excludeIdeData);
  27514. args: ["aMessage"],
  27515. source: "message: aMessage\x0a\x09message := aMessage",
  27516. referencedClasses: [],
  27517. //>>excludeEnd("ide");
  27518. messageSends: []
  27519. }),
  27520. $globals.MessageNotUnderstood);
  27521. $core.addMethod(
  27522. $core.method({
  27523. selector: "messageText",
  27524. protocol: 'accessing',
  27525. fn: function (){
  27526. var self=this;
  27527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27528. return $core.withContext(function($ctx1) {
  27529. //>>excludeEnd("ctx");
  27530. var $1;
  27531. $1=$recv($recv($recv(self._receiver())._asString()).__comma(" does not understand #")).__comma($recv(self._message())._selector());
  27532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27533. $ctx1.sendIdx[","]=1;
  27534. //>>excludeEnd("ctx");
  27535. return $1;
  27536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27537. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.MessageNotUnderstood)});
  27538. //>>excludeEnd("ctx");
  27539. },
  27540. //>>excludeStart("ide", pragmas.excludeIdeData);
  27541. args: [],
  27542. source: "messageText\x0a\x09^ self receiver asString, ' does not understand #', self message selector",
  27543. referencedClasses: [],
  27544. //>>excludeEnd("ide");
  27545. messageSends: [",", "asString", "receiver", "selector", "message"]
  27546. }),
  27547. $globals.MessageNotUnderstood);
  27548. $core.addMethod(
  27549. $core.method({
  27550. selector: "receiver",
  27551. protocol: 'accessing',
  27552. fn: function (){
  27553. var self=this;
  27554. var $1;
  27555. $1=self["@receiver"];
  27556. return $1;
  27557. },
  27558. //>>excludeStart("ide", pragmas.excludeIdeData);
  27559. args: [],
  27560. source: "receiver\x0a\x09^ receiver",
  27561. referencedClasses: [],
  27562. //>>excludeEnd("ide");
  27563. messageSends: []
  27564. }),
  27565. $globals.MessageNotUnderstood);
  27566. $core.addMethod(
  27567. $core.method({
  27568. selector: "receiver:",
  27569. protocol: 'accessing',
  27570. fn: function (anObject){
  27571. var self=this;
  27572. self["@receiver"]=anObject;
  27573. return self;
  27574. },
  27575. //>>excludeStart("ide", pragmas.excludeIdeData);
  27576. args: ["anObject"],
  27577. source: "receiver: anObject\x0a\x09receiver := anObject",
  27578. referencedClasses: [],
  27579. //>>excludeEnd("ide");
  27580. messageSends: []
  27581. }),
  27582. $globals.MessageNotUnderstood);
  27583. $core.addClass('NonBooleanReceiver', $globals.Error, ['object'], 'Kernel-Exceptions');
  27584. //>>excludeStart("ide", pragmas.excludeIdeData);
  27585. $globals.NonBooleanReceiver.comment="NonBooleanReceiver exceptions may be thrown when executing inlined methods such as `#ifTrue:` with a non boolean receiver.";
  27586. //>>excludeEnd("ide");
  27587. $core.addMethod(
  27588. $core.method({
  27589. selector: "object",
  27590. protocol: 'accessing',
  27591. fn: function (){
  27592. var self=this;
  27593. var $1;
  27594. $1=self["@object"];
  27595. return $1;
  27596. },
  27597. //>>excludeStart("ide", pragmas.excludeIdeData);
  27598. args: [],
  27599. source: "object\x0a\x09^ object",
  27600. referencedClasses: [],
  27601. //>>excludeEnd("ide");
  27602. messageSends: []
  27603. }),
  27604. $globals.NonBooleanReceiver);
  27605. $core.addMethod(
  27606. $core.method({
  27607. selector: "object:",
  27608. protocol: 'accessing',
  27609. fn: function (anObject){
  27610. var self=this;
  27611. self["@object"]=anObject;
  27612. return self;
  27613. },
  27614. //>>excludeStart("ide", pragmas.excludeIdeData);
  27615. args: ["anObject"],
  27616. source: "object: anObject\x0a\x09object := anObject",
  27617. referencedClasses: [],
  27618. //>>excludeEnd("ide");
  27619. messageSends: []
  27620. }),
  27621. $globals.NonBooleanReceiver);
  27622. $core.addClass('PackageCommitError', $globals.Error, [], 'Kernel-Exceptions');
  27623. //>>excludeStart("ide", pragmas.excludeIdeData);
  27624. $globals.PackageCommitError.comment="I get signaled when an attempt to commit a package has failed.";
  27625. //>>excludeEnd("ide");
  27626. });
  27627. define("amber_core/Kernel-Announcements", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  27628. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  27629. $core.addPackage('Kernel-Announcements');
  27630. $core.packages["Kernel-Announcements"].innerEval = function (expr) { return eval(expr); };
  27631. $core.packages["Kernel-Announcements"].transport = {"type":"amd","amdNamespace":"amber_core"};
  27632. $core.addClass('AnnouncementSubscription', $globals.Object, ['valuable', 'announcementClass'], 'Kernel-Announcements');
  27633. //>>excludeStart("ide", pragmas.excludeIdeData);
  27634. $globals.AnnouncementSubscription.comment="I am a single entry in a subscription registry of an `Announcer`.\x0aSeveral subscriptions by the same object is possible.";
  27635. //>>excludeEnd("ide");
  27636. $core.addMethod(
  27637. $core.method({
  27638. selector: "announcementClass",
  27639. protocol: 'accessing',
  27640. fn: function (){
  27641. var self=this;
  27642. var $1;
  27643. $1=self["@announcementClass"];
  27644. return $1;
  27645. },
  27646. //>>excludeStart("ide", pragmas.excludeIdeData);
  27647. args: [],
  27648. source: "announcementClass\x0a\x09^ announcementClass",
  27649. referencedClasses: [],
  27650. //>>excludeEnd("ide");
  27651. messageSends: []
  27652. }),
  27653. $globals.AnnouncementSubscription);
  27654. $core.addMethod(
  27655. $core.method({
  27656. selector: "announcementClass:",
  27657. protocol: 'accessing',
  27658. fn: function (aClass){
  27659. var self=this;
  27660. self["@announcementClass"]=aClass;
  27661. return self;
  27662. },
  27663. //>>excludeStart("ide", pragmas.excludeIdeData);
  27664. args: ["aClass"],
  27665. source: "announcementClass: aClass\x0a\x09announcementClass := aClass",
  27666. referencedClasses: [],
  27667. //>>excludeEnd("ide");
  27668. messageSends: []
  27669. }),
  27670. $globals.AnnouncementSubscription);
  27671. $core.addMethod(
  27672. $core.method({
  27673. selector: "deliver:",
  27674. protocol: 'announcing',
  27675. fn: function (anAnnouncement){
  27676. var self=this;
  27677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27678. return $core.withContext(function($ctx1) {
  27679. //>>excludeEnd("ctx");
  27680. var $1;
  27681. $1=self._handlesAnnouncement_(anAnnouncement);
  27682. if($core.assert($1)){
  27683. $recv(self._valuable())._value_(anAnnouncement);
  27684. };
  27685. return self;
  27686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27687. }, function($ctx1) {$ctx1.fill(self,"deliver:",{anAnnouncement:anAnnouncement},$globals.AnnouncementSubscription)});
  27688. //>>excludeEnd("ctx");
  27689. },
  27690. //>>excludeStart("ide", pragmas.excludeIdeData);
  27691. args: ["anAnnouncement"],
  27692. source: "deliver: anAnnouncement\x0a\x09(self handlesAnnouncement: anAnnouncement)\x0a\x09\x09ifTrue: [ self valuable value: anAnnouncement ]",
  27693. referencedClasses: [],
  27694. //>>excludeEnd("ide");
  27695. messageSends: ["ifTrue:", "handlesAnnouncement:", "value:", "valuable"]
  27696. }),
  27697. $globals.AnnouncementSubscription);
  27698. $core.addMethod(
  27699. $core.method({
  27700. selector: "handlesAnnouncement:",
  27701. protocol: 'announcing',
  27702. fn: function (anAnnouncement){
  27703. var self=this;
  27704. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  27705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27706. return $core.withContext(function($ctx1) {
  27707. //>>excludeEnd("ctx");
  27708. var $3,$4,$2,$1,$receiver;
  27709. $3=$recv($Smalltalk())._globals();
  27710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27711. $ctx1.sendIdx["globals"]=1;
  27712. //>>excludeEnd("ctx");
  27713. $4=$recv(self._announcementClass())._name();
  27714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27715. $ctx1.sendIdx["name"]=1;
  27716. //>>excludeEnd("ctx");
  27717. $2=$recv($3)._at_($4);
  27718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27719. $ctx1.sendIdx["at:"]=1;
  27720. //>>excludeEnd("ctx");
  27721. if(($receiver = $2) == null || $receiver.isNil){
  27722. return false;
  27723. } else {
  27724. var class_;
  27725. class_=$receiver;
  27726. $1=$recv($recv($recv($Smalltalk())._globals())._at_($recv($recv($recv(anAnnouncement)._class())._theNonMetaClass())._name()))._includesBehavior_(class_);
  27727. };
  27728. return $1;
  27729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27730. }, function($ctx1) {$ctx1.fill(self,"handlesAnnouncement:",{anAnnouncement:anAnnouncement},$globals.AnnouncementSubscription)});
  27731. //>>excludeEnd("ctx");
  27732. },
  27733. //>>excludeStart("ide", pragmas.excludeIdeData);
  27734. args: ["anAnnouncement"],
  27735. 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 ]",
  27736. referencedClasses: ["Smalltalk"],
  27737. //>>excludeEnd("ide");
  27738. messageSends: ["ifNil:ifNotNil:", "at:", "globals", "name", "announcementClass", "includesBehavior:", "theNonMetaClass", "class"]
  27739. }),
  27740. $globals.AnnouncementSubscription);
  27741. $core.addMethod(
  27742. $core.method({
  27743. selector: "receiver",
  27744. protocol: 'accessing',
  27745. fn: function (){
  27746. var self=this;
  27747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27748. return $core.withContext(function($ctx1) {
  27749. //>>excludeEnd("ctx");
  27750. var $1;
  27751. $1=$recv(self._valuable())._receiver();
  27752. return $1;
  27753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27754. }, function($ctx1) {$ctx1.fill(self,"receiver",{},$globals.AnnouncementSubscription)});
  27755. //>>excludeEnd("ctx");
  27756. },
  27757. //>>excludeStart("ide", pragmas.excludeIdeData);
  27758. args: [],
  27759. source: "receiver\x0a\x09^ self valuable receiver",
  27760. referencedClasses: [],
  27761. //>>excludeEnd("ide");
  27762. messageSends: ["receiver", "valuable"]
  27763. }),
  27764. $globals.AnnouncementSubscription);
  27765. $core.addMethod(
  27766. $core.method({
  27767. selector: "valuable",
  27768. protocol: 'accessing',
  27769. fn: function (){
  27770. var self=this;
  27771. var $1;
  27772. $1=self["@valuable"];
  27773. return $1;
  27774. },
  27775. //>>excludeStart("ide", pragmas.excludeIdeData);
  27776. args: [],
  27777. source: "valuable\x0a\x09^ valuable",
  27778. referencedClasses: [],
  27779. //>>excludeEnd("ide");
  27780. messageSends: []
  27781. }),
  27782. $globals.AnnouncementSubscription);
  27783. $core.addMethod(
  27784. $core.method({
  27785. selector: "valuable:",
  27786. protocol: 'accessing',
  27787. fn: function (aValuable){
  27788. var self=this;
  27789. self["@valuable"]=aValuable;
  27790. return self;
  27791. },
  27792. //>>excludeStart("ide", pragmas.excludeIdeData);
  27793. args: ["aValuable"],
  27794. source: "valuable: aValuable\x0a\x09valuable := aValuable",
  27795. referencedClasses: [],
  27796. //>>excludeEnd("ide");
  27797. messageSends: []
  27798. }),
  27799. $globals.AnnouncementSubscription);
  27800. $core.addClass('AnnouncementValuable', $globals.Object, ['valuable', 'receiver'], 'Kernel-Announcements');
  27801. //>>excludeStart("ide", pragmas.excludeIdeData);
  27802. $globals.AnnouncementValuable.comment="I wrap `valuable` objects (typically instances of `BlockClosure`) with a `receiver` to be able to unregister subscriptions based on a `receiver`.";
  27803. //>>excludeEnd("ide");
  27804. $core.addMethod(
  27805. $core.method({
  27806. selector: "receiver",
  27807. protocol: 'accessing',
  27808. fn: function (){
  27809. var self=this;
  27810. var $1;
  27811. $1=self["@receiver"];
  27812. return $1;
  27813. },
  27814. //>>excludeStart("ide", pragmas.excludeIdeData);
  27815. args: [],
  27816. source: "receiver\x0a\x09^ receiver",
  27817. referencedClasses: [],
  27818. //>>excludeEnd("ide");
  27819. messageSends: []
  27820. }),
  27821. $globals.AnnouncementValuable);
  27822. $core.addMethod(
  27823. $core.method({
  27824. selector: "receiver:",
  27825. protocol: 'accessing',
  27826. fn: function (anObject){
  27827. var self=this;
  27828. self["@receiver"]=anObject;
  27829. return self;
  27830. },
  27831. //>>excludeStart("ide", pragmas.excludeIdeData);
  27832. args: ["anObject"],
  27833. source: "receiver: anObject\x0a\x09receiver := anObject",
  27834. referencedClasses: [],
  27835. //>>excludeEnd("ide");
  27836. messageSends: []
  27837. }),
  27838. $globals.AnnouncementValuable);
  27839. $core.addMethod(
  27840. $core.method({
  27841. selector: "valuable",
  27842. protocol: 'accessing',
  27843. fn: function (){
  27844. var self=this;
  27845. var $1;
  27846. $1=self["@valuable"];
  27847. return $1;
  27848. },
  27849. //>>excludeStart("ide", pragmas.excludeIdeData);
  27850. args: [],
  27851. source: "valuable\x0a\x09^ valuable",
  27852. referencedClasses: [],
  27853. //>>excludeEnd("ide");
  27854. messageSends: []
  27855. }),
  27856. $globals.AnnouncementValuable);
  27857. $core.addMethod(
  27858. $core.method({
  27859. selector: "valuable:",
  27860. protocol: 'accessing',
  27861. fn: function (anObject){
  27862. var self=this;
  27863. self["@valuable"]=anObject;
  27864. return self;
  27865. },
  27866. //>>excludeStart("ide", pragmas.excludeIdeData);
  27867. args: ["anObject"],
  27868. source: "valuable: anObject\x0a\x09valuable := anObject",
  27869. referencedClasses: [],
  27870. //>>excludeEnd("ide");
  27871. messageSends: []
  27872. }),
  27873. $globals.AnnouncementValuable);
  27874. $core.addMethod(
  27875. $core.method({
  27876. selector: "value",
  27877. protocol: 'evaluating',
  27878. fn: function (){
  27879. var self=this;
  27880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27881. return $core.withContext(function($ctx1) {
  27882. //>>excludeEnd("ctx");
  27883. var $1;
  27884. $1=$recv(self._valuable())._value();
  27885. return $1;
  27886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27887. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.AnnouncementValuable)});
  27888. //>>excludeEnd("ctx");
  27889. },
  27890. //>>excludeStart("ide", pragmas.excludeIdeData);
  27891. args: [],
  27892. source: "value\x0a\x09^ self valuable value",
  27893. referencedClasses: [],
  27894. //>>excludeEnd("ide");
  27895. messageSends: ["value", "valuable"]
  27896. }),
  27897. $globals.AnnouncementValuable);
  27898. $core.addMethod(
  27899. $core.method({
  27900. selector: "value:",
  27901. protocol: 'evaluating',
  27902. fn: function (anObject){
  27903. var self=this;
  27904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27905. return $core.withContext(function($ctx1) {
  27906. //>>excludeEnd("ctx");
  27907. var $1;
  27908. $1=$recv(self._valuable())._value_(anObject);
  27909. return $1;
  27910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27911. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject},$globals.AnnouncementValuable)});
  27912. //>>excludeEnd("ctx");
  27913. },
  27914. //>>excludeStart("ide", pragmas.excludeIdeData);
  27915. args: ["anObject"],
  27916. source: "value: anObject\x0a\x09^ self valuable value: anObject",
  27917. referencedClasses: [],
  27918. //>>excludeEnd("ide");
  27919. messageSends: ["value:", "valuable"]
  27920. }),
  27921. $globals.AnnouncementValuable);
  27922. $core.addClass('Announcer', $globals.Object, ['registry', 'subscriptions'], 'Kernel-Announcements');
  27923. //>>excludeStart("ide", pragmas.excludeIdeData);
  27924. $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' ].";
  27925. //>>excludeEnd("ide");
  27926. $core.addMethod(
  27927. $core.method({
  27928. selector: "announce:",
  27929. protocol: 'announcing',
  27930. fn: function (anAnnouncement){
  27931. var self=this;
  27932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27933. return $core.withContext(function($ctx1) {
  27934. //>>excludeEnd("ctx");
  27935. $recv(self["@subscriptions"])._do_((function(each){
  27936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27937. return $core.withContext(function($ctx2) {
  27938. //>>excludeEnd("ctx");
  27939. return $recv(each)._deliver_(anAnnouncement);
  27940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27941. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  27942. //>>excludeEnd("ctx");
  27943. }));
  27944. return self;
  27945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27946. }, function($ctx1) {$ctx1.fill(self,"announce:",{anAnnouncement:anAnnouncement},$globals.Announcer)});
  27947. //>>excludeEnd("ctx");
  27948. },
  27949. //>>excludeStart("ide", pragmas.excludeIdeData);
  27950. args: ["anAnnouncement"],
  27951. source: "announce: anAnnouncement\x0a\x09subscriptions do: [ :each |\x0a\x09\x09each deliver: anAnnouncement ]",
  27952. referencedClasses: [],
  27953. //>>excludeEnd("ide");
  27954. messageSends: ["do:", "deliver:"]
  27955. }),
  27956. $globals.Announcer);
  27957. $core.addMethod(
  27958. $core.method({
  27959. selector: "initialize",
  27960. protocol: 'initialization',
  27961. fn: function (){
  27962. var self=this;
  27963. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  27964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27965. return $core.withContext(function($ctx1) {
  27966. //>>excludeEnd("ctx");
  27967. (
  27968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27969. $ctx1.supercall = true,
  27970. //>>excludeEnd("ctx");
  27971. $globals.Announcer.superclass.fn.prototype._initialize.apply($recv(self), []));
  27972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27973. $ctx1.supercall = false;
  27974. //>>excludeEnd("ctx");;
  27975. self["@subscriptions"]=$recv($OrderedCollection())._new();
  27976. return self;
  27977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27978. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Announcer)});
  27979. //>>excludeEnd("ctx");
  27980. },
  27981. //>>excludeStart("ide", pragmas.excludeIdeData);
  27982. args: [],
  27983. source: "initialize\x0a\x09super initialize.\x0a\x09subscriptions := OrderedCollection new",
  27984. referencedClasses: ["OrderedCollection"],
  27985. //>>excludeEnd("ide");
  27986. messageSends: ["initialize", "new"]
  27987. }),
  27988. $globals.Announcer);
  27989. $core.addMethod(
  27990. $core.method({
  27991. selector: "on:do:",
  27992. protocol: 'subscribing',
  27993. fn: function (aClass,aBlock){
  27994. var self=this;
  27995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27996. return $core.withContext(function($ctx1) {
  27997. //>>excludeEnd("ctx");
  27998. self._on_do_for_(aClass,aBlock,nil);
  27999. return self;
  28000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28001. }, function($ctx1) {$ctx1.fill(self,"on:do:",{aClass:aClass,aBlock:aBlock},$globals.Announcer)});
  28002. //>>excludeEnd("ctx");
  28003. },
  28004. //>>excludeStart("ide", pragmas.excludeIdeData);
  28005. args: ["aClass", "aBlock"],
  28006. source: "on: aClass do: aBlock\x0a\x09self on: aClass do: aBlock for: nil",
  28007. referencedClasses: [],
  28008. //>>excludeEnd("ide");
  28009. messageSends: ["on:do:for:"]
  28010. }),
  28011. $globals.Announcer);
  28012. $core.addMethod(
  28013. $core.method({
  28014. selector: "on:do:for:",
  28015. protocol: 'subscribing',
  28016. fn: function (aClass,aBlock,aReceiver){
  28017. var self=this;
  28018. function $AnnouncementSubscription(){return $globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  28019. function $AnnouncementValuable(){return $globals.AnnouncementValuable||(typeof AnnouncementValuable=="undefined"?nil:AnnouncementValuable)}
  28020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28021. return $core.withContext(function($ctx1) {
  28022. //>>excludeEnd("ctx");
  28023. var $1,$3,$4,$6,$7,$5,$8,$2;
  28024. $1=self["@subscriptions"];
  28025. $3=$recv($AnnouncementSubscription())._new();
  28026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28027. $ctx1.sendIdx["new"]=1;
  28028. //>>excludeEnd("ctx");
  28029. $4=$3;
  28030. $6=$recv($AnnouncementValuable())._new();
  28031. $recv($6)._valuable_(aBlock);
  28032. $recv($6)._receiver_(aReceiver);
  28033. $7=$recv($6)._yourself();
  28034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28035. $ctx1.sendIdx["yourself"]=1;
  28036. //>>excludeEnd("ctx");
  28037. $5=$7;
  28038. $recv($4)._valuable_($5);
  28039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28040. $ctx1.sendIdx["valuable:"]=1;
  28041. //>>excludeEnd("ctx");
  28042. $recv($3)._announcementClass_(aClass);
  28043. $8=$recv($3)._yourself();
  28044. $2=$8;
  28045. $recv($1)._add_($2);
  28046. return self;
  28047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28048. }, function($ctx1) {$ctx1.fill(self,"on:do:for:",{aClass:aClass,aBlock:aBlock,aReceiver:aReceiver},$globals.Announcer)});
  28049. //>>excludeEnd("ctx");
  28050. },
  28051. //>>excludeStart("ide", pragmas.excludeIdeData);
  28052. args: ["aClass", "aBlock", "aReceiver"],
  28053. 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)",
  28054. referencedClasses: ["AnnouncementSubscription", "AnnouncementValuable"],
  28055. //>>excludeEnd("ide");
  28056. messageSends: ["add:", "valuable:", "new", "receiver:", "yourself", "announcementClass:"]
  28057. }),
  28058. $globals.Announcer);
  28059. $core.addMethod(
  28060. $core.method({
  28061. selector: "on:doOnce:",
  28062. protocol: 'subscribing',
  28063. fn: function (aClass,aBlock){
  28064. var self=this;
  28065. var subscription;
  28066. function $AnnouncementSubscription(){return $globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  28067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28068. return $core.withContext(function($ctx1) {
  28069. //>>excludeEnd("ctx");
  28070. var $1,$2;
  28071. $1=$recv($AnnouncementSubscription())._new();
  28072. $recv($1)._announcementClass_(aClass);
  28073. $2=$recv($1)._yourself();
  28074. subscription=$2;
  28075. $recv(subscription)._valuable_((function(ann){
  28076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28077. return $core.withContext(function($ctx2) {
  28078. //>>excludeEnd("ctx");
  28079. $recv(self["@subscriptions"])._remove_(subscription);
  28080. return $recv(aBlock)._value_(ann);
  28081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28082. }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,1)});
  28083. //>>excludeEnd("ctx");
  28084. }));
  28085. $recv(self["@subscriptions"])._add_(subscription);
  28086. return self;
  28087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28088. }, function($ctx1) {$ctx1.fill(self,"on:doOnce:",{aClass:aClass,aBlock:aBlock,subscription:subscription},$globals.Announcer)});
  28089. //>>excludeEnd("ctx");
  28090. },
  28091. //>>excludeStart("ide", pragmas.excludeIdeData);
  28092. args: ["aClass", "aBlock"],
  28093. 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",
  28094. referencedClasses: ["AnnouncementSubscription"],
  28095. //>>excludeEnd("ide");
  28096. messageSends: ["announcementClass:", "new", "yourself", "valuable:", "remove:", "value:", "add:"]
  28097. }),
  28098. $globals.Announcer);
  28099. $core.addMethod(
  28100. $core.method({
  28101. selector: "on:send:to:",
  28102. protocol: 'subscribing',
  28103. fn: function (aClass,aSelector,anObject){
  28104. var self=this;
  28105. function $AnnouncementSubscription(){return $globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  28106. function $MessageSend(){return $globals.MessageSend||(typeof MessageSend=="undefined"?nil:MessageSend)}
  28107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28108. return $core.withContext(function($ctx1) {
  28109. //>>excludeEnd("ctx");
  28110. var $1,$3,$4,$6,$7,$5,$8,$2;
  28111. $1=self["@subscriptions"];
  28112. $3=$recv($AnnouncementSubscription())._new();
  28113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28114. $ctx1.sendIdx["new"]=1;
  28115. //>>excludeEnd("ctx");
  28116. $4=$3;
  28117. $6=$recv($MessageSend())._new();
  28118. $recv($6)._receiver_(anObject);
  28119. $recv($6)._selector_(aSelector);
  28120. $7=$recv($6)._yourself();
  28121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28122. $ctx1.sendIdx["yourself"]=1;
  28123. //>>excludeEnd("ctx");
  28124. $5=$7;
  28125. $recv($4)._valuable_($5);
  28126. $recv($3)._announcementClass_(aClass);
  28127. $8=$recv($3)._yourself();
  28128. $2=$8;
  28129. $recv($1)._add_($2);
  28130. return self;
  28131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28132. }, function($ctx1) {$ctx1.fill(self,"on:send:to:",{aClass:aClass,aSelector:aSelector,anObject:anObject},$globals.Announcer)});
  28133. //>>excludeEnd("ctx");
  28134. },
  28135. //>>excludeStart("ide", pragmas.excludeIdeData);
  28136. args: ["aClass", "aSelector", "anObject"],
  28137. 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)",
  28138. referencedClasses: ["AnnouncementSubscription", "MessageSend"],
  28139. //>>excludeEnd("ide");
  28140. messageSends: ["add:", "valuable:", "new", "receiver:", "selector:", "yourself", "announcementClass:"]
  28141. }),
  28142. $globals.Announcer);
  28143. $core.addMethod(
  28144. $core.method({
  28145. selector: "unsubscribe:",
  28146. protocol: 'subscribing',
  28147. fn: function (anObject){
  28148. var self=this;
  28149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28150. return $core.withContext(function($ctx1) {
  28151. //>>excludeEnd("ctx");
  28152. self["@subscriptions"]=$recv(self["@subscriptions"])._reject_((function(each){
  28153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28154. return $core.withContext(function($ctx2) {
  28155. //>>excludeEnd("ctx");
  28156. return $recv($recv(each)._receiver()).__eq(anObject);
  28157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28158. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  28159. //>>excludeEnd("ctx");
  28160. }));
  28161. return self;
  28162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28163. }, function($ctx1) {$ctx1.fill(self,"unsubscribe:",{anObject:anObject},$globals.Announcer)});
  28164. //>>excludeEnd("ctx");
  28165. },
  28166. //>>excludeStart("ide", pragmas.excludeIdeData);
  28167. args: ["anObject"],
  28168. source: "unsubscribe: anObject\x0a\x09subscriptions := subscriptions reject: [ :each |\x0a\x09\x09each receiver = anObject ]",
  28169. referencedClasses: [],
  28170. //>>excludeEnd("ide");
  28171. messageSends: ["reject:", "=", "receiver"]
  28172. }),
  28173. $globals.Announcer);
  28174. $core.addClass('SystemAnnouncer', $globals.Announcer, [], 'Kernel-Announcements');
  28175. //>>excludeStart("ide", pragmas.excludeIdeData);
  28176. $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`";
  28177. //>>excludeEnd("ide");
  28178. $globals.SystemAnnouncer.klass.iVarNames = ['current'];
  28179. $core.addMethod(
  28180. $core.method({
  28181. selector: "current",
  28182. protocol: 'accessing',
  28183. fn: function (){
  28184. var self=this;
  28185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28186. return $core.withContext(function($ctx1) {
  28187. //>>excludeEnd("ctx");
  28188. var $2,$1,$receiver;
  28189. $2=self["@current"];
  28190. if(($receiver = $2) == null || $receiver.isNil){
  28191. self["@current"]=(
  28192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28193. $ctx1.supercall = true,
  28194. //>>excludeEnd("ctx");
  28195. $globals.SystemAnnouncer.klass.superclass.fn.prototype._new.apply($recv(self), []));
  28196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28197. $ctx1.supercall = false;
  28198. //>>excludeEnd("ctx");;
  28199. $1=self["@current"];
  28200. } else {
  28201. $1=$2;
  28202. };
  28203. return $1;
  28204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28205. }, function($ctx1) {$ctx1.fill(self,"current",{},$globals.SystemAnnouncer.klass)});
  28206. //>>excludeEnd("ctx");
  28207. },
  28208. //>>excludeStart("ide", pragmas.excludeIdeData);
  28209. args: [],
  28210. source: "current\x0a\x09^ current ifNil: [ current := super new ]",
  28211. referencedClasses: [],
  28212. //>>excludeEnd("ide");
  28213. messageSends: ["ifNil:", "new"]
  28214. }),
  28215. $globals.SystemAnnouncer.klass);
  28216. $core.addMethod(
  28217. $core.method({
  28218. selector: "new",
  28219. protocol: 'instance creation',
  28220. fn: function (){
  28221. var self=this;
  28222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28223. return $core.withContext(function($ctx1) {
  28224. //>>excludeEnd("ctx");
  28225. self._shouldNotImplement();
  28226. return self;
  28227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28228. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.SystemAnnouncer.klass)});
  28229. //>>excludeEnd("ctx");
  28230. },
  28231. //>>excludeStart("ide", pragmas.excludeIdeData);
  28232. args: [],
  28233. source: "new\x0a\x09self shouldNotImplement",
  28234. referencedClasses: [],
  28235. //>>excludeEnd("ide");
  28236. messageSends: ["shouldNotImplement"]
  28237. }),
  28238. $globals.SystemAnnouncer.klass);
  28239. $core.addClass('SystemAnnouncement', $globals.Object, [], 'Kernel-Announcements');
  28240. //>>excludeStart("ide", pragmas.excludeIdeData);
  28241. $globals.SystemAnnouncement.comment="I am the superclass of all system announcements";
  28242. //>>excludeEnd("ide");
  28243. $core.addMethod(
  28244. $core.method({
  28245. selector: "classTag",
  28246. protocol: 'accessing',
  28247. fn: function (){
  28248. var self=this;
  28249. return "announcement";
  28250. },
  28251. //>>excludeStart("ide", pragmas.excludeIdeData);
  28252. args: [],
  28253. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'announcement'",
  28254. referencedClasses: [],
  28255. //>>excludeEnd("ide");
  28256. messageSends: []
  28257. }),
  28258. $globals.SystemAnnouncement.klass);
  28259. $core.addClass('ClassAnnouncement', $globals.SystemAnnouncement, ['theClass'], 'Kernel-Announcements');
  28260. //>>excludeStart("ide", pragmas.excludeIdeData);
  28261. $globals.ClassAnnouncement.comment="I am the abstract superclass of class-related announcements.";
  28262. //>>excludeEnd("ide");
  28263. $core.addMethod(
  28264. $core.method({
  28265. selector: "theClass",
  28266. protocol: 'accessing',
  28267. fn: function (){
  28268. var self=this;
  28269. var $1;
  28270. $1=self["@theClass"];
  28271. return $1;
  28272. },
  28273. //>>excludeStart("ide", pragmas.excludeIdeData);
  28274. args: [],
  28275. source: "theClass\x0a\x09^ theClass",
  28276. referencedClasses: [],
  28277. //>>excludeEnd("ide");
  28278. messageSends: []
  28279. }),
  28280. $globals.ClassAnnouncement);
  28281. $core.addMethod(
  28282. $core.method({
  28283. selector: "theClass:",
  28284. protocol: 'accessing',
  28285. fn: function (aClass){
  28286. var self=this;
  28287. self["@theClass"]=aClass;
  28288. return self;
  28289. },
  28290. //>>excludeStart("ide", pragmas.excludeIdeData);
  28291. args: ["aClass"],
  28292. source: "theClass: aClass\x0a\x09theClass := aClass",
  28293. referencedClasses: [],
  28294. //>>excludeEnd("ide");
  28295. messageSends: []
  28296. }),
  28297. $globals.ClassAnnouncement);
  28298. $core.addClass('ClassAdded', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  28299. //>>excludeStart("ide", pragmas.excludeIdeData);
  28300. $globals.ClassAdded.comment="I am emitted when a class is added to the system.\x0aSee ClassBuilder >> #addSubclassOf:... methods";
  28301. //>>excludeEnd("ide");
  28302. $core.addClass('ClassCommentChanged', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  28303. //>>excludeStart("ide", pragmas.excludeIdeData);
  28304. $globals.ClassCommentChanged.comment="I am emitted when the comment of a class changes. (Behavior >> #comment)";
  28305. //>>excludeEnd("ide");
  28306. $core.addClass('ClassDefinitionChanged', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  28307. //>>excludeStart("ide", pragmas.excludeIdeData);
  28308. $globals.ClassDefinitionChanged.comment="I am emitted when the definition of a class changes.\x0aSee ClassBuilder >> #class:instanceVariableNames:";
  28309. //>>excludeEnd("ide");
  28310. $core.addClass('ClassMigrated', $globals.ClassAnnouncement, ['oldClass'], 'Kernel-Announcements');
  28311. //>>excludeStart("ide", pragmas.excludeIdeData);
  28312. $globals.ClassMigrated.comment="I am emitted when a class is migrated.";
  28313. //>>excludeEnd("ide");
  28314. $core.addMethod(
  28315. $core.method({
  28316. selector: "oldClass",
  28317. protocol: 'accessing',
  28318. fn: function (){
  28319. var self=this;
  28320. var $1;
  28321. $1=self["@oldClass"];
  28322. return $1;
  28323. },
  28324. //>>excludeStart("ide", pragmas.excludeIdeData);
  28325. args: [],
  28326. source: "oldClass\x0a\x09^ oldClass",
  28327. referencedClasses: [],
  28328. //>>excludeEnd("ide");
  28329. messageSends: []
  28330. }),
  28331. $globals.ClassMigrated);
  28332. $core.addMethod(
  28333. $core.method({
  28334. selector: "oldClass:",
  28335. protocol: 'accessing',
  28336. fn: function (aClass){
  28337. var self=this;
  28338. self["@oldClass"]=aClass;
  28339. return self;
  28340. },
  28341. //>>excludeStart("ide", pragmas.excludeIdeData);
  28342. args: ["aClass"],
  28343. source: "oldClass: aClass\x0a\x09oldClass := aClass",
  28344. referencedClasses: [],
  28345. //>>excludeEnd("ide");
  28346. messageSends: []
  28347. }),
  28348. $globals.ClassMigrated);
  28349. $core.addClass('ClassMoved', $globals.ClassAnnouncement, ['oldPackage'], 'Kernel-Announcements');
  28350. //>>excludeStart("ide", pragmas.excludeIdeData);
  28351. $globals.ClassMoved.comment="I am emitted when a class is moved from one package to another.";
  28352. //>>excludeEnd("ide");
  28353. $core.addMethod(
  28354. $core.method({
  28355. selector: "oldPackage",
  28356. protocol: 'accessing',
  28357. fn: function (){
  28358. var self=this;
  28359. var $1;
  28360. $1=self["@oldPackage"];
  28361. return $1;
  28362. },
  28363. //>>excludeStart("ide", pragmas.excludeIdeData);
  28364. args: [],
  28365. source: "oldPackage\x0a\x09^ oldPackage",
  28366. referencedClasses: [],
  28367. //>>excludeEnd("ide");
  28368. messageSends: []
  28369. }),
  28370. $globals.ClassMoved);
  28371. $core.addMethod(
  28372. $core.method({
  28373. selector: "oldPackage:",
  28374. protocol: 'accessing',
  28375. fn: function (aPackage){
  28376. var self=this;
  28377. self["@oldPackage"]=aPackage;
  28378. return self;
  28379. },
  28380. //>>excludeStart("ide", pragmas.excludeIdeData);
  28381. args: ["aPackage"],
  28382. source: "oldPackage: aPackage\x0a\x09oldPackage := aPackage",
  28383. referencedClasses: [],
  28384. //>>excludeEnd("ide");
  28385. messageSends: []
  28386. }),
  28387. $globals.ClassMoved);
  28388. $core.addClass('ClassRemoved', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  28389. //>>excludeStart("ide", pragmas.excludeIdeData);
  28390. $globals.ClassRemoved.comment="I am emitted when a class is removed.\x0aSee Smalltalk >> #removeClass:";
  28391. //>>excludeEnd("ide");
  28392. $core.addClass('ClassRenamed', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  28393. //>>excludeStart("ide", pragmas.excludeIdeData);
  28394. $globals.ClassRenamed.comment="I am emitted when a class is renamed.\x0aSee ClassBuilder >> #renameClass:to:";
  28395. //>>excludeEnd("ide");
  28396. $core.addClass('MethodAnnouncement', $globals.SystemAnnouncement, ['method'], 'Kernel-Announcements');
  28397. //>>excludeStart("ide", pragmas.excludeIdeData);
  28398. $globals.MethodAnnouncement.comment="I am the abstract superclass of method-related announcements.";
  28399. //>>excludeEnd("ide");
  28400. $core.addMethod(
  28401. $core.method({
  28402. selector: "method",
  28403. protocol: 'accessing',
  28404. fn: function (){
  28405. var self=this;
  28406. var $1;
  28407. $1=self["@method"];
  28408. return $1;
  28409. },
  28410. //>>excludeStart("ide", pragmas.excludeIdeData);
  28411. args: [],
  28412. source: "method\x0a\x09^ method",
  28413. referencedClasses: [],
  28414. //>>excludeEnd("ide");
  28415. messageSends: []
  28416. }),
  28417. $globals.MethodAnnouncement);
  28418. $core.addMethod(
  28419. $core.method({
  28420. selector: "method:",
  28421. protocol: 'accessing',
  28422. fn: function (aCompiledMethod){
  28423. var self=this;
  28424. self["@method"]=aCompiledMethod;
  28425. return self;
  28426. },
  28427. //>>excludeStart("ide", pragmas.excludeIdeData);
  28428. args: ["aCompiledMethod"],
  28429. source: "method: aCompiledMethod\x0a\x09method := aCompiledMethod",
  28430. referencedClasses: [],
  28431. //>>excludeEnd("ide");
  28432. messageSends: []
  28433. }),
  28434. $globals.MethodAnnouncement);
  28435. $core.addClass('MethodAdded', $globals.MethodAnnouncement, [], 'Kernel-Announcements');
  28436. //>>excludeStart("ide", pragmas.excludeIdeData);
  28437. $globals.MethodAdded.comment="I am emitted when a `CompiledMethod` is added to a class.";
  28438. //>>excludeEnd("ide");
  28439. $core.addClass('MethodModified', $globals.MethodAnnouncement, ['oldMethod'], 'Kernel-Announcements');
  28440. //>>excludeStart("ide", pragmas.excludeIdeData);
  28441. $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.";
  28442. //>>excludeEnd("ide");
  28443. $core.addMethod(
  28444. $core.method({
  28445. selector: "oldMethod",
  28446. protocol: 'accessing',
  28447. fn: function (){
  28448. var self=this;
  28449. var $1;
  28450. $1=self["@oldMethod"];
  28451. return $1;
  28452. },
  28453. //>>excludeStart("ide", pragmas.excludeIdeData);
  28454. args: [],
  28455. source: "oldMethod\x0a\x09^ oldMethod",
  28456. referencedClasses: [],
  28457. //>>excludeEnd("ide");
  28458. messageSends: []
  28459. }),
  28460. $globals.MethodModified);
  28461. $core.addMethod(
  28462. $core.method({
  28463. selector: "oldMethod:",
  28464. protocol: 'accessing',
  28465. fn: function (aMethod){
  28466. var self=this;
  28467. self["@oldMethod"]=aMethod;
  28468. return self;
  28469. },
  28470. //>>excludeStart("ide", pragmas.excludeIdeData);
  28471. args: ["aMethod"],
  28472. source: "oldMethod: aMethod\x0a\x09oldMethod := aMethod",
  28473. referencedClasses: [],
  28474. //>>excludeEnd("ide");
  28475. messageSends: []
  28476. }),
  28477. $globals.MethodModified);
  28478. $core.addClass('MethodMoved', $globals.MethodAnnouncement, ['oldProtocol'], 'Kernel-Announcements');
  28479. //>>excludeStart("ide", pragmas.excludeIdeData);
  28480. $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.";
  28481. //>>excludeEnd("ide");
  28482. $core.addMethod(
  28483. $core.method({
  28484. selector: "oldProtocol",
  28485. protocol: 'accessing',
  28486. fn: function (){
  28487. var self=this;
  28488. var $1;
  28489. $1=self["@oldProtocol"];
  28490. return $1;
  28491. },
  28492. //>>excludeStart("ide", pragmas.excludeIdeData);
  28493. args: [],
  28494. source: "oldProtocol\x0a\x09^ oldProtocol",
  28495. referencedClasses: [],
  28496. //>>excludeEnd("ide");
  28497. messageSends: []
  28498. }),
  28499. $globals.MethodMoved);
  28500. $core.addMethod(
  28501. $core.method({
  28502. selector: "oldProtocol:",
  28503. protocol: 'accessing',
  28504. fn: function (aString){
  28505. var self=this;
  28506. self["@oldProtocol"]=aString;
  28507. return self;
  28508. },
  28509. //>>excludeStart("ide", pragmas.excludeIdeData);
  28510. args: ["aString"],
  28511. source: "oldProtocol: aString\x0a\x09oldProtocol := aString",
  28512. referencedClasses: [],
  28513. //>>excludeEnd("ide");
  28514. messageSends: []
  28515. }),
  28516. $globals.MethodMoved);
  28517. $core.addClass('MethodRemoved', $globals.MethodAnnouncement, [], 'Kernel-Announcements');
  28518. //>>excludeStart("ide", pragmas.excludeIdeData);
  28519. $globals.MethodRemoved.comment="I am emitted when a `CompiledMethod` is removed from a class.";
  28520. //>>excludeEnd("ide");
  28521. $core.addClass('PackageAnnouncement', $globals.SystemAnnouncement, ['package'], 'Kernel-Announcements');
  28522. //>>excludeStart("ide", pragmas.excludeIdeData);
  28523. $globals.PackageAnnouncement.comment="I am the abstract superclass of package-related announcements.";
  28524. //>>excludeEnd("ide");
  28525. $core.addMethod(
  28526. $core.method({
  28527. selector: "package",
  28528. protocol: 'accessing',
  28529. fn: function (){
  28530. var self=this;
  28531. var $1;
  28532. $1=self["@package"];
  28533. return $1;
  28534. },
  28535. //>>excludeStart("ide", pragmas.excludeIdeData);
  28536. args: [],
  28537. source: "package\x0a\x09^ package",
  28538. referencedClasses: [],
  28539. //>>excludeEnd("ide");
  28540. messageSends: []
  28541. }),
  28542. $globals.PackageAnnouncement);
  28543. $core.addMethod(
  28544. $core.method({
  28545. selector: "package:",
  28546. protocol: 'accessing',
  28547. fn: function (aPackage){
  28548. var self=this;
  28549. self["@package"]=aPackage;
  28550. return self;
  28551. },
  28552. //>>excludeStart("ide", pragmas.excludeIdeData);
  28553. args: ["aPackage"],
  28554. source: "package: aPackage\x0a\x09package := aPackage",
  28555. referencedClasses: [],
  28556. //>>excludeEnd("ide");
  28557. messageSends: []
  28558. }),
  28559. $globals.PackageAnnouncement);
  28560. $core.addClass('PackageAdded', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  28561. //>>excludeStart("ide", pragmas.excludeIdeData);
  28562. $globals.PackageAdded.comment="I am emitted when a `Package` is added to the system.";
  28563. //>>excludeEnd("ide");
  28564. $core.addClass('PackageClean', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  28565. //>>excludeStart("ide", pragmas.excludeIdeData);
  28566. $globals.PackageClean.comment="I am emitted when a package is committed and becomes clean.";
  28567. //>>excludeEnd("ide");
  28568. $core.addClass('PackageDirty', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  28569. //>>excludeStart("ide", pragmas.excludeIdeData);
  28570. $globals.PackageDirty.comment="I am emitted when a package becomes dirty.";
  28571. //>>excludeEnd("ide");
  28572. $core.addClass('PackageRemoved', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  28573. //>>excludeStart("ide", pragmas.excludeIdeData);
  28574. $globals.PackageRemoved.comment="I am emitted when a `Package` is removed from the system.";
  28575. //>>excludeEnd("ide");
  28576. $core.addClass('ProtocolAnnouncement', $globals.SystemAnnouncement, ['theClass', 'protocol'], 'Kernel-Announcements');
  28577. //>>excludeStart("ide", pragmas.excludeIdeData);
  28578. $globals.ProtocolAnnouncement.comment="I am the abstract superclass of protocol-related announcements.";
  28579. //>>excludeEnd("ide");
  28580. $core.addMethod(
  28581. $core.method({
  28582. selector: "package",
  28583. protocol: 'accessing',
  28584. fn: function (){
  28585. var self=this;
  28586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28587. return $core.withContext(function($ctx1) {
  28588. //>>excludeEnd("ctx");
  28589. var $2,$1,$receiver;
  28590. $2=self._theClass();
  28591. if(($receiver = $2) == null || $receiver.isNil){
  28592. $1=$2;
  28593. } else {
  28594. var class_;
  28595. class_=$receiver;
  28596. $1=$recv(class_)._packageOfProtocol_(self._protocol());
  28597. };
  28598. return $1;
  28599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28600. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.ProtocolAnnouncement)});
  28601. //>>excludeEnd("ctx");
  28602. },
  28603. //>>excludeStart("ide", pragmas.excludeIdeData);
  28604. args: [],
  28605. source: "package\x0a\x09\x0a\x09^ self theClass ifNotNil: [ :class | class packageOfProtocol: self protocol ]",
  28606. referencedClasses: [],
  28607. //>>excludeEnd("ide");
  28608. messageSends: ["ifNotNil:", "theClass", "packageOfProtocol:", "protocol"]
  28609. }),
  28610. $globals.ProtocolAnnouncement);
  28611. $core.addMethod(
  28612. $core.method({
  28613. selector: "protocol",
  28614. protocol: 'accessing',
  28615. fn: function (){
  28616. var self=this;
  28617. var $1;
  28618. $1=self["@protocol"];
  28619. return $1;
  28620. },
  28621. //>>excludeStart("ide", pragmas.excludeIdeData);
  28622. args: [],
  28623. source: "protocol\x0a\x09^ protocol",
  28624. referencedClasses: [],
  28625. //>>excludeEnd("ide");
  28626. messageSends: []
  28627. }),
  28628. $globals.ProtocolAnnouncement);
  28629. $core.addMethod(
  28630. $core.method({
  28631. selector: "protocol:",
  28632. protocol: 'accessing',
  28633. fn: function (aString){
  28634. var self=this;
  28635. self["@protocol"]=aString;
  28636. return self;
  28637. },
  28638. //>>excludeStart("ide", pragmas.excludeIdeData);
  28639. args: ["aString"],
  28640. source: "protocol: aString\x0a\x09protocol := aString",
  28641. referencedClasses: [],
  28642. //>>excludeEnd("ide");
  28643. messageSends: []
  28644. }),
  28645. $globals.ProtocolAnnouncement);
  28646. $core.addMethod(
  28647. $core.method({
  28648. selector: "theClass",
  28649. protocol: 'accessing',
  28650. fn: function (){
  28651. var self=this;
  28652. var $1;
  28653. $1=self["@theClass"];
  28654. return $1;
  28655. },
  28656. //>>excludeStart("ide", pragmas.excludeIdeData);
  28657. args: [],
  28658. source: "theClass\x0a\x09^ theClass",
  28659. referencedClasses: [],
  28660. //>>excludeEnd("ide");
  28661. messageSends: []
  28662. }),
  28663. $globals.ProtocolAnnouncement);
  28664. $core.addMethod(
  28665. $core.method({
  28666. selector: "theClass:",
  28667. protocol: 'accessing',
  28668. fn: function (aClass){
  28669. var self=this;
  28670. self["@theClass"]=aClass;
  28671. return self;
  28672. },
  28673. //>>excludeStart("ide", pragmas.excludeIdeData);
  28674. args: ["aClass"],
  28675. source: "theClass: aClass\x0a\x09theClass := aClass",
  28676. referencedClasses: [],
  28677. //>>excludeEnd("ide");
  28678. messageSends: []
  28679. }),
  28680. $globals.ProtocolAnnouncement);
  28681. $core.addClass('ProtocolAdded', $globals.ProtocolAnnouncement, [], 'Kernel-Announcements');
  28682. //>>excludeStart("ide", pragmas.excludeIdeData);
  28683. $globals.ProtocolAdded.comment="I am emitted when a protocol is added to a class.";
  28684. //>>excludeEnd("ide");
  28685. $core.addClass('ProtocolRemoved', $globals.ProtocolAnnouncement, [], 'Kernel-Announcements');
  28686. //>>excludeStart("ide", pragmas.excludeIdeData);
  28687. $globals.ProtocolRemoved.comment="I am emitted when a protocol is removed from a class.";
  28688. //>>excludeEnd("ide");
  28689. });
  28690. define("amber_core/Platform-Services", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Collections"], function($boot){
  28691. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  28692. $core.addPackage('Platform-Services');
  28693. $core.packages["Platform-Services"].innerEval = function (expr) { return eval(expr); };
  28694. $core.packages["Platform-Services"].transport = {"type":"amd","amdNamespace":"amber_core"};
  28695. $core.addClass('ConsoleErrorHandler', $globals.Object, [], 'Platform-Services');
  28696. //>>excludeStart("ide", pragmas.excludeIdeData);
  28697. $globals.ConsoleErrorHandler.comment="I am manage Smalltalk errors, displaying the stack in the console.";
  28698. //>>excludeEnd("ide");
  28699. $core.addMethod(
  28700. $core.method({
  28701. selector: "handleError:",
  28702. protocol: 'error handling',
  28703. fn: function (anError){
  28704. var self=this;
  28705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28706. return $core.withContext(function($ctx1) {
  28707. //>>excludeEnd("ctx");
  28708. var $1,$receiver;
  28709. $1=$recv(anError)._context();
  28710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28711. $ctx1.sendIdx["context"]=1;
  28712. //>>excludeEnd("ctx");
  28713. if(($receiver = $1) == null || $receiver.isNil){
  28714. $1;
  28715. } else {
  28716. self._logErrorContext_($recv(anError)._context());
  28717. };
  28718. self._logError_(anError);
  28719. return self;
  28720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28721. }, function($ctx1) {$ctx1.fill(self,"handleError:",{anError:anError},$globals.ConsoleErrorHandler)});
  28722. //>>excludeEnd("ctx");
  28723. },
  28724. //>>excludeStart("ide", pragmas.excludeIdeData);
  28725. args: ["anError"],
  28726. source: "handleError: anError\x0a\x09anError context ifNotNil: [ self logErrorContext: anError context ].\x0a\x09self logError: anError",
  28727. referencedClasses: [],
  28728. //>>excludeEnd("ide");
  28729. messageSends: ["ifNotNil:", "context", "logErrorContext:", "logError:"]
  28730. }),
  28731. $globals.ConsoleErrorHandler);
  28732. $core.addMethod(
  28733. $core.method({
  28734. selector: "log:",
  28735. protocol: 'private',
  28736. fn: function (aString){
  28737. var self=this;
  28738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28739. return $core.withContext(function($ctx1) {
  28740. //>>excludeEnd("ctx");
  28741. $recv(console)._log_(aString);
  28742. return self;
  28743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28744. }, function($ctx1) {$ctx1.fill(self,"log:",{aString:aString},$globals.ConsoleErrorHandler)});
  28745. //>>excludeEnd("ctx");
  28746. },
  28747. //>>excludeStart("ide", pragmas.excludeIdeData);
  28748. args: ["aString"],
  28749. source: "log: aString\x0a\x09console log: aString",
  28750. referencedClasses: [],
  28751. //>>excludeEnd("ide");
  28752. messageSends: ["log:"]
  28753. }),
  28754. $globals.ConsoleErrorHandler);
  28755. $core.addMethod(
  28756. $core.method({
  28757. selector: "logContext:",
  28758. protocol: 'private',
  28759. fn: function (aContext){
  28760. var self=this;
  28761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28762. return $core.withContext(function($ctx1) {
  28763. //>>excludeEnd("ctx");
  28764. var $1,$receiver;
  28765. $1=$recv(aContext)._home();
  28766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28767. $ctx1.sendIdx["home"]=1;
  28768. //>>excludeEnd("ctx");
  28769. if(($receiver = $1) == null || $receiver.isNil){
  28770. $1;
  28771. } else {
  28772. self._logContext_($recv(aContext)._home());
  28773. };
  28774. self._log_($recv(aContext)._asString());
  28775. return self;
  28776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28777. }, function($ctx1) {$ctx1.fill(self,"logContext:",{aContext:aContext},$globals.ConsoleErrorHandler)});
  28778. //>>excludeEnd("ctx");
  28779. },
  28780. //>>excludeStart("ide", pragmas.excludeIdeData);
  28781. args: ["aContext"],
  28782. source: "logContext: aContext\x0a\x09aContext home ifNotNil: [\x0a\x09\x09self logContext: aContext home ].\x0a\x09self log: aContext asString",
  28783. referencedClasses: [],
  28784. //>>excludeEnd("ide");
  28785. messageSends: ["ifNotNil:", "home", "logContext:", "log:", "asString"]
  28786. }),
  28787. $globals.ConsoleErrorHandler);
  28788. $core.addMethod(
  28789. $core.method({
  28790. selector: "logError:",
  28791. protocol: 'private',
  28792. fn: function (anError){
  28793. var self=this;
  28794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28795. return $core.withContext(function($ctx1) {
  28796. //>>excludeEnd("ctx");
  28797. self._log_($recv(anError)._messageText());
  28798. return self;
  28799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28800. }, function($ctx1) {$ctx1.fill(self,"logError:",{anError:anError},$globals.ConsoleErrorHandler)});
  28801. //>>excludeEnd("ctx");
  28802. },
  28803. //>>excludeStart("ide", pragmas.excludeIdeData);
  28804. args: ["anError"],
  28805. source: "logError: anError\x0a\x09self log: anError messageText",
  28806. referencedClasses: [],
  28807. //>>excludeEnd("ide");
  28808. messageSends: ["log:", "messageText"]
  28809. }),
  28810. $globals.ConsoleErrorHandler);
  28811. $core.addMethod(
  28812. $core.method({
  28813. selector: "logErrorContext:",
  28814. protocol: 'private',
  28815. fn: function (aContext){
  28816. var self=this;
  28817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28818. return $core.withContext(function($ctx1) {
  28819. //>>excludeEnd("ctx");
  28820. var $1,$receiver;
  28821. if(($receiver = aContext) == null || $receiver.isNil){
  28822. aContext;
  28823. } else {
  28824. $1=$recv(aContext)._home();
  28825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28826. $ctx1.sendIdx["home"]=1;
  28827. //>>excludeEnd("ctx");
  28828. if(($receiver = $1) == null || $receiver.isNil){
  28829. $1;
  28830. } else {
  28831. self._logContext_($recv(aContext)._home());
  28832. };
  28833. };
  28834. return self;
  28835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28836. }, function($ctx1) {$ctx1.fill(self,"logErrorContext:",{aContext:aContext},$globals.ConsoleErrorHandler)});
  28837. //>>excludeEnd("ctx");
  28838. },
  28839. //>>excludeStart("ide", pragmas.excludeIdeData);
  28840. args: ["aContext"],
  28841. source: "logErrorContext: aContext\x0a\x09aContext ifNotNil: [\x0a\x09\x09aContext home ifNotNil: [\x0a\x09\x09\x09self logContext: aContext home ]]",
  28842. referencedClasses: [],
  28843. //>>excludeEnd("ide");
  28844. messageSends: ["ifNotNil:", "home", "logContext:"]
  28845. }),
  28846. $globals.ConsoleErrorHandler);
  28847. $globals.ConsoleErrorHandler.klass.iVarNames = ['current'];
  28848. $core.addMethod(
  28849. $core.method({
  28850. selector: "initialize",
  28851. protocol: 'initialization',
  28852. fn: function (){
  28853. var self=this;
  28854. function $ErrorHandler(){return $globals.ErrorHandler||(typeof ErrorHandler=="undefined"?nil:ErrorHandler)}
  28855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28856. return $core.withContext(function($ctx1) {
  28857. //>>excludeEnd("ctx");
  28858. $recv($ErrorHandler())._registerIfNone_(self._new());
  28859. return self;
  28860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28861. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ConsoleErrorHandler.klass)});
  28862. //>>excludeEnd("ctx");
  28863. },
  28864. //>>excludeStart("ide", pragmas.excludeIdeData);
  28865. args: [],
  28866. source: "initialize\x0a\x09ErrorHandler registerIfNone: self new",
  28867. referencedClasses: ["ErrorHandler"],
  28868. //>>excludeEnd("ide");
  28869. messageSends: ["registerIfNone:", "new"]
  28870. }),
  28871. $globals.ConsoleErrorHandler.klass);
  28872. $core.addClass('ConsoleTranscript', $globals.Object, ['textarea'], 'Platform-Services');
  28873. //>>excludeStart("ide", pragmas.excludeIdeData);
  28874. $globals.ConsoleTranscript.comment="I am a specific transcript emitting to the JavaScript console.\x0a\x0aIf no other transcript is registered, I am the default.";
  28875. //>>excludeEnd("ide");
  28876. $core.addMethod(
  28877. $core.method({
  28878. selector: "clear",
  28879. protocol: 'printing',
  28880. fn: function (){
  28881. var self=this;
  28882. return self;
  28883. },
  28884. //>>excludeStart("ide", pragmas.excludeIdeData);
  28885. args: [],
  28886. source: "clear\x0a\x09\x22no op\x22",
  28887. referencedClasses: [],
  28888. //>>excludeEnd("ide");
  28889. messageSends: []
  28890. }),
  28891. $globals.ConsoleTranscript);
  28892. $core.addMethod(
  28893. $core.method({
  28894. selector: "cr",
  28895. protocol: 'printing',
  28896. fn: function (){
  28897. var self=this;
  28898. return self;
  28899. },
  28900. //>>excludeStart("ide", pragmas.excludeIdeData);
  28901. args: [],
  28902. source: "cr\x0a\x09\x22no op\x22",
  28903. referencedClasses: [],
  28904. //>>excludeEnd("ide");
  28905. messageSends: []
  28906. }),
  28907. $globals.ConsoleTranscript);
  28908. $core.addMethod(
  28909. $core.method({
  28910. selector: "open",
  28911. protocol: 'actions',
  28912. fn: function (){
  28913. var self=this;
  28914. return self;
  28915. },
  28916. //>>excludeStart("ide", pragmas.excludeIdeData);
  28917. args: [],
  28918. source: "open",
  28919. referencedClasses: [],
  28920. //>>excludeEnd("ide");
  28921. messageSends: []
  28922. }),
  28923. $globals.ConsoleTranscript);
  28924. $core.addMethod(
  28925. $core.method({
  28926. selector: "show:",
  28927. protocol: 'printing',
  28928. fn: function (anObject){
  28929. var self=this;
  28930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28931. return $core.withContext(function($ctx1) {
  28932. //>>excludeEnd("ctx");
  28933. console.log(String($recv(anObject)._asString()));
  28934. return self;
  28935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28936. }, function($ctx1) {$ctx1.fill(self,"show:",{anObject:anObject},$globals.ConsoleTranscript)});
  28937. //>>excludeEnd("ctx");
  28938. },
  28939. //>>excludeStart("ide", pragmas.excludeIdeData);
  28940. args: ["anObject"],
  28941. 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()))>",
  28942. referencedClasses: [],
  28943. //>>excludeEnd("ide");
  28944. messageSends: []
  28945. }),
  28946. $globals.ConsoleTranscript);
  28947. $core.addMethod(
  28948. $core.method({
  28949. selector: "initialize",
  28950. protocol: 'initialization',
  28951. fn: function (){
  28952. var self=this;
  28953. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  28954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28955. return $core.withContext(function($ctx1) {
  28956. //>>excludeEnd("ctx");
  28957. $recv($Transcript())._registerIfNone_(self._new());
  28958. return self;
  28959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28960. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ConsoleTranscript.klass)});
  28961. //>>excludeEnd("ctx");
  28962. },
  28963. //>>excludeStart("ide", pragmas.excludeIdeData);
  28964. args: [],
  28965. source: "initialize\x0a\x09Transcript registerIfNone: self new",
  28966. referencedClasses: ["Transcript"],
  28967. //>>excludeEnd("ide");
  28968. messageSends: ["registerIfNone:", "new"]
  28969. }),
  28970. $globals.ConsoleTranscript.klass);
  28971. $core.addClass('InterfacingObject', $globals.Object, [], 'Platform-Services');
  28972. //>>excludeStart("ide", pragmas.excludeIdeData);
  28973. $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 }.";
  28974. //>>excludeEnd("ide");
  28975. $core.addMethod(
  28976. $core.method({
  28977. selector: "ajax:",
  28978. protocol: 'actions',
  28979. fn: function (anObject){
  28980. var self=this;
  28981. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  28982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28983. return $core.withContext(function($ctx1) {
  28984. //>>excludeEnd("ctx");
  28985. var $1;
  28986. $1=$recv($PlatformInterface())._ajax_(anObject);
  28987. return $1;
  28988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28989. }, function($ctx1) {$ctx1.fill(self,"ajax:",{anObject:anObject},$globals.InterfacingObject)});
  28990. //>>excludeEnd("ctx");
  28991. },
  28992. //>>excludeStart("ide", pragmas.excludeIdeData);
  28993. args: ["anObject"],
  28994. source: "ajax: anObject\x0a\x09^ PlatformInterface ajax: anObject",
  28995. referencedClasses: ["PlatformInterface"],
  28996. //>>excludeEnd("ide");
  28997. messageSends: ["ajax:"]
  28998. }),
  28999. $globals.InterfacingObject);
  29000. $core.addMethod(
  29001. $core.method({
  29002. selector: "alert:",
  29003. protocol: 'actions',
  29004. fn: function (aString){
  29005. var self=this;
  29006. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  29007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29008. return $core.withContext(function($ctx1) {
  29009. //>>excludeEnd("ctx");
  29010. var $1;
  29011. $1=$recv($PlatformInterface())._alert_(aString);
  29012. return $1;
  29013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29014. }, function($ctx1) {$ctx1.fill(self,"alert:",{aString:aString},$globals.InterfacingObject)});
  29015. //>>excludeEnd("ctx");
  29016. },
  29017. //>>excludeStart("ide", pragmas.excludeIdeData);
  29018. args: ["aString"],
  29019. source: "alert: aString\x0a\x09^ PlatformInterface alert: aString",
  29020. referencedClasses: ["PlatformInterface"],
  29021. //>>excludeEnd("ide");
  29022. messageSends: ["alert:"]
  29023. }),
  29024. $globals.InterfacingObject);
  29025. $core.addMethod(
  29026. $core.method({
  29027. selector: "confirm:",
  29028. protocol: 'actions',
  29029. fn: function (aString){
  29030. var self=this;
  29031. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  29032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29033. return $core.withContext(function($ctx1) {
  29034. //>>excludeEnd("ctx");
  29035. var $1;
  29036. $1=$recv($PlatformInterface())._confirm_(aString);
  29037. return $1;
  29038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29039. }, function($ctx1) {$ctx1.fill(self,"confirm:",{aString:aString},$globals.InterfacingObject)});
  29040. //>>excludeEnd("ctx");
  29041. },
  29042. //>>excludeStart("ide", pragmas.excludeIdeData);
  29043. args: ["aString"],
  29044. source: "confirm: aString\x0a\x09^ PlatformInterface confirm: aString",
  29045. referencedClasses: ["PlatformInterface"],
  29046. //>>excludeEnd("ide");
  29047. messageSends: ["confirm:"]
  29048. }),
  29049. $globals.InterfacingObject);
  29050. $core.addMethod(
  29051. $core.method({
  29052. selector: "prompt:",
  29053. protocol: 'actions',
  29054. fn: function (aString){
  29055. var self=this;
  29056. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  29057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29058. return $core.withContext(function($ctx1) {
  29059. //>>excludeEnd("ctx");
  29060. var $1;
  29061. $1=$recv($PlatformInterface())._prompt_(aString);
  29062. return $1;
  29063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29064. }, function($ctx1) {$ctx1.fill(self,"prompt:",{aString:aString},$globals.InterfacingObject)});
  29065. //>>excludeEnd("ctx");
  29066. },
  29067. //>>excludeStart("ide", pragmas.excludeIdeData);
  29068. args: ["aString"],
  29069. source: "prompt: aString\x0a\x09^ PlatformInterface prompt: aString",
  29070. referencedClasses: ["PlatformInterface"],
  29071. //>>excludeEnd("ide");
  29072. messageSends: ["prompt:"]
  29073. }),
  29074. $globals.InterfacingObject);
  29075. $core.addMethod(
  29076. $core.method({
  29077. selector: "prompt:default:",
  29078. protocol: 'actions',
  29079. fn: function (aString,defaultString){
  29080. var self=this;
  29081. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  29082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29083. return $core.withContext(function($ctx1) {
  29084. //>>excludeEnd("ctx");
  29085. var $1;
  29086. $1=$recv($PlatformInterface())._prompt_default_(aString,defaultString);
  29087. return $1;
  29088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29089. }, function($ctx1) {$ctx1.fill(self,"prompt:default:",{aString:aString,defaultString:defaultString},$globals.InterfacingObject)});
  29090. //>>excludeEnd("ctx");
  29091. },
  29092. //>>excludeStart("ide", pragmas.excludeIdeData);
  29093. args: ["aString", "defaultString"],
  29094. source: "prompt: aString default: defaultString\x0a\x09^ PlatformInterface prompt: aString default: defaultString",
  29095. referencedClasses: ["PlatformInterface"],
  29096. //>>excludeEnd("ide");
  29097. messageSends: ["prompt:default:"]
  29098. }),
  29099. $globals.InterfacingObject);
  29100. $core.addClass('Environment', $globals.InterfacingObject, [], 'Platform-Services');
  29101. //>>excludeStart("ide", pragmas.excludeIdeData);
  29102. $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.";
  29103. //>>excludeEnd("ide");
  29104. $core.addMethod(
  29105. $core.method({
  29106. selector: "addInstVarNamed:to:",
  29107. protocol: 'compiling',
  29108. fn: function (aString,aClass){
  29109. var self=this;
  29110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29111. return $core.withContext(function($ctx1) {
  29112. //>>excludeEnd("ctx");
  29113. var $1,$2,$3,$4,$5;
  29114. $1=self._classBuilder();
  29115. $2=$recv(aClass)._superclass();
  29116. $3=$recv(aClass)._name();
  29117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29118. $ctx1.sendIdx["name"]=1;
  29119. //>>excludeEnd("ctx");
  29120. $4=$recv($recv(aClass)._instanceVariableNames())._copy();
  29121. $recv($4)._add_(aString);
  29122. $5=$recv($4)._yourself();
  29123. $recv($1)._addSubclassOf_named_instanceVariableNames_package_($2,$3,$5,$recv($recv(aClass)._package())._name());
  29124. return self;
  29125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29126. }, function($ctx1) {$ctx1.fill(self,"addInstVarNamed:to:",{aString:aString,aClass:aClass},$globals.Environment)});
  29127. //>>excludeEnd("ctx");
  29128. },
  29129. //>>excludeStart("ide", pragmas.excludeIdeData);
  29130. args: ["aString", "aClass"],
  29131. 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",
  29132. referencedClasses: [],
  29133. //>>excludeEnd("ide");
  29134. messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "classBuilder", "superclass", "name", "add:", "copy", "instanceVariableNames", "yourself", "package"]
  29135. }),
  29136. $globals.Environment);
  29137. $core.addMethod(
  29138. $core.method({
  29139. selector: "allSelectors",
  29140. protocol: 'accessing',
  29141. fn: function (){
  29142. var self=this;
  29143. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29145. return $core.withContext(function($ctx1) {
  29146. //>>excludeEnd("ctx");
  29147. var $1;
  29148. $1=$recv($recv($Smalltalk())._core())._allSelectors();
  29149. return $1;
  29150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29151. }, function($ctx1) {$ctx1.fill(self,"allSelectors",{},$globals.Environment)});
  29152. //>>excludeEnd("ctx");
  29153. },
  29154. //>>excludeStart("ide", pragmas.excludeIdeData);
  29155. args: [],
  29156. source: "allSelectors\x0a\x09^ Smalltalk core allSelectors",
  29157. referencedClasses: ["Smalltalk"],
  29158. //>>excludeEnd("ide");
  29159. messageSends: ["allSelectors", "core"]
  29160. }),
  29161. $globals.Environment);
  29162. $core.addMethod(
  29163. $core.method({
  29164. selector: "availableClassNames",
  29165. protocol: 'accessing',
  29166. fn: function (){
  29167. var self=this;
  29168. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29170. return $core.withContext(function($ctx1) {
  29171. //>>excludeEnd("ctx");
  29172. var $1;
  29173. $1=$recv($recv($Smalltalk())._classes())._collect_((function(each){
  29174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29175. return $core.withContext(function($ctx2) {
  29176. //>>excludeEnd("ctx");
  29177. return $recv(each)._name();
  29178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29179. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  29180. //>>excludeEnd("ctx");
  29181. }));
  29182. return $1;
  29183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29184. }, function($ctx1) {$ctx1.fill(self,"availableClassNames",{},$globals.Environment)});
  29185. //>>excludeEnd("ctx");
  29186. },
  29187. //>>excludeStart("ide", pragmas.excludeIdeData);
  29188. args: [],
  29189. source: "availableClassNames\x0a\x09^ Smalltalk classes \x0a\x09\x09collect: [ :each | each name ]",
  29190. referencedClasses: ["Smalltalk"],
  29191. //>>excludeEnd("ide");
  29192. messageSends: ["collect:", "classes", "name"]
  29193. }),
  29194. $globals.Environment);
  29195. $core.addMethod(
  29196. $core.method({
  29197. selector: "availablePackageNames",
  29198. protocol: 'accessing',
  29199. fn: function (){
  29200. var self=this;
  29201. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29203. return $core.withContext(function($ctx1) {
  29204. //>>excludeEnd("ctx");
  29205. var $1;
  29206. $1=$recv($recv($Smalltalk())._packages())._collect_((function(each){
  29207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29208. return $core.withContext(function($ctx2) {
  29209. //>>excludeEnd("ctx");
  29210. return $recv(each)._name();
  29211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29212. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  29213. //>>excludeEnd("ctx");
  29214. }));
  29215. return $1;
  29216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29217. }, function($ctx1) {$ctx1.fill(self,"availablePackageNames",{},$globals.Environment)});
  29218. //>>excludeEnd("ctx");
  29219. },
  29220. //>>excludeStart("ide", pragmas.excludeIdeData);
  29221. args: [],
  29222. source: "availablePackageNames\x0a\x09^ Smalltalk packages \x0a\x09\x09collect: [ :each | each name ]",
  29223. referencedClasses: ["Smalltalk"],
  29224. //>>excludeEnd("ide");
  29225. messageSends: ["collect:", "packages", "name"]
  29226. }),
  29227. $globals.Environment);
  29228. $core.addMethod(
  29229. $core.method({
  29230. selector: "availableProtocolsFor:",
  29231. protocol: 'accessing',
  29232. fn: function (aClass){
  29233. var self=this;
  29234. var protocols;
  29235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29236. return $core.withContext(function($ctx1) {
  29237. //>>excludeEnd("ctx");
  29238. var $1,$2,$receiver;
  29239. protocols=$recv(aClass)._protocols();
  29240. $1=$recv(aClass)._superclass();
  29241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29242. $ctx1.sendIdx["superclass"]=1;
  29243. //>>excludeEnd("ctx");
  29244. if(($receiver = $1) == null || $receiver.isNil){
  29245. $1;
  29246. } else {
  29247. $recv(protocols)._addAll_(self._availableProtocolsFor_($recv(aClass)._superclass()));
  29248. };
  29249. $2=$recv($recv($recv(protocols)._asSet())._asArray())._sort();
  29250. return $2;
  29251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29252. }, function($ctx1) {$ctx1.fill(self,"availableProtocolsFor:",{aClass:aClass,protocols:protocols},$globals.Environment)});
  29253. //>>excludeEnd("ctx");
  29254. },
  29255. //>>excludeStart("ide", pragmas.excludeIdeData);
  29256. args: ["aClass"],
  29257. 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",
  29258. referencedClasses: [],
  29259. //>>excludeEnd("ide");
  29260. messageSends: ["protocols", "ifNotNil:", "superclass", "addAll:", "availableProtocolsFor:", "sort", "asArray", "asSet"]
  29261. }),
  29262. $globals.Environment);
  29263. $core.addMethod(
  29264. $core.method({
  29265. selector: "classBuilder",
  29266. protocol: 'accessing',
  29267. fn: function (){
  29268. var self=this;
  29269. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  29270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29271. return $core.withContext(function($ctx1) {
  29272. //>>excludeEnd("ctx");
  29273. var $1;
  29274. $1=$recv($ClassBuilder())._new();
  29275. return $1;
  29276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29277. }, function($ctx1) {$ctx1.fill(self,"classBuilder",{},$globals.Environment)});
  29278. //>>excludeEnd("ctx");
  29279. },
  29280. //>>excludeStart("ide", pragmas.excludeIdeData);
  29281. args: [],
  29282. source: "classBuilder\x0a\x09^ ClassBuilder new",
  29283. referencedClasses: ["ClassBuilder"],
  29284. //>>excludeEnd("ide");
  29285. messageSends: ["new"]
  29286. }),
  29287. $globals.Environment);
  29288. $core.addMethod(
  29289. $core.method({
  29290. selector: "classNamed:",
  29291. protocol: 'accessing',
  29292. fn: function (aString){
  29293. var self=this;
  29294. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29296. return $core.withContext(function($ctx1) {
  29297. //>>excludeEnd("ctx");
  29298. var $2,$1,$receiver;
  29299. $2=$recv($recv($Smalltalk())._globals())._at_($recv(aString)._asSymbol());
  29300. if(($receiver = $2) == null || $receiver.isNil){
  29301. $1=self._error_("Invalid class name");
  29302. } else {
  29303. $1=$2;
  29304. };
  29305. return $1;
  29306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29307. }, function($ctx1) {$ctx1.fill(self,"classNamed:",{aString:aString},$globals.Environment)});
  29308. //>>excludeEnd("ctx");
  29309. },
  29310. //>>excludeStart("ide", pragmas.excludeIdeData);
  29311. args: ["aString"],
  29312. source: "classNamed: aString\x0a\x09^ (Smalltalk globals at: aString asSymbol)\x0a\x09\x09ifNil: [ self error: 'Invalid class name' ]",
  29313. referencedClasses: ["Smalltalk"],
  29314. //>>excludeEnd("ide");
  29315. messageSends: ["ifNil:", "at:", "globals", "asSymbol", "error:"]
  29316. }),
  29317. $globals.Environment);
  29318. $core.addMethod(
  29319. $core.method({
  29320. selector: "classes",
  29321. protocol: 'accessing',
  29322. fn: function (){
  29323. var self=this;
  29324. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29326. return $core.withContext(function($ctx1) {
  29327. //>>excludeEnd("ctx");
  29328. var $1;
  29329. $1=$recv($Smalltalk())._classes();
  29330. return $1;
  29331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29332. }, function($ctx1) {$ctx1.fill(self,"classes",{},$globals.Environment)});
  29333. //>>excludeEnd("ctx");
  29334. },
  29335. //>>excludeStart("ide", pragmas.excludeIdeData);
  29336. args: [],
  29337. source: "classes\x0a\x09^ Smalltalk classes",
  29338. referencedClasses: ["Smalltalk"],
  29339. //>>excludeEnd("ide");
  29340. messageSends: ["classes"]
  29341. }),
  29342. $globals.Environment);
  29343. $core.addMethod(
  29344. $core.method({
  29345. selector: "commitPackage:onSuccess:onError:",
  29346. protocol: 'actions',
  29347. fn: function (aPackage,aBlock,anotherBlock){
  29348. var self=this;
  29349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29350. return $core.withContext(function($ctx1) {
  29351. //>>excludeEnd("ctx");
  29352. $recv($recv(aPackage)._transport())._commitOnSuccess_onError_(aBlock,anotherBlock);
  29353. return self;
  29354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29355. }, function($ctx1) {$ctx1.fill(self,"commitPackage:onSuccess:onError:",{aPackage:aPackage,aBlock:aBlock,anotherBlock:anotherBlock},$globals.Environment)});
  29356. //>>excludeEnd("ctx");
  29357. },
  29358. //>>excludeStart("ide", pragmas.excludeIdeData);
  29359. args: ["aPackage", "aBlock", "anotherBlock"],
  29360. source: "commitPackage: aPackage onSuccess: aBlock onError: anotherBlock\x0a\x09aPackage transport\x0a\x09\x09commitOnSuccess: aBlock\x0a\x09\x09onError: anotherBlock",
  29361. referencedClasses: [],
  29362. //>>excludeEnd("ide");
  29363. messageSends: ["commitOnSuccess:onError:", "transport"]
  29364. }),
  29365. $globals.Environment);
  29366. $core.addMethod(
  29367. $core.method({
  29368. selector: "compileClassComment:for:",
  29369. protocol: 'compiling',
  29370. fn: function (aString,aClass){
  29371. var self=this;
  29372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29373. return $core.withContext(function($ctx1) {
  29374. //>>excludeEnd("ctx");
  29375. $recv(aClass)._comment_(aString);
  29376. return self;
  29377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29378. }, function($ctx1) {$ctx1.fill(self,"compileClassComment:for:",{aString:aString,aClass:aClass},$globals.Environment)});
  29379. //>>excludeEnd("ctx");
  29380. },
  29381. //>>excludeStart("ide", pragmas.excludeIdeData);
  29382. args: ["aString", "aClass"],
  29383. source: "compileClassComment: aString for: aClass\x0a\x09aClass comment: aString",
  29384. referencedClasses: [],
  29385. //>>excludeEnd("ide");
  29386. messageSends: ["comment:"]
  29387. }),
  29388. $globals.Environment);
  29389. $core.addMethod(
  29390. $core.method({
  29391. selector: "compileClassDefinition:",
  29392. protocol: 'compiling',
  29393. fn: function (aString){
  29394. var self=this;
  29395. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  29396. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  29397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29398. return $core.withContext(function($ctx1) {
  29399. //>>excludeEnd("ctx");
  29400. $recv((function(){
  29401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29402. return $core.withContext(function($ctx2) {
  29403. //>>excludeEnd("ctx");
  29404. return self._evaluate_for_(aString,$recv($DoIt())._new());
  29405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29406. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  29407. //>>excludeEnd("ctx");
  29408. }))._on_do_($Error(),(function(error){
  29409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29410. return $core.withContext(function($ctx2) {
  29411. //>>excludeEnd("ctx");
  29412. return self._alert_($recv(error)._messageText());
  29413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29414. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  29415. //>>excludeEnd("ctx");
  29416. }));
  29417. return self;
  29418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29419. }, function($ctx1) {$ctx1.fill(self,"compileClassDefinition:",{aString:aString},$globals.Environment)});
  29420. //>>excludeEnd("ctx");
  29421. },
  29422. //>>excludeStart("ide", pragmas.excludeIdeData);
  29423. args: ["aString"],
  29424. source: "compileClassDefinition: aString\x0a\x09[ self evaluate: aString for: DoIt new ]\x0a\x09\x09on: Error\x0a\x09\x09do: [ :error | self alert: error messageText ]",
  29425. referencedClasses: ["DoIt", "Error"],
  29426. //>>excludeEnd("ide");
  29427. messageSends: ["on:do:", "evaluate:for:", "new", "alert:", "messageText"]
  29428. }),
  29429. $globals.Environment);
  29430. $core.addMethod(
  29431. $core.method({
  29432. selector: "compileMethod:for:protocol:",
  29433. protocol: 'compiling',
  29434. fn: function (sourceCode,class_,protocol){
  29435. var self=this;
  29436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29437. return $core.withContext(function($ctx1) {
  29438. //>>excludeEnd("ctx");
  29439. var $1;
  29440. $1=$recv(class_)._compile_protocol_(sourceCode,protocol);
  29441. return $1;
  29442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29443. }, function($ctx1) {$ctx1.fill(self,"compileMethod:for:protocol:",{sourceCode:sourceCode,class_:class_,protocol:protocol},$globals.Environment)});
  29444. //>>excludeEnd("ctx");
  29445. },
  29446. //>>excludeStart("ide", pragmas.excludeIdeData);
  29447. args: ["sourceCode", "class", "protocol"],
  29448. source: "compileMethod: sourceCode for: class protocol: protocol\x0a\x09^ class\x0a\x09\x09compile: sourceCode\x0a\x09\x09protocol: protocol",
  29449. referencedClasses: [],
  29450. //>>excludeEnd("ide");
  29451. messageSends: ["compile:protocol:"]
  29452. }),
  29453. $globals.Environment);
  29454. $core.addMethod(
  29455. $core.method({
  29456. selector: "copyClass:to:",
  29457. protocol: 'actions',
  29458. fn: function (aClass,aClassName){
  29459. var self=this;
  29460. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29461. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  29462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29463. return $core.withContext(function($ctx1) {
  29464. //>>excludeEnd("ctx");
  29465. var $1,$2,$receiver;
  29466. $1=$recv($recv($Smalltalk())._globals())._at_(aClassName);
  29467. if(($receiver = $1) == null || $receiver.isNil){
  29468. $1;
  29469. } else {
  29470. $2=$recv("A class named ".__comma(aClassName)).__comma(" already exists");
  29471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29472. $ctx1.sendIdx[","]=1;
  29473. //>>excludeEnd("ctx");
  29474. self._error_($2);
  29475. };
  29476. $recv($recv($ClassBuilder())._new())._copyClass_named_(aClass,aClassName);
  29477. return self;
  29478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29479. }, function($ctx1) {$ctx1.fill(self,"copyClass:to:",{aClass:aClass,aClassName:aClassName},$globals.Environment)});
  29480. //>>excludeEnd("ctx");
  29481. },
  29482. //>>excludeStart("ide", pragmas.excludeIdeData);
  29483. args: ["aClass", "aClassName"],
  29484. 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",
  29485. referencedClasses: ["Smalltalk", "ClassBuilder"],
  29486. //>>excludeEnd("ide");
  29487. messageSends: ["ifNotNil:", "at:", "globals", "error:", ",", "copyClass:named:", "new"]
  29488. }),
  29489. $globals.Environment);
  29490. $core.addMethod(
  29491. $core.method({
  29492. selector: "doItReceiver",
  29493. protocol: 'accessing',
  29494. fn: function (){
  29495. var self=this;
  29496. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  29497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29498. return $core.withContext(function($ctx1) {
  29499. //>>excludeEnd("ctx");
  29500. var $1;
  29501. $1=$recv($DoIt())._new();
  29502. return $1;
  29503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29504. }, function($ctx1) {$ctx1.fill(self,"doItReceiver",{},$globals.Environment)});
  29505. //>>excludeEnd("ctx");
  29506. },
  29507. //>>excludeStart("ide", pragmas.excludeIdeData);
  29508. args: [],
  29509. source: "doItReceiver\x0a\x09^ DoIt new",
  29510. referencedClasses: ["DoIt"],
  29511. //>>excludeEnd("ide");
  29512. messageSends: ["new"]
  29513. }),
  29514. $globals.Environment);
  29515. $core.addMethod(
  29516. $core.method({
  29517. selector: "evaluate:for:",
  29518. protocol: 'evaluating',
  29519. fn: function (aString,anObject){
  29520. var self=this;
  29521. function $Evaluator(){return $globals.Evaluator||(typeof Evaluator=="undefined"?nil:Evaluator)}
  29522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29523. return $core.withContext(function($ctx1) {
  29524. //>>excludeEnd("ctx");
  29525. var $1;
  29526. $1=$recv($Evaluator())._evaluate_for_(aString,anObject);
  29527. return $1;
  29528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29529. }, function($ctx1) {$ctx1.fill(self,"evaluate:for:",{aString:aString,anObject:anObject},$globals.Environment)});
  29530. //>>excludeEnd("ctx");
  29531. },
  29532. //>>excludeStart("ide", pragmas.excludeIdeData);
  29533. args: ["aString", "anObject"],
  29534. source: "evaluate: aString for: anObject\x0a\x09^ Evaluator evaluate: aString for: anObject",
  29535. referencedClasses: ["Evaluator"],
  29536. //>>excludeEnd("ide");
  29537. messageSends: ["evaluate:for:"]
  29538. }),
  29539. $globals.Environment);
  29540. $core.addMethod(
  29541. $core.method({
  29542. selector: "evaluate:on:do:",
  29543. protocol: 'error handling',
  29544. fn: function (aBlock,anErrorClass,exceptionBlock){
  29545. var self=this;
  29546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29547. return $core.withContext(function($ctx1) {
  29548. //>>excludeEnd("ctx");
  29549. var $1;
  29550. $recv(aBlock)._tryCatch_((function(exception){
  29551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29552. return $core.withContext(function($ctx2) {
  29553. //>>excludeEnd("ctx");
  29554. $1=$recv(exception)._isKindOf_(self._classNamed_($recv(anErrorClass)._name()));
  29555. if($core.assert($1)){
  29556. return $recv(exceptionBlock)._value_(exception);
  29557. } else {
  29558. return $recv(exception)._resignal();
  29559. };
  29560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29561. }, function($ctx2) {$ctx2.fillBlock({exception:exception},$ctx1,1)});
  29562. //>>excludeEnd("ctx");
  29563. }));
  29564. return self;
  29565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29566. }, function($ctx1) {$ctx1.fill(self,"evaluate:on:do:",{aBlock:aBlock,anErrorClass:anErrorClass,exceptionBlock:exceptionBlock},$globals.Environment)});
  29567. //>>excludeEnd("ctx");
  29568. },
  29569. //>>excludeStart("ide", pragmas.excludeIdeData);
  29570. args: ["aBlock", "anErrorClass", "exceptionBlock"],
  29571. 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 resignal ] ]",
  29572. referencedClasses: [],
  29573. //>>excludeEnd("ide");
  29574. messageSends: ["tryCatch:", "ifTrue:ifFalse:", "isKindOf:", "classNamed:", "name", "value:", "resignal"]
  29575. }),
  29576. $globals.Environment);
  29577. $core.addMethod(
  29578. $core.method({
  29579. selector: "inspect:",
  29580. protocol: 'actions',
  29581. fn: function (anObject){
  29582. var self=this;
  29583. function $Inspector(){return $globals.Inspector||(typeof Inspector=="undefined"?nil:Inspector)}
  29584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29585. return $core.withContext(function($ctx1) {
  29586. //>>excludeEnd("ctx");
  29587. $recv($Inspector())._inspect_(anObject);
  29588. return self;
  29589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29590. }, function($ctx1) {$ctx1.fill(self,"inspect:",{anObject:anObject},$globals.Environment)});
  29591. //>>excludeEnd("ctx");
  29592. },
  29593. //>>excludeStart("ide", pragmas.excludeIdeData);
  29594. args: ["anObject"],
  29595. source: "inspect: anObject\x0a\x09Inspector inspect: anObject",
  29596. referencedClasses: ["Inspector"],
  29597. //>>excludeEnd("ide");
  29598. messageSends: ["inspect:"]
  29599. }),
  29600. $globals.Environment);
  29601. $core.addMethod(
  29602. $core.method({
  29603. selector: "moveClass:toPackage:",
  29604. protocol: 'actions',
  29605. fn: function (aClass,aPackageName){
  29606. var self=this;
  29607. var package_;
  29608. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  29609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29610. return $core.withContext(function($ctx1) {
  29611. //>>excludeEnd("ctx");
  29612. var $1,$2,$receiver;
  29613. package_=$recv($Package())._named_(aPackageName);
  29614. $1=package_;
  29615. if(($receiver = $1) == null || $receiver.isNil){
  29616. self._error_("Invalid package name");
  29617. } else {
  29618. $1;
  29619. };
  29620. $2=$recv(package_).__eq_eq($recv(aClass)._package());
  29621. if($core.assert($2)){
  29622. return self;
  29623. };
  29624. $recv(aClass)._package_(package_);
  29625. return self;
  29626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29627. }, function($ctx1) {$ctx1.fill(self,"moveClass:toPackage:",{aClass:aClass,aPackageName:aPackageName,package_:package_},$globals.Environment)});
  29628. //>>excludeEnd("ctx");
  29629. },
  29630. //>>excludeStart("ide", pragmas.excludeIdeData);
  29631. args: ["aClass", "aPackageName"],
  29632. 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",
  29633. referencedClasses: ["Package"],
  29634. //>>excludeEnd("ide");
  29635. messageSends: ["named:", "ifNil:", "error:", "ifTrue:", "==", "package", "package:"]
  29636. }),
  29637. $globals.Environment);
  29638. $core.addMethod(
  29639. $core.method({
  29640. selector: "moveMethod:toClass:",
  29641. protocol: 'actions',
  29642. fn: function (aMethod,aClassName){
  29643. var self=this;
  29644. var destinationClass;
  29645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29646. return $core.withContext(function($ctx1) {
  29647. //>>excludeEnd("ctx");
  29648. var $2,$3,$1,$5,$4;
  29649. destinationClass=self._classNamed_(aClassName);
  29650. $2=destinationClass;
  29651. $3=$recv(aMethod)._methodClass();
  29652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29653. $ctx1.sendIdx["methodClass"]=1;
  29654. //>>excludeEnd("ctx");
  29655. $1=$recv($2).__eq_eq($3);
  29656. if($core.assert($1)){
  29657. return self;
  29658. };
  29659. $5=$recv(aMethod)._methodClass();
  29660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29661. $ctx1.sendIdx["methodClass"]=2;
  29662. //>>excludeEnd("ctx");
  29663. $4=$recv($5)._isMetaclass();
  29664. if($core.assert($4)){
  29665. destinationClass=$recv(destinationClass)._class();
  29666. destinationClass;
  29667. };
  29668. $recv(destinationClass)._compile_protocol_($recv(aMethod)._source(),$recv(aMethod)._protocol());
  29669. $recv($recv(aMethod)._methodClass())._removeCompiledMethod_(aMethod);
  29670. return self;
  29671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29672. }, function($ctx1) {$ctx1.fill(self,"moveMethod:toClass:",{aMethod:aMethod,aClassName:aClassName,destinationClass:destinationClass},$globals.Environment)});
  29673. //>>excludeEnd("ctx");
  29674. },
  29675. //>>excludeStart("ide", pragmas.excludeIdeData);
  29676. args: ["aMethod", "aClassName"],
  29677. 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",
  29678. referencedClasses: [],
  29679. //>>excludeEnd("ide");
  29680. messageSends: ["classNamed:", "ifTrue:", "==", "methodClass", "isMetaclass", "class", "compile:protocol:", "source", "protocol", "removeCompiledMethod:"]
  29681. }),
  29682. $globals.Environment);
  29683. $core.addMethod(
  29684. $core.method({
  29685. selector: "moveMethod:toProtocol:",
  29686. protocol: 'actions',
  29687. fn: function (aMethod,aProtocol){
  29688. var self=this;
  29689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29690. return $core.withContext(function($ctx1) {
  29691. //>>excludeEnd("ctx");
  29692. $recv(aMethod)._protocol_(aProtocol);
  29693. return self;
  29694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29695. }, function($ctx1) {$ctx1.fill(self,"moveMethod:toProtocol:",{aMethod:aMethod,aProtocol:aProtocol},$globals.Environment)});
  29696. //>>excludeEnd("ctx");
  29697. },
  29698. //>>excludeStart("ide", pragmas.excludeIdeData);
  29699. args: ["aMethod", "aProtocol"],
  29700. source: "moveMethod: aMethod toProtocol: aProtocol\x0a\x09aMethod protocol: aProtocol",
  29701. referencedClasses: [],
  29702. //>>excludeEnd("ide");
  29703. messageSends: ["protocol:"]
  29704. }),
  29705. $globals.Environment);
  29706. $core.addMethod(
  29707. $core.method({
  29708. selector: "packages",
  29709. protocol: 'accessing',
  29710. fn: function (){
  29711. var self=this;
  29712. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29714. return $core.withContext(function($ctx1) {
  29715. //>>excludeEnd("ctx");
  29716. var $1;
  29717. $1=$recv($Smalltalk())._packages();
  29718. return $1;
  29719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29720. }, function($ctx1) {$ctx1.fill(self,"packages",{},$globals.Environment)});
  29721. //>>excludeEnd("ctx");
  29722. },
  29723. //>>excludeStart("ide", pragmas.excludeIdeData);
  29724. args: [],
  29725. source: "packages\x0a\x09^ Smalltalk packages",
  29726. referencedClasses: ["Smalltalk"],
  29727. //>>excludeEnd("ide");
  29728. messageSends: ["packages"]
  29729. }),
  29730. $globals.Environment);
  29731. $core.addMethod(
  29732. $core.method({
  29733. selector: "registerErrorHandler:",
  29734. protocol: 'services',
  29735. fn: function (anErrorHandler){
  29736. var self=this;
  29737. function $ErrorHandler(){return $globals.ErrorHandler||(typeof ErrorHandler=="undefined"?nil:ErrorHandler)}
  29738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29739. return $core.withContext(function($ctx1) {
  29740. //>>excludeEnd("ctx");
  29741. $recv($ErrorHandler())._register_(anErrorHandler);
  29742. return self;
  29743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29744. }, function($ctx1) {$ctx1.fill(self,"registerErrorHandler:",{anErrorHandler:anErrorHandler},$globals.Environment)});
  29745. //>>excludeEnd("ctx");
  29746. },
  29747. //>>excludeStart("ide", pragmas.excludeIdeData);
  29748. args: ["anErrorHandler"],
  29749. source: "registerErrorHandler: anErrorHandler\x0a\x09ErrorHandler register: anErrorHandler",
  29750. referencedClasses: ["ErrorHandler"],
  29751. //>>excludeEnd("ide");
  29752. messageSends: ["register:"]
  29753. }),
  29754. $globals.Environment);
  29755. $core.addMethod(
  29756. $core.method({
  29757. selector: "registerFinder:",
  29758. protocol: 'services',
  29759. fn: function (aFinder){
  29760. var self=this;
  29761. function $Finder(){return $globals.Finder||(typeof Finder=="undefined"?nil:Finder)}
  29762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29763. return $core.withContext(function($ctx1) {
  29764. //>>excludeEnd("ctx");
  29765. $recv($Finder())._register_(aFinder);
  29766. return self;
  29767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29768. }, function($ctx1) {$ctx1.fill(self,"registerFinder:",{aFinder:aFinder},$globals.Environment)});
  29769. //>>excludeEnd("ctx");
  29770. },
  29771. //>>excludeStart("ide", pragmas.excludeIdeData);
  29772. args: ["aFinder"],
  29773. source: "registerFinder: aFinder\x0a\x09Finder register: aFinder",
  29774. referencedClasses: ["Finder"],
  29775. //>>excludeEnd("ide");
  29776. messageSends: ["register:"]
  29777. }),
  29778. $globals.Environment);
  29779. $core.addMethod(
  29780. $core.method({
  29781. selector: "registerInspector:",
  29782. protocol: 'services',
  29783. fn: function (anInspector){
  29784. var self=this;
  29785. function $Inspector(){return $globals.Inspector||(typeof Inspector=="undefined"?nil:Inspector)}
  29786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29787. return $core.withContext(function($ctx1) {
  29788. //>>excludeEnd("ctx");
  29789. $recv($Inspector())._register_(anInspector);
  29790. return self;
  29791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29792. }, function($ctx1) {$ctx1.fill(self,"registerInspector:",{anInspector:anInspector},$globals.Environment)});
  29793. //>>excludeEnd("ctx");
  29794. },
  29795. //>>excludeStart("ide", pragmas.excludeIdeData);
  29796. args: ["anInspector"],
  29797. source: "registerInspector: anInspector\x0a\x09Inspector register: anInspector",
  29798. referencedClasses: ["Inspector"],
  29799. //>>excludeEnd("ide");
  29800. messageSends: ["register:"]
  29801. }),
  29802. $globals.Environment);
  29803. $core.addMethod(
  29804. $core.method({
  29805. selector: "registerProgressHandler:",
  29806. protocol: 'services',
  29807. fn: function (aProgressHandler){
  29808. var self=this;
  29809. function $ProgressHandler(){return $globals.ProgressHandler||(typeof ProgressHandler=="undefined"?nil:ProgressHandler)}
  29810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29811. return $core.withContext(function($ctx1) {
  29812. //>>excludeEnd("ctx");
  29813. $recv($ProgressHandler())._register_(aProgressHandler);
  29814. return self;
  29815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29816. }, function($ctx1) {$ctx1.fill(self,"registerProgressHandler:",{aProgressHandler:aProgressHandler},$globals.Environment)});
  29817. //>>excludeEnd("ctx");
  29818. },
  29819. //>>excludeStart("ide", pragmas.excludeIdeData);
  29820. args: ["aProgressHandler"],
  29821. source: "registerProgressHandler: aProgressHandler\x0a\x09ProgressHandler register: aProgressHandler",
  29822. referencedClasses: ["ProgressHandler"],
  29823. //>>excludeEnd("ide");
  29824. messageSends: ["register:"]
  29825. }),
  29826. $globals.Environment);
  29827. $core.addMethod(
  29828. $core.method({
  29829. selector: "registerTranscript:",
  29830. protocol: 'services',
  29831. fn: function (aTranscript){
  29832. var self=this;
  29833. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  29834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29835. return $core.withContext(function($ctx1) {
  29836. //>>excludeEnd("ctx");
  29837. $recv($Transcript())._register_(aTranscript);
  29838. return self;
  29839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29840. }, function($ctx1) {$ctx1.fill(self,"registerTranscript:",{aTranscript:aTranscript},$globals.Environment)});
  29841. //>>excludeEnd("ctx");
  29842. },
  29843. //>>excludeStart("ide", pragmas.excludeIdeData);
  29844. args: ["aTranscript"],
  29845. source: "registerTranscript: aTranscript\x0a\x09Transcript register: aTranscript",
  29846. referencedClasses: ["Transcript"],
  29847. //>>excludeEnd("ide");
  29848. messageSends: ["register:"]
  29849. }),
  29850. $globals.Environment);
  29851. $core.addMethod(
  29852. $core.method({
  29853. selector: "removeClass:",
  29854. protocol: 'actions',
  29855. fn: function (aClass){
  29856. var self=this;
  29857. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29859. return $core.withContext(function($ctx1) {
  29860. //>>excludeEnd("ctx");
  29861. $recv($Smalltalk())._removeClass_(aClass);
  29862. return self;
  29863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29864. }, function($ctx1) {$ctx1.fill(self,"removeClass:",{aClass:aClass},$globals.Environment)});
  29865. //>>excludeEnd("ctx");
  29866. },
  29867. //>>excludeStart("ide", pragmas.excludeIdeData);
  29868. args: ["aClass"],
  29869. source: "removeClass: aClass\x0a\x09Smalltalk removeClass: aClass",
  29870. referencedClasses: ["Smalltalk"],
  29871. //>>excludeEnd("ide");
  29872. messageSends: ["removeClass:"]
  29873. }),
  29874. $globals.Environment);
  29875. $core.addMethod(
  29876. $core.method({
  29877. selector: "removeMethod:",
  29878. protocol: 'actions',
  29879. fn: function (aMethod){
  29880. var self=this;
  29881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29882. return $core.withContext(function($ctx1) {
  29883. //>>excludeEnd("ctx");
  29884. $recv($recv(aMethod)._methodClass())._removeCompiledMethod_(aMethod);
  29885. return self;
  29886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29887. }, function($ctx1) {$ctx1.fill(self,"removeMethod:",{aMethod:aMethod},$globals.Environment)});
  29888. //>>excludeEnd("ctx");
  29889. },
  29890. //>>excludeStart("ide", pragmas.excludeIdeData);
  29891. args: ["aMethod"],
  29892. source: "removeMethod: aMethod\x0a\x09aMethod methodClass removeCompiledMethod: aMethod",
  29893. referencedClasses: [],
  29894. //>>excludeEnd("ide");
  29895. messageSends: ["removeCompiledMethod:", "methodClass"]
  29896. }),
  29897. $globals.Environment);
  29898. $core.addMethod(
  29899. $core.method({
  29900. selector: "removeProtocol:from:",
  29901. protocol: 'actions',
  29902. fn: function (aString,aClass){
  29903. var self=this;
  29904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29905. return $core.withContext(function($ctx1) {
  29906. //>>excludeEnd("ctx");
  29907. $recv($recv(aClass)._methodsInProtocol_(aString))._do_((function(each){
  29908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29909. return $core.withContext(function($ctx2) {
  29910. //>>excludeEnd("ctx");
  29911. return $recv(aClass)._removeCompiledMethod_(each);
  29912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29913. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  29914. //>>excludeEnd("ctx");
  29915. }));
  29916. return self;
  29917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29918. }, function($ctx1) {$ctx1.fill(self,"removeProtocol:from:",{aString:aString,aClass:aClass},$globals.Environment)});
  29919. //>>excludeEnd("ctx");
  29920. },
  29921. //>>excludeStart("ide", pragmas.excludeIdeData);
  29922. args: ["aString", "aClass"],
  29923. source: "removeProtocol: aString from: aClass\x0a\x09(aClass methodsInProtocol: aString)\x0a\x09\x09do: [ :each | aClass removeCompiledMethod: each ]",
  29924. referencedClasses: [],
  29925. //>>excludeEnd("ide");
  29926. messageSends: ["do:", "methodsInProtocol:", "removeCompiledMethod:"]
  29927. }),
  29928. $globals.Environment);
  29929. $core.addMethod(
  29930. $core.method({
  29931. selector: "renameClass:to:",
  29932. protocol: 'actions',
  29933. fn: function (aClass,aClassName){
  29934. var self=this;
  29935. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29936. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  29937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29938. return $core.withContext(function($ctx1) {
  29939. //>>excludeEnd("ctx");
  29940. var $1,$2,$receiver;
  29941. $1=$recv($recv($Smalltalk())._globals())._at_(aClassName);
  29942. if(($receiver = $1) == null || $receiver.isNil){
  29943. $1;
  29944. } else {
  29945. $2=$recv("A class named ".__comma(aClassName)).__comma(" already exists");
  29946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29947. $ctx1.sendIdx[","]=1;
  29948. //>>excludeEnd("ctx");
  29949. self._error_($2);
  29950. };
  29951. $recv($recv($ClassBuilder())._new())._renameClass_to_(aClass,aClassName);
  29952. return self;
  29953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29954. }, function($ctx1) {$ctx1.fill(self,"renameClass:to:",{aClass:aClass,aClassName:aClassName},$globals.Environment)});
  29955. //>>excludeEnd("ctx");
  29956. },
  29957. //>>excludeStart("ide", pragmas.excludeIdeData);
  29958. args: ["aClass", "aClassName"],
  29959. 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",
  29960. referencedClasses: ["Smalltalk", "ClassBuilder"],
  29961. //>>excludeEnd("ide");
  29962. messageSends: ["ifNotNil:", "at:", "globals", "error:", ",", "renameClass:to:", "new"]
  29963. }),
  29964. $globals.Environment);
  29965. $core.addMethod(
  29966. $core.method({
  29967. selector: "renameProtocol:to:in:",
  29968. protocol: 'actions',
  29969. fn: function (aString,anotherString,aClass){
  29970. var self=this;
  29971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29972. return $core.withContext(function($ctx1) {
  29973. //>>excludeEnd("ctx");
  29974. $recv($recv(aClass)._methodsInProtocol_(aString))._do_((function(each){
  29975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29976. return $core.withContext(function($ctx2) {
  29977. //>>excludeEnd("ctx");
  29978. return $recv(each)._protocol_(anotherString);
  29979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29980. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  29981. //>>excludeEnd("ctx");
  29982. }));
  29983. return self;
  29984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29985. }, function($ctx1) {$ctx1.fill(self,"renameProtocol:to:in:",{aString:aString,anotherString:anotherString,aClass:aClass},$globals.Environment)});
  29986. //>>excludeEnd("ctx");
  29987. },
  29988. //>>excludeStart("ide", pragmas.excludeIdeData);
  29989. args: ["aString", "anotherString", "aClass"],
  29990. source: "renameProtocol: aString to: anotherString in: aClass\x0a\x09(aClass methodsInProtocol: aString)\x0a\x09\x09do: [ :each | each protocol: anotherString ]",
  29991. referencedClasses: [],
  29992. //>>excludeEnd("ide");
  29993. messageSends: ["do:", "methodsInProtocol:", "protocol:"]
  29994. }),
  29995. $globals.Environment);
  29996. $core.addMethod(
  29997. $core.method({
  29998. selector: "setClassCommentOf:to:",
  29999. protocol: 'actions',
  30000. fn: function (aClass,aString){
  30001. var self=this;
  30002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30003. return $core.withContext(function($ctx1) {
  30004. //>>excludeEnd("ctx");
  30005. $recv(aClass)._comment_(aString);
  30006. return self;
  30007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30008. }, function($ctx1) {$ctx1.fill(self,"setClassCommentOf:to:",{aClass:aClass,aString:aString},$globals.Environment)});
  30009. //>>excludeEnd("ctx");
  30010. },
  30011. //>>excludeStart("ide", pragmas.excludeIdeData);
  30012. args: ["aClass", "aString"],
  30013. source: "setClassCommentOf: aClass to: aString\x0a\x09aClass comment: aString",
  30014. referencedClasses: [],
  30015. //>>excludeEnd("ide");
  30016. messageSends: ["comment:"]
  30017. }),
  30018. $globals.Environment);
  30019. $core.addMethod(
  30020. $core.method({
  30021. selector: "systemAnnouncer",
  30022. protocol: 'accessing',
  30023. fn: function (){
  30024. var self=this;
  30025. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  30026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30027. return $core.withContext(function($ctx1) {
  30028. //>>excludeEnd("ctx");
  30029. var $1;
  30030. $1=$recv($recv($recv($Smalltalk())._globals())._at_("SystemAnnouncer"))._current();
  30031. return $1;
  30032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30033. }, function($ctx1) {$ctx1.fill(self,"systemAnnouncer",{},$globals.Environment)});
  30034. //>>excludeEnd("ctx");
  30035. },
  30036. //>>excludeStart("ide", pragmas.excludeIdeData);
  30037. args: [],
  30038. source: "systemAnnouncer\x0a\x09^ (Smalltalk globals at: #SystemAnnouncer) current",
  30039. referencedClasses: ["Smalltalk"],
  30040. //>>excludeEnd("ide");
  30041. messageSends: ["current", "at:", "globals"]
  30042. }),
  30043. $globals.Environment);
  30044. $core.addClass('NullProgressHandler', $globals.Object, [], 'Platform-Services');
  30045. //>>excludeStart("ide", pragmas.excludeIdeData);
  30046. $globals.NullProgressHandler.comment="I am the default progress handler. I do not display any progress, and simply iterate over the collection.";
  30047. //>>excludeEnd("ide");
  30048. $core.addMethod(
  30049. $core.method({
  30050. selector: "do:on:displaying:",
  30051. protocol: 'progress handling',
  30052. fn: function (aBlock,aCollection,aString){
  30053. var self=this;
  30054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30055. return $core.withContext(function($ctx1) {
  30056. //>>excludeEnd("ctx");
  30057. $recv(aCollection)._do_(aBlock);
  30058. return self;
  30059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30060. }, function($ctx1) {$ctx1.fill(self,"do:on:displaying:",{aBlock:aBlock,aCollection:aCollection,aString:aString},$globals.NullProgressHandler)});
  30061. //>>excludeEnd("ctx");
  30062. },
  30063. //>>excludeStart("ide", pragmas.excludeIdeData);
  30064. args: ["aBlock", "aCollection", "aString"],
  30065. source: "do: aBlock on: aCollection displaying: aString\x0a\x09aCollection do: aBlock",
  30066. referencedClasses: [],
  30067. //>>excludeEnd("ide");
  30068. messageSends: ["do:"]
  30069. }),
  30070. $globals.NullProgressHandler);
  30071. $globals.NullProgressHandler.klass.iVarNames = ['current'];
  30072. $core.addMethod(
  30073. $core.method({
  30074. selector: "initialize",
  30075. protocol: 'initialization',
  30076. fn: function (){
  30077. var self=this;
  30078. function $ProgressHandler(){return $globals.ProgressHandler||(typeof ProgressHandler=="undefined"?nil:ProgressHandler)}
  30079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30080. return $core.withContext(function($ctx1) {
  30081. //>>excludeEnd("ctx");
  30082. $recv($ProgressHandler())._registerIfNone_(self._new());
  30083. return self;
  30084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30085. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.NullProgressHandler.klass)});
  30086. //>>excludeEnd("ctx");
  30087. },
  30088. //>>excludeStart("ide", pragmas.excludeIdeData);
  30089. args: [],
  30090. source: "initialize\x0a\x09ProgressHandler registerIfNone: self new",
  30091. referencedClasses: ["ProgressHandler"],
  30092. //>>excludeEnd("ide");
  30093. messageSends: ["registerIfNone:", "new"]
  30094. }),
  30095. $globals.NullProgressHandler.klass);
  30096. $core.addClass('PlatformInterface', $globals.Object, [], 'Platform-Services');
  30097. //>>excludeStart("ide", pragmas.excludeIdeData);
  30098. $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 }.";
  30099. //>>excludeEnd("ide");
  30100. $globals.PlatformInterface.klass.iVarNames = ['worker'];
  30101. $core.addMethod(
  30102. $core.method({
  30103. selector: "ajax:",
  30104. protocol: 'actions',
  30105. fn: function (anObject){
  30106. var self=this;
  30107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30108. return $core.withContext(function($ctx1) {
  30109. //>>excludeEnd("ctx");
  30110. var $2,$1,$receiver;
  30111. $2=self["@worker"];
  30112. if(($receiver = $2) == null || $receiver.isNil){
  30113. $1=self._error_("ajax: not available");
  30114. } else {
  30115. $1=$recv(self["@worker"])._ajax_(anObject);
  30116. };
  30117. return $1;
  30118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30119. }, function($ctx1) {$ctx1.fill(self,"ajax:",{anObject:anObject},$globals.PlatformInterface.klass)});
  30120. //>>excludeEnd("ctx");
  30121. },
  30122. //>>excludeStart("ide", pragmas.excludeIdeData);
  30123. args: ["anObject"],
  30124. source: "ajax: anObject\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker ajax: anObject ]\x0a\x09\x09ifNil: [ self error: 'ajax: not available' ]",
  30125. referencedClasses: [],
  30126. //>>excludeEnd("ide");
  30127. messageSends: ["ifNotNil:ifNil:", "ajax:", "error:"]
  30128. }),
  30129. $globals.PlatformInterface.klass);
  30130. $core.addMethod(
  30131. $core.method({
  30132. selector: "alert:",
  30133. protocol: 'actions',
  30134. fn: function (aString){
  30135. var self=this;
  30136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30137. return $core.withContext(function($ctx1) {
  30138. //>>excludeEnd("ctx");
  30139. var $2,$1,$receiver;
  30140. $2=self["@worker"];
  30141. if(($receiver = $2) == null || $receiver.isNil){
  30142. $1=self._error_("alert: not available");
  30143. } else {
  30144. $1=$recv(self["@worker"])._alert_(aString);
  30145. };
  30146. return $1;
  30147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30148. }, function($ctx1) {$ctx1.fill(self,"alert:",{aString:aString},$globals.PlatformInterface.klass)});
  30149. //>>excludeEnd("ctx");
  30150. },
  30151. //>>excludeStart("ide", pragmas.excludeIdeData);
  30152. args: ["aString"],
  30153. source: "alert: aString\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker alert: aString ]\x0a\x09\x09ifNil: [ self error: 'alert: not available' ]",
  30154. referencedClasses: [],
  30155. //>>excludeEnd("ide");
  30156. messageSends: ["ifNotNil:ifNil:", "alert:", "error:"]
  30157. }),
  30158. $globals.PlatformInterface.klass);
  30159. $core.addMethod(
  30160. $core.method({
  30161. selector: "confirm:",
  30162. protocol: 'actions',
  30163. fn: function (aString){
  30164. var self=this;
  30165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30166. return $core.withContext(function($ctx1) {
  30167. //>>excludeEnd("ctx");
  30168. var $2,$1,$receiver;
  30169. $2=self["@worker"];
  30170. if(($receiver = $2) == null || $receiver.isNil){
  30171. $1=self._error_("confirm: not available");
  30172. } else {
  30173. $1=$recv(self["@worker"])._confirm_(aString);
  30174. };
  30175. return $1;
  30176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30177. }, function($ctx1) {$ctx1.fill(self,"confirm:",{aString:aString},$globals.PlatformInterface.klass)});
  30178. //>>excludeEnd("ctx");
  30179. },
  30180. //>>excludeStart("ide", pragmas.excludeIdeData);
  30181. args: ["aString"],
  30182. source: "confirm: aString\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker confirm: aString ]\x0a\x09\x09ifNil: [ self error: 'confirm: not available' ]",
  30183. referencedClasses: [],
  30184. //>>excludeEnd("ide");
  30185. messageSends: ["ifNotNil:ifNil:", "confirm:", "error:"]
  30186. }),
  30187. $globals.PlatformInterface.klass);
  30188. $core.addMethod(
  30189. $core.method({
  30190. selector: "existsGlobal:",
  30191. protocol: 'actions',
  30192. fn: function (aString){
  30193. var self=this;
  30194. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  30195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30196. return $core.withContext(function($ctx1) {
  30197. //>>excludeEnd("ctx");
  30198. var $1;
  30199. $1=$recv($recv($PlatformInterface())._globals())._at_ifPresent_ifAbsent_(aString,(function(){
  30200. return true;
  30201. }),(function(){
  30202. return false;
  30203. }));
  30204. return $1;
  30205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30206. }, function($ctx1) {$ctx1.fill(self,"existsGlobal:",{aString:aString},$globals.PlatformInterface.klass)});
  30207. //>>excludeEnd("ctx");
  30208. },
  30209. //>>excludeStart("ide", pragmas.excludeIdeData);
  30210. args: ["aString"],
  30211. source: "existsGlobal: aString\x0a\x09^ PlatformInterface globals \x0a\x09\x09at: aString \x0a\x09\x09ifPresent: [ true ] \x0a\x09\x09ifAbsent: [ false ]",
  30212. referencedClasses: ["PlatformInterface"],
  30213. //>>excludeEnd("ide");
  30214. messageSends: ["at:ifPresent:ifAbsent:", "globals"]
  30215. }),
  30216. $globals.PlatformInterface.klass);
  30217. $core.addMethod(
  30218. $core.method({
  30219. selector: "globals",
  30220. protocol: 'accessing',
  30221. fn: function (){
  30222. var self=this;
  30223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30224. return $core.withContext(function($ctx1) {
  30225. //>>excludeEnd("ctx");
  30226. return (new Function('return this'))();;
  30227. return self;
  30228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30229. }, function($ctx1) {$ctx1.fill(self,"globals",{},$globals.PlatformInterface.klass)});
  30230. //>>excludeEnd("ctx");
  30231. },
  30232. //>>excludeStart("ide", pragmas.excludeIdeData);
  30233. args: [],
  30234. source: "globals\x0a\x09<return (new Function('return this'))();>",
  30235. referencedClasses: [],
  30236. //>>excludeEnd("ide");
  30237. messageSends: []
  30238. }),
  30239. $globals.PlatformInterface.klass);
  30240. $core.addMethod(
  30241. $core.method({
  30242. selector: "initialize",
  30243. protocol: 'initialization',
  30244. fn: function (){
  30245. var self=this;
  30246. var candidate;
  30247. function $BrowserInterface(){return $globals.BrowserInterface||(typeof BrowserInterface=="undefined"?nil:BrowserInterface)}
  30248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30249. return $core.withContext(function($ctx1) {
  30250. //>>excludeEnd("ctx");
  30251. var $1,$receiver;
  30252. (
  30253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30254. $ctx1.supercall = true,
  30255. //>>excludeEnd("ctx");
  30256. $globals.PlatformInterface.klass.superclass.fn.prototype._initialize.apply($recv(self), []));
  30257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30258. $ctx1.supercall = false;
  30259. //>>excludeEnd("ctx");;
  30260. if(($receiver = $BrowserInterface()) == null || $receiver.isNil){
  30261. $BrowserInterface();
  30262. } else {
  30263. candidate=$recv($BrowserInterface())._new();
  30264. candidate;
  30265. $1=$recv(candidate)._isAvailable();
  30266. if($core.assert($1)){
  30267. self._setWorker_(candidate);
  30268. return self;
  30269. };
  30270. };
  30271. return self;
  30272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30273. }, function($ctx1) {$ctx1.fill(self,"initialize",{candidate:candidate},$globals.PlatformInterface.klass)});
  30274. //>>excludeEnd("ctx");
  30275. },
  30276. //>>excludeStart("ide", pragmas.excludeIdeData);
  30277. args: [],
  30278. 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]",
  30279. referencedClasses: ["BrowserInterface"],
  30280. //>>excludeEnd("ide");
  30281. messageSends: ["initialize", "ifNotNil:", "new", "ifTrue:", "isAvailable", "setWorker:"]
  30282. }),
  30283. $globals.PlatformInterface.klass);
  30284. $core.addMethod(
  30285. $core.method({
  30286. selector: "prompt:",
  30287. protocol: 'actions',
  30288. fn: function (aString){
  30289. var self=this;
  30290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30291. return $core.withContext(function($ctx1) {
  30292. //>>excludeEnd("ctx");
  30293. var $2,$1,$receiver;
  30294. $2=self["@worker"];
  30295. if(($receiver = $2) == null || $receiver.isNil){
  30296. $1=self._error_("prompt: not available");
  30297. } else {
  30298. $1=$recv(self["@worker"])._prompt_(aString);
  30299. };
  30300. return $1;
  30301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30302. }, function($ctx1) {$ctx1.fill(self,"prompt:",{aString:aString},$globals.PlatformInterface.klass)});
  30303. //>>excludeEnd("ctx");
  30304. },
  30305. //>>excludeStart("ide", pragmas.excludeIdeData);
  30306. args: ["aString"],
  30307. source: "prompt: aString\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker prompt: aString ]\x0a\x09\x09ifNil: [ self error: 'prompt: not available' ]",
  30308. referencedClasses: [],
  30309. //>>excludeEnd("ide");
  30310. messageSends: ["ifNotNil:ifNil:", "prompt:", "error:"]
  30311. }),
  30312. $globals.PlatformInterface.klass);
  30313. $core.addMethod(
  30314. $core.method({
  30315. selector: "prompt:default:",
  30316. protocol: 'actions',
  30317. fn: function (aString,defaultString){
  30318. var self=this;
  30319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30320. return $core.withContext(function($ctx1) {
  30321. //>>excludeEnd("ctx");
  30322. var $2,$1,$receiver;
  30323. $2=self["@worker"];
  30324. if(($receiver = $2) == null || $receiver.isNil){
  30325. $1=self._error_("prompt: not available");
  30326. } else {
  30327. $1=$recv(self["@worker"])._prompt_default_(aString,defaultString);
  30328. };
  30329. return $1;
  30330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30331. }, function($ctx1) {$ctx1.fill(self,"prompt:default:",{aString:aString,defaultString:defaultString},$globals.PlatformInterface.klass)});
  30332. //>>excludeEnd("ctx");
  30333. },
  30334. //>>excludeStart("ide", pragmas.excludeIdeData);
  30335. args: ["aString", "defaultString"],
  30336. source: "prompt: aString default: defaultString\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker prompt: aString default: defaultString ]\x0a\x09\x09ifNil: [ self error: 'prompt: not available' ]",
  30337. referencedClasses: [],
  30338. //>>excludeEnd("ide");
  30339. messageSends: ["ifNotNil:ifNil:", "prompt:default:", "error:"]
  30340. }),
  30341. $globals.PlatformInterface.klass);
  30342. $core.addMethod(
  30343. $core.method({
  30344. selector: "setWorker:",
  30345. protocol: 'accessing',
  30346. fn: function (anObject){
  30347. var self=this;
  30348. self["@worker"]=anObject;
  30349. return self;
  30350. },
  30351. //>>excludeStart("ide", pragmas.excludeIdeData);
  30352. args: ["anObject"],
  30353. source: "setWorker: anObject\x0a\x09worker := anObject",
  30354. referencedClasses: [],
  30355. //>>excludeEnd("ide");
  30356. messageSends: []
  30357. }),
  30358. $globals.PlatformInterface.klass);
  30359. $core.addClass('Service', $globals.Object, [], 'Platform-Services');
  30360. //>>excludeStart("ide", pragmas.excludeIdeData);
  30361. $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.";
  30362. //>>excludeEnd("ide");
  30363. $globals.Service.klass.iVarNames = ['current'];
  30364. $core.addMethod(
  30365. $core.method({
  30366. selector: "current",
  30367. protocol: 'accessing',
  30368. fn: function (){
  30369. var self=this;
  30370. var $1;
  30371. $1=self["@current"];
  30372. return $1;
  30373. },
  30374. //>>excludeStart("ide", pragmas.excludeIdeData);
  30375. args: [],
  30376. source: "current\x0a\x09^ current",
  30377. referencedClasses: [],
  30378. //>>excludeEnd("ide");
  30379. messageSends: []
  30380. }),
  30381. $globals.Service.klass);
  30382. $core.addMethod(
  30383. $core.method({
  30384. selector: "new",
  30385. protocol: 'instance creation',
  30386. fn: function (){
  30387. var self=this;
  30388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30389. return $core.withContext(function($ctx1) {
  30390. //>>excludeEnd("ctx");
  30391. self._shouldNotImplement();
  30392. return self;
  30393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30394. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.Service.klass)});
  30395. //>>excludeEnd("ctx");
  30396. },
  30397. //>>excludeStart("ide", pragmas.excludeIdeData);
  30398. args: [],
  30399. source: "new\x0a\x09self shouldNotImplement",
  30400. referencedClasses: [],
  30401. //>>excludeEnd("ide");
  30402. messageSends: ["shouldNotImplement"]
  30403. }),
  30404. $globals.Service.klass);
  30405. $core.addMethod(
  30406. $core.method({
  30407. selector: "register:",
  30408. protocol: 'registration',
  30409. fn: function (anObject){
  30410. var self=this;
  30411. self["@current"]=anObject;
  30412. return self;
  30413. },
  30414. //>>excludeStart("ide", pragmas.excludeIdeData);
  30415. args: ["anObject"],
  30416. source: "register: anObject\x0a\x09current := anObject",
  30417. referencedClasses: [],
  30418. //>>excludeEnd("ide");
  30419. messageSends: []
  30420. }),
  30421. $globals.Service.klass);
  30422. $core.addMethod(
  30423. $core.method({
  30424. selector: "registerIfNone:",
  30425. protocol: 'registration',
  30426. fn: function (anObject){
  30427. var self=this;
  30428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30429. return $core.withContext(function($ctx1) {
  30430. //>>excludeEnd("ctx");
  30431. var $1,$receiver;
  30432. $1=self._current();
  30433. if(($receiver = $1) == null || $receiver.isNil){
  30434. self._register_(anObject);
  30435. } else {
  30436. $1;
  30437. };
  30438. return self;
  30439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30440. }, function($ctx1) {$ctx1.fill(self,"registerIfNone:",{anObject:anObject},$globals.Service.klass)});
  30441. //>>excludeEnd("ctx");
  30442. },
  30443. //>>excludeStart("ide", pragmas.excludeIdeData);
  30444. args: ["anObject"],
  30445. source: "registerIfNone: anObject\x0a\x09self current ifNil: [ self register: anObject ]",
  30446. referencedClasses: [],
  30447. //>>excludeEnd("ide");
  30448. messageSends: ["ifNil:", "current", "register:"]
  30449. }),
  30450. $globals.Service.klass);
  30451. $core.addClass('ErrorHandler', $globals.Service, [], 'Platform-Services');
  30452. //>>excludeStart("ide", pragmas.excludeIdeData);
  30453. $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.";
  30454. //>>excludeEnd("ide");
  30455. $core.addMethod(
  30456. $core.method({
  30457. selector: "handleError:",
  30458. protocol: 'error handling',
  30459. fn: function (anError){
  30460. var self=this;
  30461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30462. return $core.withContext(function($ctx1) {
  30463. //>>excludeEnd("ctx");
  30464. self._handleUnhandledError_(anError);
  30465. return self;
  30466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30467. }, function($ctx1) {$ctx1.fill(self,"handleError:",{anError:anError},$globals.ErrorHandler.klass)});
  30468. //>>excludeEnd("ctx");
  30469. },
  30470. //>>excludeStart("ide", pragmas.excludeIdeData);
  30471. args: ["anError"],
  30472. source: "handleError: anError\x0a\x09self handleUnhandledError: anError",
  30473. referencedClasses: [],
  30474. //>>excludeEnd("ide");
  30475. messageSends: ["handleUnhandledError:"]
  30476. }),
  30477. $globals.ErrorHandler.klass);
  30478. $core.addMethod(
  30479. $core.method({
  30480. selector: "handleUnhandledError:",
  30481. protocol: 'error handling',
  30482. fn: function (anError){
  30483. var self=this;
  30484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30485. return $core.withContext(function($ctx1) {
  30486. //>>excludeEnd("ctx");
  30487. var $1,$2;
  30488. $1=$recv(anError)._wasHandled();
  30489. if($core.assert($1)){
  30490. return self;
  30491. };
  30492. $2=$recv(self._current())._handleError_(anError);
  30493. return $2;
  30494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30495. }, function($ctx1) {$ctx1.fill(self,"handleUnhandledError:",{anError:anError},$globals.ErrorHandler.klass)});
  30496. //>>excludeEnd("ctx");
  30497. },
  30498. //>>excludeStart("ide", pragmas.excludeIdeData);
  30499. args: ["anError"],
  30500. source: "handleUnhandledError: anError\x0a\x09anError wasHandled ifTrue: [ ^ self ].\x0a\x09\x0a\x09^ self current handleError: anError",
  30501. referencedClasses: [],
  30502. //>>excludeEnd("ide");
  30503. messageSends: ["ifTrue:", "wasHandled", "handleError:", "current"]
  30504. }),
  30505. $globals.ErrorHandler.klass);
  30506. $core.addClass('Finder', $globals.Service, [], 'Platform-Services');
  30507. //>>excludeStart("ide", pragmas.excludeIdeData);
  30508. $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.";
  30509. //>>excludeEnd("ide");
  30510. $core.addMethod(
  30511. $core.method({
  30512. selector: "findClass:",
  30513. protocol: 'finding',
  30514. fn: function (aClass){
  30515. var self=this;
  30516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30517. return $core.withContext(function($ctx1) {
  30518. //>>excludeEnd("ctx");
  30519. var $1;
  30520. $1=$recv(self._current())._findClass_(aClass);
  30521. return $1;
  30522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30523. }, function($ctx1) {$ctx1.fill(self,"findClass:",{aClass:aClass},$globals.Finder.klass)});
  30524. //>>excludeEnd("ctx");
  30525. },
  30526. //>>excludeStart("ide", pragmas.excludeIdeData);
  30527. args: ["aClass"],
  30528. source: "findClass: aClass\x0a\x09^ self current findClass: aClass",
  30529. referencedClasses: [],
  30530. //>>excludeEnd("ide");
  30531. messageSends: ["findClass:", "current"]
  30532. }),
  30533. $globals.Finder.klass);
  30534. $core.addMethod(
  30535. $core.method({
  30536. selector: "findMethod:",
  30537. protocol: 'finding',
  30538. fn: function (aCompiledMethod){
  30539. var self=this;
  30540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30541. return $core.withContext(function($ctx1) {
  30542. //>>excludeEnd("ctx");
  30543. var $1;
  30544. $1=$recv(self._current())._findMethod_(aCompiledMethod);
  30545. return $1;
  30546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30547. }, function($ctx1) {$ctx1.fill(self,"findMethod:",{aCompiledMethod:aCompiledMethod},$globals.Finder.klass)});
  30548. //>>excludeEnd("ctx");
  30549. },
  30550. //>>excludeStart("ide", pragmas.excludeIdeData);
  30551. args: ["aCompiledMethod"],
  30552. source: "findMethod: aCompiledMethod\x0a\x09^ self current findMethod: aCompiledMethod",
  30553. referencedClasses: [],
  30554. //>>excludeEnd("ide");
  30555. messageSends: ["findMethod:", "current"]
  30556. }),
  30557. $globals.Finder.klass);
  30558. $core.addMethod(
  30559. $core.method({
  30560. selector: "findString:",
  30561. protocol: 'finding',
  30562. fn: function (aString){
  30563. var self=this;
  30564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30565. return $core.withContext(function($ctx1) {
  30566. //>>excludeEnd("ctx");
  30567. var $1;
  30568. $1=$recv(self._current())._findString_(aString);
  30569. return $1;
  30570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30571. }, function($ctx1) {$ctx1.fill(self,"findString:",{aString:aString},$globals.Finder.klass)});
  30572. //>>excludeEnd("ctx");
  30573. },
  30574. //>>excludeStart("ide", pragmas.excludeIdeData);
  30575. args: ["aString"],
  30576. source: "findString: aString\x0a\x09^ self current findString: aString",
  30577. referencedClasses: [],
  30578. //>>excludeEnd("ide");
  30579. messageSends: ["findString:", "current"]
  30580. }),
  30581. $globals.Finder.klass);
  30582. $core.addClass('Inspector', $globals.Service, [], 'Platform-Services');
  30583. //>>excludeStart("ide", pragmas.excludeIdeData);
  30584. $globals.Inspector.comment="I am the service responsible for inspecting objects.\x0a\x0aThe default inspector object is the transcript.";
  30585. //>>excludeEnd("ide");
  30586. $core.addMethod(
  30587. $core.method({
  30588. selector: "inspect:",
  30589. protocol: 'inspecting',
  30590. fn: function (anObject){
  30591. var self=this;
  30592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30593. return $core.withContext(function($ctx1) {
  30594. //>>excludeEnd("ctx");
  30595. var $1;
  30596. $1=$recv(self._current())._inspect_(anObject);
  30597. return $1;
  30598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30599. }, function($ctx1) {$ctx1.fill(self,"inspect:",{anObject:anObject},$globals.Inspector.klass)});
  30600. //>>excludeEnd("ctx");
  30601. },
  30602. //>>excludeStart("ide", pragmas.excludeIdeData);
  30603. args: ["anObject"],
  30604. source: "inspect: anObject\x0a\x09^ self current inspect: anObject",
  30605. referencedClasses: [],
  30606. //>>excludeEnd("ide");
  30607. messageSends: ["inspect:", "current"]
  30608. }),
  30609. $globals.Inspector.klass);
  30610. $core.addClass('ProgressHandler', $globals.Service, [], 'Platform-Services');
  30611. //>>excludeStart("ide", pragmas.excludeIdeData);
  30612. $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`.";
  30613. //>>excludeEnd("ide");
  30614. $core.addMethod(
  30615. $core.method({
  30616. selector: "do:on:displaying:",
  30617. protocol: 'progress handling',
  30618. fn: function (aBlock,aCollection,aString){
  30619. var self=this;
  30620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30621. return $core.withContext(function($ctx1) {
  30622. //>>excludeEnd("ctx");
  30623. $recv(self._current())._do_on_displaying_(aBlock,aCollection,aString);
  30624. return self;
  30625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30626. }, function($ctx1) {$ctx1.fill(self,"do:on:displaying:",{aBlock:aBlock,aCollection:aCollection,aString:aString},$globals.ProgressHandler.klass)});
  30627. //>>excludeEnd("ctx");
  30628. },
  30629. //>>excludeStart("ide", pragmas.excludeIdeData);
  30630. args: ["aBlock", "aCollection", "aString"],
  30631. source: "do: aBlock on: aCollection displaying: aString\x0a\x09self current do: aBlock on: aCollection displaying: aString",
  30632. referencedClasses: [],
  30633. //>>excludeEnd("ide");
  30634. messageSends: ["do:on:displaying:", "current"]
  30635. }),
  30636. $globals.ProgressHandler.klass);
  30637. $core.addClass('Transcript', $globals.Service, [], 'Platform-Services');
  30638. //>>excludeStart("ide", pragmas.excludeIdeData);
  30639. $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.";
  30640. //>>excludeEnd("ide");
  30641. $core.addMethod(
  30642. $core.method({
  30643. selector: "clear",
  30644. protocol: 'printing',
  30645. fn: function (){
  30646. var self=this;
  30647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30648. return $core.withContext(function($ctx1) {
  30649. //>>excludeEnd("ctx");
  30650. $recv(self._current())._clear();
  30651. return self;
  30652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30653. }, function($ctx1) {$ctx1.fill(self,"clear",{},$globals.Transcript.klass)});
  30654. //>>excludeEnd("ctx");
  30655. },
  30656. //>>excludeStart("ide", pragmas.excludeIdeData);
  30657. args: [],
  30658. source: "clear\x0a\x09self current clear",
  30659. referencedClasses: [],
  30660. //>>excludeEnd("ide");
  30661. messageSends: ["clear", "current"]
  30662. }),
  30663. $globals.Transcript.klass);
  30664. $core.addMethod(
  30665. $core.method({
  30666. selector: "cr",
  30667. protocol: 'printing',
  30668. fn: function (){
  30669. var self=this;
  30670. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  30671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30672. return $core.withContext(function($ctx1) {
  30673. //>>excludeEnd("ctx");
  30674. $recv(self._current())._show_($recv($String())._cr());
  30675. return self;
  30676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30677. }, function($ctx1) {$ctx1.fill(self,"cr",{},$globals.Transcript.klass)});
  30678. //>>excludeEnd("ctx");
  30679. },
  30680. //>>excludeStart("ide", pragmas.excludeIdeData);
  30681. args: [],
  30682. source: "cr\x0a\x09self current show: String cr",
  30683. referencedClasses: ["String"],
  30684. //>>excludeEnd("ide");
  30685. messageSends: ["show:", "current", "cr"]
  30686. }),
  30687. $globals.Transcript.klass);
  30688. $core.addMethod(
  30689. $core.method({
  30690. selector: "inspect:",
  30691. protocol: 'printing',
  30692. fn: function (anObject){
  30693. var self=this;
  30694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30695. return $core.withContext(function($ctx1) {
  30696. //>>excludeEnd("ctx");
  30697. self._show_(anObject);
  30698. return self;
  30699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30700. }, function($ctx1) {$ctx1.fill(self,"inspect:",{anObject:anObject},$globals.Transcript.klass)});
  30701. //>>excludeEnd("ctx");
  30702. },
  30703. //>>excludeStart("ide", pragmas.excludeIdeData);
  30704. args: ["anObject"],
  30705. source: "inspect: anObject\x0a\x09self show: anObject",
  30706. referencedClasses: [],
  30707. //>>excludeEnd("ide");
  30708. messageSends: ["show:"]
  30709. }),
  30710. $globals.Transcript.klass);
  30711. $core.addMethod(
  30712. $core.method({
  30713. selector: "open",
  30714. protocol: 'instance creation',
  30715. fn: function (){
  30716. var self=this;
  30717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30718. return $core.withContext(function($ctx1) {
  30719. //>>excludeEnd("ctx");
  30720. $recv(self._current())._open();
  30721. return self;
  30722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30723. }, function($ctx1) {$ctx1.fill(self,"open",{},$globals.Transcript.klass)});
  30724. //>>excludeEnd("ctx");
  30725. },
  30726. //>>excludeStart("ide", pragmas.excludeIdeData);
  30727. args: [],
  30728. source: "open\x0a\x09self current open",
  30729. referencedClasses: [],
  30730. //>>excludeEnd("ide");
  30731. messageSends: ["open", "current"]
  30732. }),
  30733. $globals.Transcript.klass);
  30734. $core.addMethod(
  30735. $core.method({
  30736. selector: "show:",
  30737. protocol: 'printing',
  30738. fn: function (anObject){
  30739. var self=this;
  30740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30741. return $core.withContext(function($ctx1) {
  30742. //>>excludeEnd("ctx");
  30743. $recv(self._current())._show_(anObject);
  30744. return self;
  30745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30746. }, function($ctx1) {$ctx1.fill(self,"show:",{anObject:anObject},$globals.Transcript.klass)});
  30747. //>>excludeEnd("ctx");
  30748. },
  30749. //>>excludeStart("ide", pragmas.excludeIdeData);
  30750. args: ["anObject"],
  30751. source: "show: anObject\x0a\x09self current show: anObject",
  30752. referencedClasses: [],
  30753. //>>excludeEnd("ide");
  30754. messageSends: ["show:", "current"]
  30755. }),
  30756. $globals.Transcript.klass);
  30757. $core.addMethod(
  30758. $core.method({
  30759. selector: "do:displayingProgress:",
  30760. protocol: '*Platform-Services',
  30761. fn: function (aBlock,aString){
  30762. var self=this;
  30763. function $ProgressHandler(){return $globals.ProgressHandler||(typeof ProgressHandler=="undefined"?nil:ProgressHandler)}
  30764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30765. return $core.withContext(function($ctx1) {
  30766. //>>excludeEnd("ctx");
  30767. $recv($ProgressHandler())._do_on_displaying_(aBlock,self,aString);
  30768. return self;
  30769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30770. }, function($ctx1) {$ctx1.fill(self,"do:displayingProgress:",{aBlock:aBlock,aString:aString},$globals.SequenceableCollection)});
  30771. //>>excludeEnd("ctx");
  30772. },
  30773. //>>excludeStart("ide", pragmas.excludeIdeData);
  30774. args: ["aBlock", "aString"],
  30775. source: "do: aBlock displayingProgress: aString\x0a\x09ProgressHandler \x0a\x09\x09do: aBlock \x0a\x09\x09on: self \x0a\x09\x09displaying: aString",
  30776. referencedClasses: ["ProgressHandler"],
  30777. //>>excludeEnd("ide");
  30778. messageSends: ["do:on:displaying:"]
  30779. }),
  30780. $globals.SequenceableCollection);
  30781. });
  30782. define("amber_core/Compiler-Exceptions", ["amber/boot", "amber_core/Kernel-Exceptions", "amber_core/Kernel-Objects"], function($boot){
  30783. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  30784. $core.addPackage('Compiler-Exceptions');
  30785. $core.packages["Compiler-Exceptions"].innerEval = function (expr) { return eval(expr); };
  30786. $core.packages["Compiler-Exceptions"].transport = {"type":"amd","amdNamespace":"amber_core"};
  30787. $core.addClass('CompilerError', $globals.Error, [], 'Compiler-Exceptions');
  30788. //>>excludeStart("ide", pragmas.excludeIdeData);
  30789. $globals.CompilerError.comment="I am the common superclass of all compiling errors.";
  30790. //>>excludeEnd("ide");
  30791. $core.addClass('ParseError', $globals.CompilerError, [], 'Compiler-Exceptions');
  30792. //>>excludeStart("ide", pragmas.excludeIdeData);
  30793. $globals.ParseError.comment="Instance of ParseError are signaled on any parsing error.\x0aSee `Smalltalk >> #parse:`";
  30794. //>>excludeEnd("ide");
  30795. $core.addClass('SemanticError', $globals.CompilerError, [], 'Compiler-Exceptions');
  30796. //>>excludeStart("ide", pragmas.excludeIdeData);
  30797. $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";
  30798. //>>excludeEnd("ide");
  30799. $core.addClass('InliningError', $globals.SemanticError, [], 'Compiler-Exceptions');
  30800. //>>excludeStart("ide", pragmas.excludeIdeData);
  30801. $globals.InliningError.comment="Instances of InliningError are signaled when using an `InliningCodeGenerator`in a `Compiler`.";
  30802. //>>excludeEnd("ide");
  30803. $core.addClass('InvalidAssignmentError', $globals.SemanticError, ['variableName'], 'Compiler-Exceptions');
  30804. //>>excludeStart("ide", pragmas.excludeIdeData);
  30805. $globals.InvalidAssignmentError.comment="I get signaled when a pseudo variable gets assigned.";
  30806. //>>excludeEnd("ide");
  30807. $core.addMethod(
  30808. $core.method({
  30809. selector: "messageText",
  30810. protocol: 'accessing',
  30811. fn: function (){
  30812. var self=this;
  30813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30814. return $core.withContext(function($ctx1) {
  30815. //>>excludeEnd("ctx");
  30816. var $1;
  30817. $1=" Invalid assignment to variable: ".__comma(self._variableName());
  30818. return $1;
  30819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30820. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.InvalidAssignmentError)});
  30821. //>>excludeEnd("ctx");
  30822. },
  30823. //>>excludeStart("ide", pragmas.excludeIdeData);
  30824. args: [],
  30825. source: "messageText\x0a\x09^ ' Invalid assignment to variable: ', self variableName",
  30826. referencedClasses: [],
  30827. //>>excludeEnd("ide");
  30828. messageSends: [",", "variableName"]
  30829. }),
  30830. $globals.InvalidAssignmentError);
  30831. $core.addMethod(
  30832. $core.method({
  30833. selector: "variableName",
  30834. protocol: 'accessing',
  30835. fn: function (){
  30836. var self=this;
  30837. var $1;
  30838. $1=self["@variableName"];
  30839. return $1;
  30840. },
  30841. //>>excludeStart("ide", pragmas.excludeIdeData);
  30842. args: [],
  30843. source: "variableName\x0a\x09^ variableName",
  30844. referencedClasses: [],
  30845. //>>excludeEnd("ide");
  30846. messageSends: []
  30847. }),
  30848. $globals.InvalidAssignmentError);
  30849. $core.addMethod(
  30850. $core.method({
  30851. selector: "variableName:",
  30852. protocol: 'accessing',
  30853. fn: function (aString){
  30854. var self=this;
  30855. self["@variableName"]=aString;
  30856. return self;
  30857. },
  30858. //>>excludeStart("ide", pragmas.excludeIdeData);
  30859. args: ["aString"],
  30860. source: "variableName: aString\x0a\x09variableName := aString",
  30861. referencedClasses: [],
  30862. //>>excludeEnd("ide");
  30863. messageSends: []
  30864. }),
  30865. $globals.InvalidAssignmentError);
  30866. $core.addClass('ShadowingVariableError', $globals.SemanticError, ['variableName'], 'Compiler-Exceptions');
  30867. //>>excludeStart("ide", pragmas.excludeIdeData);
  30868. $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.";
  30869. //>>excludeEnd("ide");
  30870. $core.addMethod(
  30871. $core.method({
  30872. selector: "messageText",
  30873. protocol: 'accessing',
  30874. fn: function (){
  30875. var self=this;
  30876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30877. return $core.withContext(function($ctx1) {
  30878. //>>excludeEnd("ctx");
  30879. var $1;
  30880. $1=$recv("Variable shadowing error: ".__comma(self._variableName())).__comma(" is already defined");
  30881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30882. $ctx1.sendIdx[","]=1;
  30883. //>>excludeEnd("ctx");
  30884. return $1;
  30885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30886. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.ShadowingVariableError)});
  30887. //>>excludeEnd("ctx");
  30888. },
  30889. //>>excludeStart("ide", pragmas.excludeIdeData);
  30890. args: [],
  30891. source: "messageText\x0a\x09^ 'Variable shadowing error: ', self variableName, ' is already defined'",
  30892. referencedClasses: [],
  30893. //>>excludeEnd("ide");
  30894. messageSends: [",", "variableName"]
  30895. }),
  30896. $globals.ShadowingVariableError);
  30897. $core.addMethod(
  30898. $core.method({
  30899. selector: "variableName",
  30900. protocol: 'accessing',
  30901. fn: function (){
  30902. var self=this;
  30903. var $1;
  30904. $1=self["@variableName"];
  30905. return $1;
  30906. },
  30907. //>>excludeStart("ide", pragmas.excludeIdeData);
  30908. args: [],
  30909. source: "variableName\x0a\x09^ variableName",
  30910. referencedClasses: [],
  30911. //>>excludeEnd("ide");
  30912. messageSends: []
  30913. }),
  30914. $globals.ShadowingVariableError);
  30915. $core.addMethod(
  30916. $core.method({
  30917. selector: "variableName:",
  30918. protocol: 'accessing',
  30919. fn: function (aString){
  30920. var self=this;
  30921. self["@variableName"]=aString;
  30922. return self;
  30923. },
  30924. //>>excludeStart("ide", pragmas.excludeIdeData);
  30925. args: ["aString"],
  30926. source: "variableName: aString\x0a\x09variableName := aString",
  30927. referencedClasses: [],
  30928. //>>excludeEnd("ide");
  30929. messageSends: []
  30930. }),
  30931. $globals.ShadowingVariableError);
  30932. $core.addClass('UnknownVariableError', $globals.SemanticError, ['variableName'], 'Compiler-Exceptions');
  30933. //>>excludeStart("ide", pragmas.excludeIdeData);
  30934. $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.";
  30935. //>>excludeEnd("ide");
  30936. $core.addMethod(
  30937. $core.method({
  30938. selector: "messageText",
  30939. protocol: 'accessing',
  30940. fn: function (){
  30941. var self=this;
  30942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30943. return $core.withContext(function($ctx1) {
  30944. //>>excludeEnd("ctx");
  30945. var $1;
  30946. $1=$recv("Unknown Variable error: ".__comma(self._variableName())).__comma(" is not defined");
  30947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30948. $ctx1.sendIdx[","]=1;
  30949. //>>excludeEnd("ctx");
  30950. return $1;
  30951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30952. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.UnknownVariableError)});
  30953. //>>excludeEnd("ctx");
  30954. },
  30955. //>>excludeStart("ide", pragmas.excludeIdeData);
  30956. args: [],
  30957. source: "messageText\x0a\x09^ 'Unknown Variable error: ', self variableName, ' is not defined'",
  30958. referencedClasses: [],
  30959. //>>excludeEnd("ide");
  30960. messageSends: [",", "variableName"]
  30961. }),
  30962. $globals.UnknownVariableError);
  30963. $core.addMethod(
  30964. $core.method({
  30965. selector: "variableName",
  30966. protocol: 'accessing',
  30967. fn: function (){
  30968. var self=this;
  30969. var $1;
  30970. $1=self["@variableName"];
  30971. return $1;
  30972. },
  30973. //>>excludeStart("ide", pragmas.excludeIdeData);
  30974. args: [],
  30975. source: "variableName\x0a\x09^ variableName",
  30976. referencedClasses: [],
  30977. //>>excludeEnd("ide");
  30978. messageSends: []
  30979. }),
  30980. $globals.UnknownVariableError);
  30981. $core.addMethod(
  30982. $core.method({
  30983. selector: "variableName:",
  30984. protocol: 'accessing',
  30985. fn: function (aString){
  30986. var self=this;
  30987. self["@variableName"]=aString;
  30988. return self;
  30989. },
  30990. //>>excludeStart("ide", pragmas.excludeIdeData);
  30991. args: ["aString"],
  30992. source: "variableName: aString\x0a\x09variableName := aString",
  30993. referencedClasses: [],
  30994. //>>excludeEnd("ide");
  30995. messageSends: []
  30996. }),
  30997. $globals.UnknownVariableError);
  30998. $core.addClass('RethrowErrorHandler', $globals.Object, [], 'Compiler-Exceptions');
  30999. //>>excludeStart("ide", pragmas.excludeIdeData);
  31000. $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.";
  31001. //>>excludeEnd("ide");
  31002. $core.addMethod(
  31003. $core.method({
  31004. selector: "basicSignal:",
  31005. protocol: 'error handling',
  31006. fn: function (anError){
  31007. var self=this;
  31008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31009. return $core.withContext(function($ctx1) {
  31010. //>>excludeEnd("ctx");
  31011. throw anError;
  31012. return self;
  31013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31014. }, function($ctx1) {$ctx1.fill(self,"basicSignal:",{anError:anError},$globals.RethrowErrorHandler)});
  31015. //>>excludeEnd("ctx");
  31016. },
  31017. //>>excludeStart("ide", pragmas.excludeIdeData);
  31018. args: ["anError"],
  31019. source: "basicSignal: anError\x0a <throw anError>",
  31020. referencedClasses: [],
  31021. //>>excludeEnd("ide");
  31022. messageSends: []
  31023. }),
  31024. $globals.RethrowErrorHandler);
  31025. $core.addMethod(
  31026. $core.method({
  31027. selector: "handleError:",
  31028. protocol: 'error handling',
  31029. fn: function (anError){
  31030. var self=this;
  31031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31032. return $core.withContext(function($ctx1) {
  31033. //>>excludeEnd("ctx");
  31034. self._basicSignal_(anError);
  31035. return self;
  31036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31037. }, function($ctx1) {$ctx1.fill(self,"handleError:",{anError:anError},$globals.RethrowErrorHandler)});
  31038. //>>excludeEnd("ctx");
  31039. },
  31040. //>>excludeStart("ide", pragmas.excludeIdeData);
  31041. args: ["anError"],
  31042. source: "handleError: anError\x0a self basicSignal: anError",
  31043. referencedClasses: [],
  31044. //>>excludeEnd("ide");
  31045. messageSends: ["basicSignal:"]
  31046. }),
  31047. $globals.RethrowErrorHandler);
  31048. });
  31049. define("amber_core/Compiler-Core", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Platform-Services", "amber_core/Kernel-Collections"], function($boot){
  31050. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  31051. $core.addPackage('Compiler-Core');
  31052. $core.packages["Compiler-Core"].innerEval = function (expr) { return eval(expr); };
  31053. $core.packages["Compiler-Core"].transport = {"type":"amd","amdNamespace":"amber_core"};
  31054. $core.addClass('AbstractCodeGenerator', $globals.Object, ['currentClass', 'currentPackage', 'source'], 'Compiler-Core');
  31055. //>>excludeStart("ide", pragmas.excludeIdeData);
  31056. $globals.AbstractCodeGenerator.comment="I am the abstract super class of all code generators and provide their common API.";
  31057. //>>excludeEnd("ide");
  31058. $core.addMethod(
  31059. $core.method({
  31060. selector: "classNameFor:",
  31061. protocol: 'accessing',
  31062. fn: function (aClass){
  31063. var self=this;
  31064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31065. return $core.withContext(function($ctx1) {
  31066. //>>excludeEnd("ctx");
  31067. var $2,$3,$4,$1;
  31068. $2=$recv(aClass)._isMetaclass();
  31069. if($core.assert($2)){
  31070. $3=$recv($recv(aClass)._instanceClass())._name();
  31071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31072. $ctx1.sendIdx["name"]=1;
  31073. //>>excludeEnd("ctx");
  31074. $1=$recv($3).__comma(".klass");
  31075. } else {
  31076. $4=$recv(aClass)._isNil();
  31077. if($core.assert($4)){
  31078. $1="nil";
  31079. } else {
  31080. $1=$recv(aClass)._name();
  31081. };
  31082. };
  31083. return $1;
  31084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31085. }, function($ctx1) {$ctx1.fill(self,"classNameFor:",{aClass:aClass},$globals.AbstractCodeGenerator)});
  31086. //>>excludeEnd("ctx");
  31087. },
  31088. //>>excludeStart("ide", pragmas.excludeIdeData);
  31089. args: ["aClass"],
  31090. 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 ]]",
  31091. referencedClasses: [],
  31092. //>>excludeEnd("ide");
  31093. messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "name", "instanceClass", "isNil"]
  31094. }),
  31095. $globals.AbstractCodeGenerator);
  31096. $core.addMethod(
  31097. $core.method({
  31098. selector: "compileNode:",
  31099. protocol: 'compiling',
  31100. fn: function (aNode){
  31101. var self=this;
  31102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31103. return $core.withContext(function($ctx1) {
  31104. //>>excludeEnd("ctx");
  31105. self._subclassResponsibility();
  31106. return self;
  31107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31108. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode},$globals.AbstractCodeGenerator)});
  31109. //>>excludeEnd("ctx");
  31110. },
  31111. //>>excludeStart("ide", pragmas.excludeIdeData);
  31112. args: ["aNode"],
  31113. source: "compileNode: aNode\x0a\x09self subclassResponsibility",
  31114. referencedClasses: [],
  31115. //>>excludeEnd("ide");
  31116. messageSends: ["subclassResponsibility"]
  31117. }),
  31118. $globals.AbstractCodeGenerator);
  31119. $core.addMethod(
  31120. $core.method({
  31121. selector: "currentClass",
  31122. protocol: 'accessing',
  31123. fn: function (){
  31124. var self=this;
  31125. var $1;
  31126. $1=self["@currentClass"];
  31127. return $1;
  31128. },
  31129. //>>excludeStart("ide", pragmas.excludeIdeData);
  31130. args: [],
  31131. source: "currentClass\x0a\x09^ currentClass",
  31132. referencedClasses: [],
  31133. //>>excludeEnd("ide");
  31134. messageSends: []
  31135. }),
  31136. $globals.AbstractCodeGenerator);
  31137. $core.addMethod(
  31138. $core.method({
  31139. selector: "currentClass:",
  31140. protocol: 'accessing',
  31141. fn: function (aClass){
  31142. var self=this;
  31143. self["@currentClass"]=aClass;
  31144. return self;
  31145. },
  31146. //>>excludeStart("ide", pragmas.excludeIdeData);
  31147. args: ["aClass"],
  31148. source: "currentClass: aClass\x0a\x09currentClass := aClass",
  31149. referencedClasses: [],
  31150. //>>excludeEnd("ide");
  31151. messageSends: []
  31152. }),
  31153. $globals.AbstractCodeGenerator);
  31154. $core.addMethod(
  31155. $core.method({
  31156. selector: "currentPackage",
  31157. protocol: 'accessing',
  31158. fn: function (){
  31159. var self=this;
  31160. var $1;
  31161. $1=self["@currentPackage"];
  31162. return $1;
  31163. },
  31164. //>>excludeStart("ide", pragmas.excludeIdeData);
  31165. args: [],
  31166. source: "currentPackage\x0a\x09^ currentPackage",
  31167. referencedClasses: [],
  31168. //>>excludeEnd("ide");
  31169. messageSends: []
  31170. }),
  31171. $globals.AbstractCodeGenerator);
  31172. $core.addMethod(
  31173. $core.method({
  31174. selector: "currentPackage:",
  31175. protocol: 'accessing',
  31176. fn: function (anObject){
  31177. var self=this;
  31178. self["@currentPackage"]=anObject;
  31179. return self;
  31180. },
  31181. //>>excludeStart("ide", pragmas.excludeIdeData);
  31182. args: ["anObject"],
  31183. source: "currentPackage: anObject\x0a\x09currentPackage := anObject",
  31184. referencedClasses: [],
  31185. //>>excludeEnd("ide");
  31186. messageSends: []
  31187. }),
  31188. $globals.AbstractCodeGenerator);
  31189. $core.addMethod(
  31190. $core.method({
  31191. selector: "pseudoVariables",
  31192. protocol: 'accessing',
  31193. fn: function (){
  31194. var self=this;
  31195. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  31196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31197. return $core.withContext(function($ctx1) {
  31198. //>>excludeEnd("ctx");
  31199. var $1;
  31200. $1=$recv($Smalltalk())._pseudoVariableNames();
  31201. return $1;
  31202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31203. }, function($ctx1) {$ctx1.fill(self,"pseudoVariables",{},$globals.AbstractCodeGenerator)});
  31204. //>>excludeEnd("ctx");
  31205. },
  31206. //>>excludeStart("ide", pragmas.excludeIdeData);
  31207. args: [],
  31208. source: "pseudoVariables\x0a\x09^ Smalltalk pseudoVariableNames",
  31209. referencedClasses: ["Smalltalk"],
  31210. //>>excludeEnd("ide");
  31211. messageSends: ["pseudoVariableNames"]
  31212. }),
  31213. $globals.AbstractCodeGenerator);
  31214. $core.addMethod(
  31215. $core.method({
  31216. selector: "source",
  31217. protocol: 'accessing',
  31218. fn: function (){
  31219. var self=this;
  31220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31221. return $core.withContext(function($ctx1) {
  31222. //>>excludeEnd("ctx");
  31223. var $2,$1,$receiver;
  31224. $2=self["@source"];
  31225. if(($receiver = $2) == null || $receiver.isNil){
  31226. $1="";
  31227. } else {
  31228. $1=$2;
  31229. };
  31230. return $1;
  31231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31232. }, function($ctx1) {$ctx1.fill(self,"source",{},$globals.AbstractCodeGenerator)});
  31233. //>>excludeEnd("ctx");
  31234. },
  31235. //>>excludeStart("ide", pragmas.excludeIdeData);
  31236. args: [],
  31237. source: "source\x0a\x09^ source ifNil: [ '' ]",
  31238. referencedClasses: [],
  31239. //>>excludeEnd("ide");
  31240. messageSends: ["ifNil:"]
  31241. }),
  31242. $globals.AbstractCodeGenerator);
  31243. $core.addMethod(
  31244. $core.method({
  31245. selector: "source:",
  31246. protocol: 'accessing',
  31247. fn: function (aString){
  31248. var self=this;
  31249. self["@source"]=aString;
  31250. return self;
  31251. },
  31252. //>>excludeStart("ide", pragmas.excludeIdeData);
  31253. args: ["aString"],
  31254. source: "source: aString\x0a\x09source := aString",
  31255. referencedClasses: [],
  31256. //>>excludeEnd("ide");
  31257. messageSends: []
  31258. }),
  31259. $globals.AbstractCodeGenerator);
  31260. $core.addClass('CodeGenerator', $globals.AbstractCodeGenerator, [], 'Compiler-Core');
  31261. //>>excludeStart("ide", pragmas.excludeIdeData);
  31262. $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.";
  31263. //>>excludeEnd("ide");
  31264. $core.addMethod(
  31265. $core.method({
  31266. selector: "compileNode:",
  31267. protocol: 'compiling',
  31268. fn: function (aNode){
  31269. var self=this;
  31270. var ir,stream;
  31271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31272. return $core.withContext(function($ctx1) {
  31273. //>>excludeEnd("ctx");
  31274. var $2,$3,$1;
  31275. $recv(self._semanticAnalyzer())._visit_(aNode);
  31276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31277. $ctx1.sendIdx["visit:"]=1;
  31278. //>>excludeEnd("ctx");
  31279. ir=$recv(self._translator())._visit_(aNode);
  31280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31281. $ctx1.sendIdx["visit:"]=2;
  31282. //>>excludeEnd("ctx");
  31283. $2=self._irTranslator();
  31284. $recv($2)._currentClass_(self._currentClass());
  31285. $recv($2)._visit_(ir);
  31286. $3=$recv($2)._contents();
  31287. $1=$3;
  31288. return $1;
  31289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31290. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,ir:ir,stream:stream},$globals.CodeGenerator)});
  31291. //>>excludeEnd("ctx");
  31292. },
  31293. //>>excludeStart("ide", pragmas.excludeIdeData);
  31294. args: ["aNode"],
  31295. 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",
  31296. referencedClasses: [],
  31297. //>>excludeEnd("ide");
  31298. messageSends: ["visit:", "semanticAnalyzer", "translator", "currentClass:", "irTranslator", "currentClass", "contents"]
  31299. }),
  31300. $globals.CodeGenerator);
  31301. $core.addMethod(
  31302. $core.method({
  31303. selector: "irTranslator",
  31304. protocol: 'compiling',
  31305. fn: function (){
  31306. var self=this;
  31307. function $IRJSTranslator(){return $globals.IRJSTranslator||(typeof IRJSTranslator=="undefined"?nil:IRJSTranslator)}
  31308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31309. return $core.withContext(function($ctx1) {
  31310. //>>excludeEnd("ctx");
  31311. var $1;
  31312. $1=$recv($IRJSTranslator())._new();
  31313. return $1;
  31314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31315. }, function($ctx1) {$ctx1.fill(self,"irTranslator",{},$globals.CodeGenerator)});
  31316. //>>excludeEnd("ctx");
  31317. },
  31318. //>>excludeStart("ide", pragmas.excludeIdeData);
  31319. args: [],
  31320. source: "irTranslator\x0a\x09^ IRJSTranslator new",
  31321. referencedClasses: ["IRJSTranslator"],
  31322. //>>excludeEnd("ide");
  31323. messageSends: ["new"]
  31324. }),
  31325. $globals.CodeGenerator);
  31326. $core.addMethod(
  31327. $core.method({
  31328. selector: "semanticAnalyzer",
  31329. protocol: 'compiling',
  31330. fn: function (){
  31331. var self=this;
  31332. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  31333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31334. return $core.withContext(function($ctx1) {
  31335. //>>excludeEnd("ctx");
  31336. var $2,$3,$1;
  31337. $2=$recv($SemanticAnalyzer())._on_(self._currentClass());
  31338. $recv($2)._thePackage_(self._currentPackage());
  31339. $3=$recv($2)._yourself();
  31340. $1=$3;
  31341. return $1;
  31342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31343. }, function($ctx1) {$ctx1.fill(self,"semanticAnalyzer",{},$globals.CodeGenerator)});
  31344. //>>excludeEnd("ctx");
  31345. },
  31346. //>>excludeStart("ide", pragmas.excludeIdeData);
  31347. args: [],
  31348. source: "semanticAnalyzer\x0a\x09^ (SemanticAnalyzer on: self currentClass)\x0a\x09\x09thePackage: self currentPackage;\x0a\x09\x09yourself",
  31349. referencedClasses: ["SemanticAnalyzer"],
  31350. //>>excludeEnd("ide");
  31351. messageSends: ["thePackage:", "on:", "currentClass", "currentPackage", "yourself"]
  31352. }),
  31353. $globals.CodeGenerator);
  31354. $core.addMethod(
  31355. $core.method({
  31356. selector: "translator",
  31357. protocol: 'compiling',
  31358. fn: function (){
  31359. var self=this;
  31360. function $IRASTTranslator(){return $globals.IRASTTranslator||(typeof IRASTTranslator=="undefined"?nil:IRASTTranslator)}
  31361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31362. return $core.withContext(function($ctx1) {
  31363. //>>excludeEnd("ctx");
  31364. var $2,$3,$1;
  31365. $2=$recv($IRASTTranslator())._new();
  31366. $recv($2)._source_(self._source());
  31367. $recv($2)._theClass_(self._currentClass());
  31368. $3=$recv($2)._yourself();
  31369. $1=$3;
  31370. return $1;
  31371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31372. }, function($ctx1) {$ctx1.fill(self,"translator",{},$globals.CodeGenerator)});
  31373. //>>excludeEnd("ctx");
  31374. },
  31375. //>>excludeStart("ide", pragmas.excludeIdeData);
  31376. args: [],
  31377. source: "translator\x0a\x09^ IRASTTranslator new\x0a\x09\x09source: self source;\x0a\x09\x09theClass: self currentClass;\x0a\x09\x09yourself",
  31378. referencedClasses: ["IRASTTranslator"],
  31379. //>>excludeEnd("ide");
  31380. messageSends: ["source:", "new", "source", "theClass:", "currentClass", "yourself"]
  31381. }),
  31382. $globals.CodeGenerator);
  31383. $core.addClass('Compiler', $globals.Object, ['currentClass', 'currentPackage', 'source', 'unknownVariables', 'codeGeneratorClass'], 'Compiler-Core');
  31384. //>>excludeStart("ide", pragmas.excludeIdeData);
  31385. $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`";
  31386. //>>excludeEnd("ide");
  31387. $core.addMethod(
  31388. $core.method({
  31389. selector: "codeGeneratorClass",
  31390. protocol: 'accessing',
  31391. fn: function (){
  31392. var self=this;
  31393. function $InliningCodeGenerator(){return $globals.InliningCodeGenerator||(typeof InliningCodeGenerator=="undefined"?nil:InliningCodeGenerator)}
  31394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31395. return $core.withContext(function($ctx1) {
  31396. //>>excludeEnd("ctx");
  31397. var $2,$1,$receiver;
  31398. $2=self["@codeGeneratorClass"];
  31399. if(($receiver = $2) == null || $receiver.isNil){
  31400. $1=$InliningCodeGenerator();
  31401. } else {
  31402. $1=$2;
  31403. };
  31404. return $1;
  31405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31406. }, function($ctx1) {$ctx1.fill(self,"codeGeneratorClass",{},$globals.Compiler)});
  31407. //>>excludeEnd("ctx");
  31408. },
  31409. //>>excludeStart("ide", pragmas.excludeIdeData);
  31410. args: [],
  31411. source: "codeGeneratorClass\x0a\x09^ codeGeneratorClass ifNil: [ InliningCodeGenerator ]",
  31412. referencedClasses: ["InliningCodeGenerator"],
  31413. //>>excludeEnd("ide");
  31414. messageSends: ["ifNil:"]
  31415. }),
  31416. $globals.Compiler);
  31417. $core.addMethod(
  31418. $core.method({
  31419. selector: "codeGeneratorClass:",
  31420. protocol: 'accessing',
  31421. fn: function (aClass){
  31422. var self=this;
  31423. self["@codeGeneratorClass"]=aClass;
  31424. return self;
  31425. },
  31426. //>>excludeStart("ide", pragmas.excludeIdeData);
  31427. args: ["aClass"],
  31428. source: "codeGeneratorClass: aClass\x0a\x09codeGeneratorClass := aClass",
  31429. referencedClasses: [],
  31430. //>>excludeEnd("ide");
  31431. messageSends: []
  31432. }),
  31433. $globals.Compiler);
  31434. $core.addMethod(
  31435. $core.method({
  31436. selector: "compile:forClass:protocol:",
  31437. protocol: 'compiling',
  31438. fn: function (aString,aClass,anotherString){
  31439. var self=this;
  31440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31441. return $core.withContext(function($ctx1) {
  31442. //>>excludeEnd("ctx");
  31443. var $2,$1;
  31444. self._source_(aString);
  31445. $2=self._compileNode_forClass_package_(self._parse_(aString),aClass,$recv(aClass)._packageOfProtocol_(anotherString));
  31446. $1=$2;
  31447. return $1;
  31448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31449. }, function($ctx1) {$ctx1.fill(self,"compile:forClass:protocol:",{aString:aString,aClass:aClass,anotherString:anotherString},$globals.Compiler)});
  31450. //>>excludeEnd("ctx");
  31451. },
  31452. //>>excludeStart("ide", pragmas.excludeIdeData);
  31453. args: ["aString", "aClass", "anotherString"],
  31454. source: "compile: aString forClass: aClass protocol: anotherString\x0a\x09^ self\x0a\x09\x09source: aString;\x0a\x09\x09compileNode: (self parse: aString)\x0a\x09\x09forClass: aClass\x0a\x09\x09package: (aClass packageOfProtocol: anotherString)",
  31455. referencedClasses: [],
  31456. //>>excludeEnd("ide");
  31457. messageSends: ["source:", "compileNode:forClass:package:", "parse:", "packageOfProtocol:"]
  31458. }),
  31459. $globals.Compiler);
  31460. $core.addMethod(
  31461. $core.method({
  31462. selector: "compileExpression:on:",
  31463. protocol: 'compiling',
  31464. fn: function (aString,anObject){
  31465. var self=this;
  31466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31467. return $core.withContext(function($ctx1) {
  31468. //>>excludeEnd("ctx");
  31469. var $2,$1;
  31470. $2=$recv("xxxDoIt ^ [ ".__comma(aString)).__comma(" ] value");
  31471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31472. $ctx1.sendIdx[","]=1;
  31473. //>>excludeEnd("ctx");
  31474. $1=self._compile_forClass_protocol_($2,$recv(anObject)._class(),"**xxxDoIt");
  31475. return $1;
  31476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31477. }, function($ctx1) {$ctx1.fill(self,"compileExpression:on:",{aString:aString,anObject:anObject},$globals.Compiler)});
  31478. //>>excludeEnd("ctx");
  31479. },
  31480. //>>excludeStart("ide", pragmas.excludeIdeData);
  31481. args: ["aString", "anObject"],
  31482. source: "compileExpression: aString on: anObject\x0a\x09^ self\x0a\x09\x09compile: 'xxxDoIt ^ [ ', aString, ' ] value'\x0a\x09\x09forClass: anObject class\x0a\x09\x09protocol: '**xxxDoIt'",
  31483. referencedClasses: [],
  31484. //>>excludeEnd("ide");
  31485. messageSends: ["compile:forClass:protocol:", ",", "class"]
  31486. }),
  31487. $globals.Compiler);
  31488. $core.addMethod(
  31489. $core.method({
  31490. selector: "compileNode:",
  31491. protocol: 'compiling',
  31492. fn: function (aNode){
  31493. var self=this;
  31494. var generator,result;
  31495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31496. return $core.withContext(function($ctx1) {
  31497. //>>excludeEnd("ctx");
  31498. var $1,$2,$3;
  31499. generator=$recv(self._codeGeneratorClass())._new();
  31500. $1=generator;
  31501. $recv($1)._source_(self._source());
  31502. $recv($1)._currentClass_(self._currentClass());
  31503. $2=$recv($1)._currentPackage_(self._currentPackage());
  31504. result=$recv(generator)._compileNode_(aNode);
  31505. self._unknownVariables_([]);
  31506. $3=result;
  31507. return $3;
  31508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31509. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,generator:generator,result:result},$globals.Compiler)});
  31510. //>>excludeEnd("ctx");
  31511. },
  31512. //>>excludeStart("ide", pragmas.excludeIdeData);
  31513. args: ["aNode"],
  31514. 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\x09\x09currentPackage: self currentPackage.\x0a\x09result := generator compileNode: aNode.\x0a\x09self unknownVariables: #().\x0a\x09^ result",
  31515. referencedClasses: [],
  31516. //>>excludeEnd("ide");
  31517. messageSends: ["new", "codeGeneratorClass", "source:", "source", "currentClass:", "currentClass", "currentPackage:", "currentPackage", "compileNode:", "unknownVariables:"]
  31518. }),
  31519. $globals.Compiler);
  31520. $core.addMethod(
  31521. $core.method({
  31522. selector: "compileNode:forClass:package:",
  31523. protocol: 'compiling',
  31524. fn: function (aNode,aClass,aPackage){
  31525. var self=this;
  31526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31527. return $core.withContext(function($ctx1) {
  31528. //>>excludeEnd("ctx");
  31529. var $2,$1;
  31530. self._currentClass_(aClass);
  31531. self._currentPackage_(aPackage);
  31532. $2=self._compileNode_(aNode);
  31533. $1=$2;
  31534. return $1;
  31535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31536. }, function($ctx1) {$ctx1.fill(self,"compileNode:forClass:package:",{aNode:aNode,aClass:aClass,aPackage:aPackage},$globals.Compiler)});
  31537. //>>excludeEnd("ctx");
  31538. },
  31539. //>>excludeStart("ide", pragmas.excludeIdeData);
  31540. args: ["aNode", "aClass", "aPackage"],
  31541. source: "compileNode: aNode forClass: aClass package: aPackage\x0a\x09^ self\x0a\x09\x09currentClass: aClass;\x0a\x09\x09currentPackage: aPackage;\x0a\x09\x09compileNode: aNode",
  31542. referencedClasses: [],
  31543. //>>excludeEnd("ide");
  31544. messageSends: ["currentClass:", "currentPackage:", "compileNode:"]
  31545. }),
  31546. $globals.Compiler);
  31547. $core.addMethod(
  31548. $core.method({
  31549. selector: "currentClass",
  31550. protocol: 'accessing',
  31551. fn: function (){
  31552. var self=this;
  31553. var $1;
  31554. $1=self["@currentClass"];
  31555. return $1;
  31556. },
  31557. //>>excludeStart("ide", pragmas.excludeIdeData);
  31558. args: [],
  31559. source: "currentClass\x0a\x09^ currentClass",
  31560. referencedClasses: [],
  31561. //>>excludeEnd("ide");
  31562. messageSends: []
  31563. }),
  31564. $globals.Compiler);
  31565. $core.addMethod(
  31566. $core.method({
  31567. selector: "currentClass:",
  31568. protocol: 'accessing',
  31569. fn: function (aClass){
  31570. var self=this;
  31571. self["@currentClass"]=aClass;
  31572. return self;
  31573. },
  31574. //>>excludeStart("ide", pragmas.excludeIdeData);
  31575. args: ["aClass"],
  31576. source: "currentClass: aClass\x0a\x09currentClass := aClass",
  31577. referencedClasses: [],
  31578. //>>excludeEnd("ide");
  31579. messageSends: []
  31580. }),
  31581. $globals.Compiler);
  31582. $core.addMethod(
  31583. $core.method({
  31584. selector: "currentPackage",
  31585. protocol: 'accessing',
  31586. fn: function (){
  31587. var self=this;
  31588. var $1;
  31589. $1=self["@currentPackage"];
  31590. return $1;
  31591. },
  31592. //>>excludeStart("ide", pragmas.excludeIdeData);
  31593. args: [],
  31594. source: "currentPackage\x0a\x09^ currentPackage",
  31595. referencedClasses: [],
  31596. //>>excludeEnd("ide");
  31597. messageSends: []
  31598. }),
  31599. $globals.Compiler);
  31600. $core.addMethod(
  31601. $core.method({
  31602. selector: "currentPackage:",
  31603. protocol: 'accessing',
  31604. fn: function (anObject){
  31605. var self=this;
  31606. self["@currentPackage"]=anObject;
  31607. return self;
  31608. },
  31609. //>>excludeStart("ide", pragmas.excludeIdeData);
  31610. args: ["anObject"],
  31611. source: "currentPackage: anObject\x0a\x09currentPackage := anObject",
  31612. referencedClasses: [],
  31613. //>>excludeEnd("ide");
  31614. messageSends: []
  31615. }),
  31616. $globals.Compiler);
  31617. $core.addMethod(
  31618. $core.method({
  31619. selector: "eval:",
  31620. protocol: 'compiling',
  31621. fn: function (aString){
  31622. var self=this;
  31623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31624. return $core.withContext(function($ctx1) {
  31625. //>>excludeEnd("ctx");
  31626. return eval(aString);
  31627. return self;
  31628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31629. }, function($ctx1) {$ctx1.fill(self,"eval:",{aString:aString},$globals.Compiler)});
  31630. //>>excludeEnd("ctx");
  31631. },
  31632. //>>excludeStart("ide", pragmas.excludeIdeData);
  31633. args: ["aString"],
  31634. source: "eval: aString\x0a\x09<return eval(aString)>",
  31635. referencedClasses: [],
  31636. //>>excludeEnd("ide");
  31637. messageSends: []
  31638. }),
  31639. $globals.Compiler);
  31640. $core.addMethod(
  31641. $core.method({
  31642. selector: "eval:forPackage:",
  31643. protocol: 'compiling',
  31644. fn: function (aString,aPackage){
  31645. var self=this;
  31646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31647. return $core.withContext(function($ctx1) {
  31648. //>>excludeEnd("ctx");
  31649. return aPackage && aPackage.innerEval
  31650. ? aPackage.innerEval(aString)
  31651. : eval(aString);
  31652. return self;
  31653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31654. }, function($ctx1) {$ctx1.fill(self,"eval:forPackage:",{aString:aString,aPackage:aPackage},$globals.Compiler)});
  31655. //>>excludeEnd("ctx");
  31656. },
  31657. //>>excludeStart("ide", pragmas.excludeIdeData);
  31658. args: ["aString", "aPackage"],
  31659. source: "eval: aString forPackage: aPackage\x0a\x09<return aPackage && aPackage.innerEval\x0a\x09\x09? aPackage.innerEval(aString)\x0a\x09\x09: eval(aString)>",
  31660. referencedClasses: [],
  31661. //>>excludeEnd("ide");
  31662. messageSends: []
  31663. }),
  31664. $globals.Compiler);
  31665. $core.addMethod(
  31666. $core.method({
  31667. selector: "evaluateExpression:",
  31668. protocol: 'compiling',
  31669. fn: function (aString){
  31670. var self=this;
  31671. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  31672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31673. return $core.withContext(function($ctx1) {
  31674. //>>excludeEnd("ctx");
  31675. var $1;
  31676. $1=self._evaluateExpression_on_(aString,$recv($DoIt())._new());
  31677. return $1;
  31678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31679. }, function($ctx1) {$ctx1.fill(self,"evaluateExpression:",{aString:aString},$globals.Compiler)});
  31680. //>>excludeEnd("ctx");
  31681. },
  31682. //>>excludeStart("ide", pragmas.excludeIdeData);
  31683. args: ["aString"],
  31684. 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",
  31685. referencedClasses: ["DoIt"],
  31686. //>>excludeEnd("ide");
  31687. messageSends: ["evaluateExpression:on:", "new"]
  31688. }),
  31689. $globals.Compiler);
  31690. $core.addMethod(
  31691. $core.method({
  31692. selector: "evaluateExpression:on:",
  31693. protocol: 'compiling',
  31694. fn: function (aString,anObject){
  31695. var self=this;
  31696. var result,method;
  31697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31698. return $core.withContext(function($ctx1) {
  31699. //>>excludeEnd("ctx");
  31700. var $1,$2;
  31701. method=self._eval_(self._compileExpression_on_(aString,anObject));
  31702. $recv(method)._protocol_("**xxxDoIt");
  31703. $1=$recv(anObject)._class();
  31704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31705. $ctx1.sendIdx["class"]=1;
  31706. //>>excludeEnd("ctx");
  31707. $recv($1)._addCompiledMethod_(method);
  31708. result=$recv(anObject)._xxxDoIt();
  31709. $recv($recv(anObject)._class())._removeCompiledMethod_(method);
  31710. $2=result;
  31711. return $2;
  31712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31713. }, function($ctx1) {$ctx1.fill(self,"evaluateExpression:on:",{aString:aString,anObject:anObject,result:result,method:method},$globals.Compiler)});
  31714. //>>excludeEnd("ctx");
  31715. },
  31716. //>>excludeStart("ide", pragmas.excludeIdeData);
  31717. args: ["aString", "anObject"],
  31718. 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",
  31719. referencedClasses: [],
  31720. //>>excludeEnd("ide");
  31721. messageSends: ["eval:", "compileExpression:on:", "protocol:", "addCompiledMethod:", "class", "xxxDoIt", "removeCompiledMethod:"]
  31722. }),
  31723. $globals.Compiler);
  31724. $core.addMethod(
  31725. $core.method({
  31726. selector: "install:forClass:protocol:",
  31727. protocol: 'compiling',
  31728. fn: function (aString,aBehavior,anotherString){
  31729. var self=this;
  31730. var compiledMethod;
  31731. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  31732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31733. return $core.withContext(function($ctx1) {
  31734. //>>excludeEnd("ctx");
  31735. var $1;
  31736. compiledMethod=self._eval_forPackage_(self._compile_forClass_protocol_(aString,aBehavior,anotherString),$recv(aBehavior)._packageOfProtocol_(anotherString));
  31737. $1=$recv($recv($ClassBuilder())._new())._installMethod_forClass_protocol_(compiledMethod,aBehavior,anotherString);
  31738. return $1;
  31739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31740. }, function($ctx1) {$ctx1.fill(self,"install:forClass:protocol:",{aString:aString,aBehavior:aBehavior,anotherString:anotherString,compiledMethod:compiledMethod},$globals.Compiler)});
  31741. //>>excludeEnd("ctx");
  31742. },
  31743. //>>excludeStart("ide", pragmas.excludeIdeData);
  31744. args: ["aString", "aBehavior", "anotherString"],
  31745. source: "install: aString forClass: aBehavior protocol: anotherString\x0a\x09| compiledMethod |\x0a\x09compiledMethod := self\x0a\x09\x09eval: (self compile: aString forClass: aBehavior protocol: anotherString)\x0a\x09\x09forPackage: (aBehavior packageOfProtocol: anotherString).\x0a\x09^ ClassBuilder new\x0a\x09\x09installMethod: compiledMethod\x0a\x09\x09forClass: aBehavior\x0a\x09\x09protocol: anotherString",
  31746. referencedClasses: ["ClassBuilder"],
  31747. //>>excludeEnd("ide");
  31748. messageSends: ["eval:forPackage:", "compile:forClass:protocol:", "packageOfProtocol:", "installMethod:forClass:protocol:", "new"]
  31749. }),
  31750. $globals.Compiler);
  31751. $core.addMethod(
  31752. $core.method({
  31753. selector: "parse:",
  31754. protocol: 'compiling',
  31755. fn: function (aString){
  31756. var self=this;
  31757. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  31758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31759. return $core.withContext(function($ctx1) {
  31760. //>>excludeEnd("ctx");
  31761. var $1;
  31762. $1=$recv($Smalltalk())._parse_(aString);
  31763. return $1;
  31764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31765. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString},$globals.Compiler)});
  31766. //>>excludeEnd("ctx");
  31767. },
  31768. //>>excludeStart("ide", pragmas.excludeIdeData);
  31769. args: ["aString"],
  31770. source: "parse: aString\x0a\x09^ Smalltalk parse: aString",
  31771. referencedClasses: ["Smalltalk"],
  31772. //>>excludeEnd("ide");
  31773. messageSends: ["parse:"]
  31774. }),
  31775. $globals.Compiler);
  31776. $core.addMethod(
  31777. $core.method({
  31778. selector: "parseExpression:",
  31779. protocol: 'compiling',
  31780. fn: function (aString){
  31781. var self=this;
  31782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31783. return $core.withContext(function($ctx1) {
  31784. //>>excludeEnd("ctx");
  31785. var $2,$1;
  31786. $2=$recv("doIt ^ [ ".__comma(aString)).__comma(" ] value");
  31787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31788. $ctx1.sendIdx[","]=1;
  31789. //>>excludeEnd("ctx");
  31790. $1=self._parse_($2);
  31791. return $1;
  31792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31793. }, function($ctx1) {$ctx1.fill(self,"parseExpression:",{aString:aString},$globals.Compiler)});
  31794. //>>excludeEnd("ctx");
  31795. },
  31796. //>>excludeStart("ide", pragmas.excludeIdeData);
  31797. args: ["aString"],
  31798. source: "parseExpression: aString\x0a\x09^ self parse: 'doIt ^ [ ', aString, ' ] value'",
  31799. referencedClasses: [],
  31800. //>>excludeEnd("ide");
  31801. messageSends: ["parse:", ","]
  31802. }),
  31803. $globals.Compiler);
  31804. $core.addMethod(
  31805. $core.method({
  31806. selector: "recompile:",
  31807. protocol: 'compiling',
  31808. fn: function (aClass){
  31809. var self=this;
  31810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31811. return $core.withContext(function($ctx1) {
  31812. //>>excludeEnd("ctx");
  31813. var $1;
  31814. $recv($recv($recv(aClass)._methodDictionary())._values())._do_displayingProgress_((function(each){
  31815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31816. return $core.withContext(function($ctx2) {
  31817. //>>excludeEnd("ctx");
  31818. return self._install_forClass_protocol_($recv(each)._source(),aClass,$recv(each)._protocol());
  31819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31820. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  31821. //>>excludeEnd("ctx");
  31822. }),"Recompiling ".__comma($recv(aClass)._name()));
  31823. $1=$recv(aClass)._isMetaclass();
  31824. if(!$core.assert($1)){
  31825. self._recompile_($recv(aClass)._class());
  31826. };
  31827. return self;
  31828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31829. }, function($ctx1) {$ctx1.fill(self,"recompile:",{aClass:aClass},$globals.Compiler)});
  31830. //>>excludeEnd("ctx");
  31831. },
  31832. //>>excludeStart("ide", pragmas.excludeIdeData);
  31833. args: ["aClass"],
  31834. 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 ]",
  31835. referencedClasses: [],
  31836. //>>excludeEnd("ide");
  31837. messageSends: ["do:displayingProgress:", "values", "methodDictionary", "install:forClass:protocol:", "source", "protocol", ",", "name", "ifFalse:", "isMetaclass", "recompile:", "class"]
  31838. }),
  31839. $globals.Compiler);
  31840. $core.addMethod(
  31841. $core.method({
  31842. selector: "recompileAll",
  31843. protocol: 'compiling',
  31844. fn: function (){
  31845. var self=this;
  31846. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  31847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31848. return $core.withContext(function($ctx1) {
  31849. //>>excludeEnd("ctx");
  31850. $recv($recv($Smalltalk())._classes())._do_displayingProgress_((function(each){
  31851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31852. return $core.withContext(function($ctx2) {
  31853. //>>excludeEnd("ctx");
  31854. return self._recompile_(each);
  31855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31856. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  31857. //>>excludeEnd("ctx");
  31858. }),"Compiling all classes...");
  31859. return self;
  31860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31861. }, function($ctx1) {$ctx1.fill(self,"recompileAll",{},$globals.Compiler)});
  31862. //>>excludeEnd("ctx");
  31863. },
  31864. //>>excludeStart("ide", pragmas.excludeIdeData);
  31865. args: [],
  31866. source: "recompileAll\x0a\x09Smalltalk classes \x0a\x09\x09do: [ :each | self recompile: each ]\x0a\x09\x09displayingProgress: 'Compiling all classes...'",
  31867. referencedClasses: ["Smalltalk"],
  31868. //>>excludeEnd("ide");
  31869. messageSends: ["do:displayingProgress:", "classes", "recompile:"]
  31870. }),
  31871. $globals.Compiler);
  31872. $core.addMethod(
  31873. $core.method({
  31874. selector: "source",
  31875. protocol: 'accessing',
  31876. fn: function (){
  31877. var self=this;
  31878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31879. return $core.withContext(function($ctx1) {
  31880. //>>excludeEnd("ctx");
  31881. var $2,$1,$receiver;
  31882. $2=self["@source"];
  31883. if(($receiver = $2) == null || $receiver.isNil){
  31884. $1="";
  31885. } else {
  31886. $1=$2;
  31887. };
  31888. return $1;
  31889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31890. }, function($ctx1) {$ctx1.fill(self,"source",{},$globals.Compiler)});
  31891. //>>excludeEnd("ctx");
  31892. },
  31893. //>>excludeStart("ide", pragmas.excludeIdeData);
  31894. args: [],
  31895. source: "source\x0a\x09^ source ifNil: [ '' ]",
  31896. referencedClasses: [],
  31897. //>>excludeEnd("ide");
  31898. messageSends: ["ifNil:"]
  31899. }),
  31900. $globals.Compiler);
  31901. $core.addMethod(
  31902. $core.method({
  31903. selector: "source:",
  31904. protocol: 'accessing',
  31905. fn: function (aString){
  31906. var self=this;
  31907. self["@source"]=aString;
  31908. return self;
  31909. },
  31910. //>>excludeStart("ide", pragmas.excludeIdeData);
  31911. args: ["aString"],
  31912. source: "source: aString\x0a\x09source := aString",
  31913. referencedClasses: [],
  31914. //>>excludeEnd("ide");
  31915. messageSends: []
  31916. }),
  31917. $globals.Compiler);
  31918. $core.addMethod(
  31919. $core.method({
  31920. selector: "unknownVariables",
  31921. protocol: 'accessing',
  31922. fn: function (){
  31923. var self=this;
  31924. var $1;
  31925. $1=self["@unknownVariables"];
  31926. return $1;
  31927. },
  31928. //>>excludeStart("ide", pragmas.excludeIdeData);
  31929. args: [],
  31930. source: "unknownVariables\x0a\x09^ unknownVariables",
  31931. referencedClasses: [],
  31932. //>>excludeEnd("ide");
  31933. messageSends: []
  31934. }),
  31935. $globals.Compiler);
  31936. $core.addMethod(
  31937. $core.method({
  31938. selector: "unknownVariables:",
  31939. protocol: 'accessing',
  31940. fn: function (aCollection){
  31941. var self=this;
  31942. self["@unknownVariables"]=aCollection;
  31943. return self;
  31944. },
  31945. //>>excludeStart("ide", pragmas.excludeIdeData);
  31946. args: ["aCollection"],
  31947. source: "unknownVariables: aCollection\x0a\x09unknownVariables := aCollection",
  31948. referencedClasses: [],
  31949. //>>excludeEnd("ide");
  31950. messageSends: []
  31951. }),
  31952. $globals.Compiler);
  31953. $core.addMethod(
  31954. $core.method({
  31955. selector: "recompile:",
  31956. protocol: 'compiling',
  31957. fn: function (aClass){
  31958. var self=this;
  31959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31960. return $core.withContext(function($ctx1) {
  31961. //>>excludeEnd("ctx");
  31962. $recv(self._new())._recompile_(aClass);
  31963. return self;
  31964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31965. }, function($ctx1) {$ctx1.fill(self,"recompile:",{aClass:aClass},$globals.Compiler.klass)});
  31966. //>>excludeEnd("ctx");
  31967. },
  31968. //>>excludeStart("ide", pragmas.excludeIdeData);
  31969. args: ["aClass"],
  31970. source: "recompile: aClass\x0a\x09self new recompile: aClass",
  31971. referencedClasses: [],
  31972. //>>excludeEnd("ide");
  31973. messageSends: ["recompile:", "new"]
  31974. }),
  31975. $globals.Compiler.klass);
  31976. $core.addMethod(
  31977. $core.method({
  31978. selector: "recompileAll",
  31979. protocol: 'compiling',
  31980. fn: function (){
  31981. var self=this;
  31982. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  31983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31984. return $core.withContext(function($ctx1) {
  31985. //>>excludeEnd("ctx");
  31986. $recv($recv($Smalltalk())._classes())._do_((function(each){
  31987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31988. return $core.withContext(function($ctx2) {
  31989. //>>excludeEnd("ctx");
  31990. return self._recompile_(each);
  31991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31992. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  31993. //>>excludeEnd("ctx");
  31994. }));
  31995. return self;
  31996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31997. }, function($ctx1) {$ctx1.fill(self,"recompileAll",{},$globals.Compiler.klass)});
  31998. //>>excludeEnd("ctx");
  31999. },
  32000. //>>excludeStart("ide", pragmas.excludeIdeData);
  32001. args: [],
  32002. source: "recompileAll\x0a\x09Smalltalk classes do: [ :each |\x0a\x09\x09self recompile: each ]",
  32003. referencedClasses: ["Smalltalk"],
  32004. //>>excludeEnd("ide");
  32005. messageSends: ["do:", "classes", "recompile:"]
  32006. }),
  32007. $globals.Compiler.klass);
  32008. $core.addClass('DoIt', $globals.Object, [], 'Compiler-Core');
  32009. //>>excludeStart("ide", pragmas.excludeIdeData);
  32010. $globals.DoIt.comment="`DoIt` is the class used to compile and evaluate expressions. See `Compiler >> evaluateExpression:`.";
  32011. //>>excludeEnd("ide");
  32012. $core.addClass('Evaluator', $globals.InterfacingObject, [], 'Compiler-Core');
  32013. //>>excludeStart("ide", pragmas.excludeIdeData);
  32014. $globals.Evaluator.comment="I evaluate code against a receiver, dispatching #evaluate:on: to the receiver.";
  32015. //>>excludeEnd("ide");
  32016. $core.addMethod(
  32017. $core.method({
  32018. selector: "evaluate:context:",
  32019. protocol: 'evaluating',
  32020. fn: function (aString,aContext){
  32021. var self=this;
  32022. var compiler,ast;
  32023. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  32024. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  32025. function $AISemanticAnalyzer(){return $globals.AISemanticAnalyzer||(typeof AISemanticAnalyzer=="undefined"?nil:AISemanticAnalyzer)}
  32026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32027. return $core.withContext(function($ctx1) {
  32028. //>>excludeEnd("ctx");
  32029. var $1,$2,$3,$4;
  32030. var $early={};
  32031. try {
  32032. compiler=$recv($Compiler())._new();
  32033. $recv((function(){
  32034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32035. return $core.withContext(function($ctx2) {
  32036. //>>excludeEnd("ctx");
  32037. ast=$recv(compiler)._parseExpression_(aString);
  32038. return ast;
  32039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32040. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  32041. //>>excludeEnd("ctx");
  32042. }))._on_do_($Error(),(function(ex){
  32043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32044. return $core.withContext(function($ctx2) {
  32045. //>>excludeEnd("ctx");
  32046. $1=self._alert_($recv(ex)._messageText());
  32047. throw $early=[$1];
  32048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32049. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,2)});
  32050. //>>excludeEnd("ctx");
  32051. }));
  32052. $2=$recv($AISemanticAnalyzer())._on_($recv($recv(aContext)._receiver())._class());
  32053. $recv($2)._context_(aContext);
  32054. $3=$recv($2)._visit_(ast);
  32055. $4=$recv(aContext)._evaluateNode_(ast);
  32056. return $4;
  32057. }
  32058. catch(e) {if(e===$early)return e[0]; throw e}
  32059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32060. }, function($ctx1) {$ctx1.fill(self,"evaluate:context:",{aString:aString,aContext:aContext,compiler:compiler,ast:ast},$globals.Evaluator)});
  32061. //>>excludeEnd("ctx");
  32062. },
  32063. //>>excludeStart("ide", pragmas.excludeIdeData);
  32064. args: ["aString", "aContext"],
  32065. 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",
  32066. referencedClasses: ["Compiler", "Error", "AISemanticAnalyzer"],
  32067. //>>excludeEnd("ide");
  32068. messageSends: ["new", "on:do:", "parseExpression:", "alert:", "messageText", "context:", "on:", "class", "receiver", "visit:", "evaluateNode:"]
  32069. }),
  32070. $globals.Evaluator);
  32071. $core.addMethod(
  32072. $core.method({
  32073. selector: "evaluate:for:",
  32074. protocol: 'evaluating',
  32075. fn: function (aString,anObject){
  32076. var self=this;
  32077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32078. return $core.withContext(function($ctx1) {
  32079. //>>excludeEnd("ctx");
  32080. var $1;
  32081. $1=$recv(anObject)._evaluate_on_(aString,self);
  32082. return $1;
  32083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32084. }, function($ctx1) {$ctx1.fill(self,"evaluate:for:",{aString:aString,anObject:anObject},$globals.Evaluator)});
  32085. //>>excludeEnd("ctx");
  32086. },
  32087. //>>excludeStart("ide", pragmas.excludeIdeData);
  32088. args: ["aString", "anObject"],
  32089. source: "evaluate: aString for: anObject\x0a\x09^ anObject evaluate: aString on: self",
  32090. referencedClasses: [],
  32091. //>>excludeEnd("ide");
  32092. messageSends: ["evaluate:on:"]
  32093. }),
  32094. $globals.Evaluator);
  32095. $core.addMethod(
  32096. $core.method({
  32097. selector: "evaluate:receiver:",
  32098. protocol: 'evaluating',
  32099. fn: function (aString,anObject){
  32100. var self=this;
  32101. var compiler;
  32102. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  32103. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  32104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32105. return $core.withContext(function($ctx1) {
  32106. //>>excludeEnd("ctx");
  32107. var $1,$2;
  32108. var $early={};
  32109. try {
  32110. compiler=$recv($Compiler())._new();
  32111. $recv((function(){
  32112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32113. return $core.withContext(function($ctx2) {
  32114. //>>excludeEnd("ctx");
  32115. return $recv(compiler)._parseExpression_(aString);
  32116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32117. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  32118. //>>excludeEnd("ctx");
  32119. }))._on_do_($Error(),(function(ex){
  32120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32121. return $core.withContext(function($ctx2) {
  32122. //>>excludeEnd("ctx");
  32123. $1=self._alert_($recv(ex)._messageText());
  32124. throw $early=[$1];
  32125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32126. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,2)});
  32127. //>>excludeEnd("ctx");
  32128. }));
  32129. $2=$recv(compiler)._evaluateExpression_on_(aString,anObject);
  32130. return $2;
  32131. }
  32132. catch(e) {if(e===$early)return e[0]; throw e}
  32133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32134. }, function($ctx1) {$ctx1.fill(self,"evaluate:receiver:",{aString:aString,anObject:anObject,compiler:compiler},$globals.Evaluator)});
  32135. //>>excludeEnd("ctx");
  32136. },
  32137. //>>excludeStart("ide", pragmas.excludeIdeData);
  32138. args: ["aString", "anObject"],
  32139. 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",
  32140. referencedClasses: ["Compiler", "Error"],
  32141. //>>excludeEnd("ide");
  32142. messageSends: ["new", "on:do:", "parseExpression:", "alert:", "messageText", "evaluateExpression:on:"]
  32143. }),
  32144. $globals.Evaluator);
  32145. $core.addMethod(
  32146. $core.method({
  32147. selector: "evaluate:for:",
  32148. protocol: 'instance creation',
  32149. fn: function (aString,anObject){
  32150. var self=this;
  32151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32152. return $core.withContext(function($ctx1) {
  32153. //>>excludeEnd("ctx");
  32154. var $1;
  32155. $1=$recv(self._new())._evaluate_for_(aString,anObject);
  32156. return $1;
  32157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32158. }, function($ctx1) {$ctx1.fill(self,"evaluate:for:",{aString:aString,anObject:anObject},$globals.Evaluator.klass)});
  32159. //>>excludeEnd("ctx");
  32160. },
  32161. //>>excludeStart("ide", pragmas.excludeIdeData);
  32162. args: ["aString", "anObject"],
  32163. source: "evaluate: aString for: anObject\x0a\x09^ self new evaluate: aString for: anObject",
  32164. referencedClasses: [],
  32165. //>>excludeEnd("ide");
  32166. messageSends: ["evaluate:for:", "new"]
  32167. }),
  32168. $globals.Evaluator.klass);
  32169. $core.addClass('NodeVisitor', $globals.Object, [], 'Compiler-Core');
  32170. //>>excludeStart("ide", pragmas.excludeIdeData);
  32171. $globals.NodeVisitor.comment="I am the abstract super class of all AST node visitors.";
  32172. //>>excludeEnd("ide");
  32173. $core.addMethod(
  32174. $core.method({
  32175. selector: "visit:",
  32176. protocol: 'visiting',
  32177. fn: function (aNode){
  32178. var self=this;
  32179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32180. return $core.withContext(function($ctx1) {
  32181. //>>excludeEnd("ctx");
  32182. var $1;
  32183. $1=$recv(aNode)._accept_(self);
  32184. return $1;
  32185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32186. }, function($ctx1) {$ctx1.fill(self,"visit:",{aNode:aNode},$globals.NodeVisitor)});
  32187. //>>excludeEnd("ctx");
  32188. },
  32189. //>>excludeStart("ide", pragmas.excludeIdeData);
  32190. args: ["aNode"],
  32191. source: "visit: aNode\x0a\x09^ aNode accept: self",
  32192. referencedClasses: [],
  32193. //>>excludeEnd("ide");
  32194. messageSends: ["accept:"]
  32195. }),
  32196. $globals.NodeVisitor);
  32197. $core.addMethod(
  32198. $core.method({
  32199. selector: "visitAll:",
  32200. protocol: 'visiting',
  32201. fn: function (aCollection){
  32202. var self=this;
  32203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32204. return $core.withContext(function($ctx1) {
  32205. //>>excludeEnd("ctx");
  32206. var $1;
  32207. $1=$recv(aCollection)._collect_((function(each){
  32208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32209. return $core.withContext(function($ctx2) {
  32210. //>>excludeEnd("ctx");
  32211. return self._visit_(each);
  32212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32213. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  32214. //>>excludeEnd("ctx");
  32215. }));
  32216. return $1;
  32217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32218. }, function($ctx1) {$ctx1.fill(self,"visitAll:",{aCollection:aCollection},$globals.NodeVisitor)});
  32219. //>>excludeEnd("ctx");
  32220. },
  32221. //>>excludeStart("ide", pragmas.excludeIdeData);
  32222. args: ["aCollection"],
  32223. source: "visitAll: aCollection\x0a\x09^ aCollection collect: [ :each | self visit: each ]",
  32224. referencedClasses: [],
  32225. //>>excludeEnd("ide");
  32226. messageSends: ["collect:", "visit:"]
  32227. }),
  32228. $globals.NodeVisitor);
  32229. $core.addMethod(
  32230. $core.method({
  32231. selector: "visitAssignmentNode:",
  32232. protocol: 'visiting',
  32233. fn: function (aNode){
  32234. var self=this;
  32235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32236. return $core.withContext(function($ctx1) {
  32237. //>>excludeEnd("ctx");
  32238. var $1;
  32239. $1=self._visitNode_(aNode);
  32240. return $1;
  32241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32242. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode},$globals.NodeVisitor)});
  32243. //>>excludeEnd("ctx");
  32244. },
  32245. //>>excludeStart("ide", pragmas.excludeIdeData);
  32246. args: ["aNode"],
  32247. source: "visitAssignmentNode: aNode\x0a\x09^ self visitNode: aNode",
  32248. referencedClasses: [],
  32249. //>>excludeEnd("ide");
  32250. messageSends: ["visitNode:"]
  32251. }),
  32252. $globals.NodeVisitor);
  32253. $core.addMethod(
  32254. $core.method({
  32255. selector: "visitBlockNode:",
  32256. protocol: 'visiting',
  32257. fn: function (aNode){
  32258. var self=this;
  32259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32260. return $core.withContext(function($ctx1) {
  32261. //>>excludeEnd("ctx");
  32262. var $1;
  32263. $1=self._visitNode_(aNode);
  32264. return $1;
  32265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32266. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode},$globals.NodeVisitor)});
  32267. //>>excludeEnd("ctx");
  32268. },
  32269. //>>excludeStart("ide", pragmas.excludeIdeData);
  32270. args: ["aNode"],
  32271. source: "visitBlockNode: aNode\x0a\x09^ self visitNode: aNode",
  32272. referencedClasses: [],
  32273. //>>excludeEnd("ide");
  32274. messageSends: ["visitNode:"]
  32275. }),
  32276. $globals.NodeVisitor);
  32277. $core.addMethod(
  32278. $core.method({
  32279. selector: "visitBlockSequenceNode:",
  32280. protocol: 'visiting',
  32281. fn: function (aNode){
  32282. var self=this;
  32283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32284. return $core.withContext(function($ctx1) {
  32285. //>>excludeEnd("ctx");
  32286. var $1;
  32287. $1=self._visitSequenceNode_(aNode);
  32288. return $1;
  32289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32290. }, function($ctx1) {$ctx1.fill(self,"visitBlockSequenceNode:",{aNode:aNode},$globals.NodeVisitor)});
  32291. //>>excludeEnd("ctx");
  32292. },
  32293. //>>excludeStart("ide", pragmas.excludeIdeData);
  32294. args: ["aNode"],
  32295. source: "visitBlockSequenceNode: aNode\x0a\x09^ self visitSequenceNode: aNode",
  32296. referencedClasses: [],
  32297. //>>excludeEnd("ide");
  32298. messageSends: ["visitSequenceNode:"]
  32299. }),
  32300. $globals.NodeVisitor);
  32301. $core.addMethod(
  32302. $core.method({
  32303. selector: "visitCascadeNode:",
  32304. protocol: 'visiting',
  32305. fn: function (aNode){
  32306. var self=this;
  32307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32308. return $core.withContext(function($ctx1) {
  32309. //>>excludeEnd("ctx");
  32310. var $1;
  32311. $1=self._visitNode_(aNode);
  32312. return $1;
  32313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32314. }, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode},$globals.NodeVisitor)});
  32315. //>>excludeEnd("ctx");
  32316. },
  32317. //>>excludeStart("ide", pragmas.excludeIdeData);
  32318. args: ["aNode"],
  32319. source: "visitCascadeNode: aNode\x0a\x09^ self visitNode: aNode",
  32320. referencedClasses: [],
  32321. //>>excludeEnd("ide");
  32322. messageSends: ["visitNode:"]
  32323. }),
  32324. $globals.NodeVisitor);
  32325. $core.addMethod(
  32326. $core.method({
  32327. selector: "visitDynamicArrayNode:",
  32328. protocol: 'visiting',
  32329. fn: function (aNode){
  32330. var self=this;
  32331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32332. return $core.withContext(function($ctx1) {
  32333. //>>excludeEnd("ctx");
  32334. var $1;
  32335. $1=self._visitNode_(aNode);
  32336. return $1;
  32337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32338. }, function($ctx1) {$ctx1.fill(self,"visitDynamicArrayNode:",{aNode:aNode},$globals.NodeVisitor)});
  32339. //>>excludeEnd("ctx");
  32340. },
  32341. //>>excludeStart("ide", pragmas.excludeIdeData);
  32342. args: ["aNode"],
  32343. source: "visitDynamicArrayNode: aNode\x0a\x09^ self visitNode: aNode",
  32344. referencedClasses: [],
  32345. //>>excludeEnd("ide");
  32346. messageSends: ["visitNode:"]
  32347. }),
  32348. $globals.NodeVisitor);
  32349. $core.addMethod(
  32350. $core.method({
  32351. selector: "visitDynamicDictionaryNode:",
  32352. protocol: 'visiting',
  32353. fn: function (aNode){
  32354. var self=this;
  32355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32356. return $core.withContext(function($ctx1) {
  32357. //>>excludeEnd("ctx");
  32358. var $1;
  32359. $1=self._visitNode_(aNode);
  32360. return $1;
  32361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32362. }, function($ctx1) {$ctx1.fill(self,"visitDynamicDictionaryNode:",{aNode:aNode},$globals.NodeVisitor)});
  32363. //>>excludeEnd("ctx");
  32364. },
  32365. //>>excludeStart("ide", pragmas.excludeIdeData);
  32366. args: ["aNode"],
  32367. source: "visitDynamicDictionaryNode: aNode\x0a\x09^ self visitNode: aNode",
  32368. referencedClasses: [],
  32369. //>>excludeEnd("ide");
  32370. messageSends: ["visitNode:"]
  32371. }),
  32372. $globals.NodeVisitor);
  32373. $core.addMethod(
  32374. $core.method({
  32375. selector: "visitJSStatementNode:",
  32376. protocol: 'visiting',
  32377. fn: function (aNode){
  32378. var self=this;
  32379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32380. return $core.withContext(function($ctx1) {
  32381. //>>excludeEnd("ctx");
  32382. var $1;
  32383. $1=self._visitNode_(aNode);
  32384. return $1;
  32385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32386. }, function($ctx1) {$ctx1.fill(self,"visitJSStatementNode:",{aNode:aNode},$globals.NodeVisitor)});
  32387. //>>excludeEnd("ctx");
  32388. },
  32389. //>>excludeStart("ide", pragmas.excludeIdeData);
  32390. args: ["aNode"],
  32391. source: "visitJSStatementNode: aNode\x0a\x09^ self visitNode: aNode",
  32392. referencedClasses: [],
  32393. //>>excludeEnd("ide");
  32394. messageSends: ["visitNode:"]
  32395. }),
  32396. $globals.NodeVisitor);
  32397. $core.addMethod(
  32398. $core.method({
  32399. selector: "visitMethodNode:",
  32400. protocol: 'visiting',
  32401. fn: function (aNode){
  32402. var self=this;
  32403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32404. return $core.withContext(function($ctx1) {
  32405. //>>excludeEnd("ctx");
  32406. var $1;
  32407. $1=self._visitNode_(aNode);
  32408. return $1;
  32409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32410. }, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode},$globals.NodeVisitor)});
  32411. //>>excludeEnd("ctx");
  32412. },
  32413. //>>excludeStart("ide", pragmas.excludeIdeData);
  32414. args: ["aNode"],
  32415. source: "visitMethodNode: aNode\x0a\x09^ self visitNode: aNode",
  32416. referencedClasses: [],
  32417. //>>excludeEnd("ide");
  32418. messageSends: ["visitNode:"]
  32419. }),
  32420. $globals.NodeVisitor);
  32421. $core.addMethod(
  32422. $core.method({
  32423. selector: "visitNode:",
  32424. protocol: 'visiting',
  32425. fn: function (aNode){
  32426. var self=this;
  32427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32428. return $core.withContext(function($ctx1) {
  32429. //>>excludeEnd("ctx");
  32430. var $1;
  32431. $1=self._visitAll_($recv(aNode)._nodes());
  32432. return $1;
  32433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32434. }, function($ctx1) {$ctx1.fill(self,"visitNode:",{aNode:aNode},$globals.NodeVisitor)});
  32435. //>>excludeEnd("ctx");
  32436. },
  32437. //>>excludeStart("ide", pragmas.excludeIdeData);
  32438. args: ["aNode"],
  32439. source: "visitNode: aNode\x0a\x09^ self visitAll: aNode nodes",
  32440. referencedClasses: [],
  32441. //>>excludeEnd("ide");
  32442. messageSends: ["visitAll:", "nodes"]
  32443. }),
  32444. $globals.NodeVisitor);
  32445. $core.addMethod(
  32446. $core.method({
  32447. selector: "visitReturnNode:",
  32448. protocol: 'visiting',
  32449. fn: function (aNode){
  32450. var self=this;
  32451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32452. return $core.withContext(function($ctx1) {
  32453. //>>excludeEnd("ctx");
  32454. var $1;
  32455. $1=self._visitNode_(aNode);
  32456. return $1;
  32457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32458. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode},$globals.NodeVisitor)});
  32459. //>>excludeEnd("ctx");
  32460. },
  32461. //>>excludeStart("ide", pragmas.excludeIdeData);
  32462. args: ["aNode"],
  32463. source: "visitReturnNode: aNode\x0a\x09^ self visitNode: aNode",
  32464. referencedClasses: [],
  32465. //>>excludeEnd("ide");
  32466. messageSends: ["visitNode:"]
  32467. }),
  32468. $globals.NodeVisitor);
  32469. $core.addMethod(
  32470. $core.method({
  32471. selector: "visitSendNode:",
  32472. protocol: 'visiting',
  32473. fn: function (aNode){
  32474. var self=this;
  32475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32476. return $core.withContext(function($ctx1) {
  32477. //>>excludeEnd("ctx");
  32478. var $1;
  32479. $1=self._visitNode_(aNode);
  32480. return $1;
  32481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32482. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode},$globals.NodeVisitor)});
  32483. //>>excludeEnd("ctx");
  32484. },
  32485. //>>excludeStart("ide", pragmas.excludeIdeData);
  32486. args: ["aNode"],
  32487. source: "visitSendNode: aNode\x0a\x09^ self visitNode: aNode",
  32488. referencedClasses: [],
  32489. //>>excludeEnd("ide");
  32490. messageSends: ["visitNode:"]
  32491. }),
  32492. $globals.NodeVisitor);
  32493. $core.addMethod(
  32494. $core.method({
  32495. selector: "visitSequenceNode:",
  32496. protocol: 'visiting',
  32497. fn: function (aNode){
  32498. var self=this;
  32499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32500. return $core.withContext(function($ctx1) {
  32501. //>>excludeEnd("ctx");
  32502. var $1;
  32503. $1=self._visitNode_(aNode);
  32504. return $1;
  32505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32506. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},$globals.NodeVisitor)});
  32507. //>>excludeEnd("ctx");
  32508. },
  32509. //>>excludeStart("ide", pragmas.excludeIdeData);
  32510. args: ["aNode"],
  32511. source: "visitSequenceNode: aNode\x0a\x09^ self visitNode: aNode",
  32512. referencedClasses: [],
  32513. //>>excludeEnd("ide");
  32514. messageSends: ["visitNode:"]
  32515. }),
  32516. $globals.NodeVisitor);
  32517. $core.addMethod(
  32518. $core.method({
  32519. selector: "visitValueNode:",
  32520. protocol: 'visiting',
  32521. fn: function (aNode){
  32522. var self=this;
  32523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32524. return $core.withContext(function($ctx1) {
  32525. //>>excludeEnd("ctx");
  32526. var $1;
  32527. $1=self._visitNode_(aNode);
  32528. return $1;
  32529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32530. }, function($ctx1) {$ctx1.fill(self,"visitValueNode:",{aNode:aNode},$globals.NodeVisitor)});
  32531. //>>excludeEnd("ctx");
  32532. },
  32533. //>>excludeStart("ide", pragmas.excludeIdeData);
  32534. args: ["aNode"],
  32535. source: "visitValueNode: aNode\x0a\x09^ self visitNode: aNode",
  32536. referencedClasses: [],
  32537. //>>excludeEnd("ide");
  32538. messageSends: ["visitNode:"]
  32539. }),
  32540. $globals.NodeVisitor);
  32541. $core.addMethod(
  32542. $core.method({
  32543. selector: "visitVariableNode:",
  32544. protocol: 'visiting',
  32545. fn: function (aNode){
  32546. var self=this;
  32547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32548. return $core.withContext(function($ctx1) {
  32549. //>>excludeEnd("ctx");
  32550. var $1;
  32551. $1=self._visitNode_(aNode);
  32552. return $1;
  32553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32554. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},$globals.NodeVisitor)});
  32555. //>>excludeEnd("ctx");
  32556. },
  32557. //>>excludeStart("ide", pragmas.excludeIdeData);
  32558. args: ["aNode"],
  32559. source: "visitVariableNode: aNode\x0a\x09^ self visitNode: aNode",
  32560. referencedClasses: [],
  32561. //>>excludeEnd("ide");
  32562. messageSends: ["visitNode:"]
  32563. }),
  32564. $globals.NodeVisitor);
  32565. $core.addMethod(
  32566. $core.method({
  32567. selector: "asVariableName",
  32568. protocol: '*Compiler-Core',
  32569. fn: function (){
  32570. var self=this;
  32571. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  32572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32573. return $core.withContext(function($ctx1) {
  32574. //>>excludeEnd("ctx");
  32575. var $2,$1;
  32576. $2=$recv($recv($Smalltalk())._reservedWords())._includes_(self);
  32577. if($core.assert($2)){
  32578. $1=self.__comma("_");
  32579. } else {
  32580. $1=self;
  32581. };
  32582. return $1;
  32583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32584. }, function($ctx1) {$ctx1.fill(self,"asVariableName",{},$globals.String)});
  32585. //>>excludeEnd("ctx");
  32586. },
  32587. //>>excludeStart("ide", pragmas.excludeIdeData);
  32588. args: [],
  32589. source: "asVariableName\x0a\x09^ (Smalltalk reservedWords includes: self)\x0a\x09\x09ifTrue: [ self, '_' ]\x0a\x09\x09ifFalse: [ self ]",
  32590. referencedClasses: ["Smalltalk"],
  32591. //>>excludeEnd("ide");
  32592. messageSends: ["ifTrue:ifFalse:", "includes:", "reservedWords", ","]
  32593. }),
  32594. $globals.String);
  32595. });
  32596. define("amber_core/Compiler-AST", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Methods"], function($boot){
  32597. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  32598. $core.addPackage('Compiler-AST');
  32599. $core.packages["Compiler-AST"].innerEval = function (expr) { return eval(expr); };
  32600. $core.packages["Compiler-AST"].transport = {"type":"amd","amdNamespace":"amber_core"};
  32601. $core.addClass('Node', $globals.Object, ['parent', 'position', 'source', 'nodes', 'shouldBeInlined', 'shouldBeAliased'], 'Compiler-AST');
  32602. //>>excludeStart("ide", pragmas.excludeIdeData);
  32603. $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.";
  32604. //>>excludeEnd("ide");
  32605. $core.addMethod(
  32606. $core.method({
  32607. selector: "accept:",
  32608. protocol: 'visiting',
  32609. fn: function (aVisitor){
  32610. var self=this;
  32611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32612. return $core.withContext(function($ctx1) {
  32613. //>>excludeEnd("ctx");
  32614. var $1;
  32615. $1=$recv(aVisitor)._visitNode_(self);
  32616. return $1;
  32617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32618. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.Node)});
  32619. //>>excludeEnd("ctx");
  32620. },
  32621. //>>excludeStart("ide", pragmas.excludeIdeData);
  32622. args: ["aVisitor"],
  32623. source: "accept: aVisitor\x0a\x09^ aVisitor visitNode: self",
  32624. referencedClasses: [],
  32625. //>>excludeEnd("ide");
  32626. messageSends: ["visitNode:"]
  32627. }),
  32628. $globals.Node);
  32629. $core.addMethod(
  32630. $core.method({
  32631. selector: "addNode:",
  32632. protocol: 'accessing',
  32633. fn: function (aNode){
  32634. var self=this;
  32635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32636. return $core.withContext(function($ctx1) {
  32637. //>>excludeEnd("ctx");
  32638. $recv(self._nodes())._add_(aNode);
  32639. $recv(aNode)._parent_(self);
  32640. return self;
  32641. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32642. }, function($ctx1) {$ctx1.fill(self,"addNode:",{aNode:aNode},$globals.Node)});
  32643. //>>excludeEnd("ctx");
  32644. },
  32645. //>>excludeStart("ide", pragmas.excludeIdeData);
  32646. args: ["aNode"],
  32647. source: "addNode: aNode\x0a\x09self nodes add: aNode.\x0a\x09aNode parent: self",
  32648. referencedClasses: [],
  32649. //>>excludeEnd("ide");
  32650. messageSends: ["add:", "nodes", "parent:"]
  32651. }),
  32652. $globals.Node);
  32653. $core.addMethod(
  32654. $core.method({
  32655. selector: "allNodes",
  32656. protocol: 'accessing',
  32657. fn: function (){
  32658. var self=this;
  32659. var allNodes;
  32660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32661. return $core.withContext(function($ctx1) {
  32662. //>>excludeEnd("ctx");
  32663. var $1,$2;
  32664. $1=self._nodes();
  32665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32666. $ctx1.sendIdx["nodes"]=1;
  32667. //>>excludeEnd("ctx");
  32668. allNodes=$recv($1)._asSet();
  32669. $recv(self._nodes())._do_((function(each){
  32670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32671. return $core.withContext(function($ctx2) {
  32672. //>>excludeEnd("ctx");
  32673. return $recv(allNodes)._addAll_($recv(each)._allNodes());
  32674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32675. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  32676. //>>excludeEnd("ctx");
  32677. }));
  32678. $2=allNodes;
  32679. return $2;
  32680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32681. }, function($ctx1) {$ctx1.fill(self,"allNodes",{allNodes:allNodes},$globals.Node)});
  32682. //>>excludeEnd("ctx");
  32683. },
  32684. //>>excludeStart("ide", pragmas.excludeIdeData);
  32685. args: [],
  32686. 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",
  32687. referencedClasses: [],
  32688. //>>excludeEnd("ide");
  32689. messageSends: ["asSet", "nodes", "do:", "addAll:", "allNodes"]
  32690. }),
  32691. $globals.Node);
  32692. $core.addMethod(
  32693. $core.method({
  32694. selector: "inPosition:",
  32695. protocol: 'testing',
  32696. fn: function (aPoint){
  32697. var self=this;
  32698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32699. return $core.withContext(function($ctx1) {
  32700. //>>excludeEnd("ctx");
  32701. var $1;
  32702. $1=$recv($recv(self._positionStart()).__lt_eq(aPoint))._and_((function(){
  32703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32704. return $core.withContext(function($ctx2) {
  32705. //>>excludeEnd("ctx");
  32706. return $recv(self._positionEnd()).__gt_eq(aPoint);
  32707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32708. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  32709. //>>excludeEnd("ctx");
  32710. }));
  32711. return $1;
  32712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32713. }, function($ctx1) {$ctx1.fill(self,"inPosition:",{aPoint:aPoint},$globals.Node)});
  32714. //>>excludeEnd("ctx");
  32715. },
  32716. //>>excludeStart("ide", pragmas.excludeIdeData);
  32717. args: ["aPoint"],
  32718. source: "inPosition: aPoint\x0a\x09^ (self positionStart <= aPoint and: [\x0a\x09\x09self positionEnd >= aPoint ])",
  32719. referencedClasses: [],
  32720. //>>excludeEnd("ide");
  32721. messageSends: ["and:", "<=", "positionStart", ">=", "positionEnd"]
  32722. }),
  32723. $globals.Node);
  32724. $core.addMethod(
  32725. $core.method({
  32726. selector: "isAssignmentNode",
  32727. protocol: 'testing',
  32728. fn: function (){
  32729. var self=this;
  32730. return false;
  32731. },
  32732. //>>excludeStart("ide", pragmas.excludeIdeData);
  32733. args: [],
  32734. source: "isAssignmentNode\x0a\x09^ false",
  32735. referencedClasses: [],
  32736. //>>excludeEnd("ide");
  32737. messageSends: []
  32738. }),
  32739. $globals.Node);
  32740. $core.addMethod(
  32741. $core.method({
  32742. selector: "isBlockNode",
  32743. protocol: 'testing',
  32744. fn: function (){
  32745. var self=this;
  32746. return false;
  32747. },
  32748. //>>excludeStart("ide", pragmas.excludeIdeData);
  32749. args: [],
  32750. source: "isBlockNode\x0a\x09^ false",
  32751. referencedClasses: [],
  32752. //>>excludeEnd("ide");
  32753. messageSends: []
  32754. }),
  32755. $globals.Node);
  32756. $core.addMethod(
  32757. $core.method({
  32758. selector: "isBlockSequenceNode",
  32759. protocol: 'testing',
  32760. fn: function (){
  32761. var self=this;
  32762. return false;
  32763. },
  32764. //>>excludeStart("ide", pragmas.excludeIdeData);
  32765. args: [],
  32766. source: "isBlockSequenceNode\x0a\x09^ false",
  32767. referencedClasses: [],
  32768. //>>excludeEnd("ide");
  32769. messageSends: []
  32770. }),
  32771. $globals.Node);
  32772. $core.addMethod(
  32773. $core.method({
  32774. selector: "isCascadeNode",
  32775. protocol: 'testing',
  32776. fn: function (){
  32777. var self=this;
  32778. return false;
  32779. },
  32780. //>>excludeStart("ide", pragmas.excludeIdeData);
  32781. args: [],
  32782. source: "isCascadeNode\x0a\x09^ false",
  32783. referencedClasses: [],
  32784. //>>excludeEnd("ide");
  32785. messageSends: []
  32786. }),
  32787. $globals.Node);
  32788. $core.addMethod(
  32789. $core.method({
  32790. selector: "isImmutable",
  32791. protocol: 'testing',
  32792. fn: function (){
  32793. var self=this;
  32794. return false;
  32795. },
  32796. //>>excludeStart("ide", pragmas.excludeIdeData);
  32797. args: [],
  32798. source: "isImmutable\x0a\x09^ false",
  32799. referencedClasses: [],
  32800. //>>excludeEnd("ide");
  32801. messageSends: []
  32802. }),
  32803. $globals.Node);
  32804. $core.addMethod(
  32805. $core.method({
  32806. selector: "isJSStatementNode",
  32807. protocol: 'testing',
  32808. fn: function (){
  32809. var self=this;
  32810. return false;
  32811. },
  32812. //>>excludeStart("ide", pragmas.excludeIdeData);
  32813. args: [],
  32814. source: "isJSStatementNode\x0a\x09^ false",
  32815. referencedClasses: [],
  32816. //>>excludeEnd("ide");
  32817. messageSends: []
  32818. }),
  32819. $globals.Node);
  32820. $core.addMethod(
  32821. $core.method({
  32822. selector: "isLastChild",
  32823. protocol: 'testing',
  32824. fn: function (){
  32825. var self=this;
  32826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32827. return $core.withContext(function($ctx1) {
  32828. //>>excludeEnd("ctx");
  32829. var $1;
  32830. $1=$recv($recv($recv(self._parent())._nodes())._last()).__eq(self);
  32831. return $1;
  32832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32833. }, function($ctx1) {$ctx1.fill(self,"isLastChild",{},$globals.Node)});
  32834. //>>excludeEnd("ctx");
  32835. },
  32836. //>>excludeStart("ide", pragmas.excludeIdeData);
  32837. args: [],
  32838. source: "isLastChild\x0a\x09^ self parent nodes last = self",
  32839. referencedClasses: [],
  32840. //>>excludeEnd("ide");
  32841. messageSends: ["=", "last", "nodes", "parent"]
  32842. }),
  32843. $globals.Node);
  32844. $core.addMethod(
  32845. $core.method({
  32846. selector: "isNavigationNode",
  32847. protocol: 'testing',
  32848. fn: function (){
  32849. var self=this;
  32850. return false;
  32851. },
  32852. //>>excludeStart("ide", pragmas.excludeIdeData);
  32853. args: [],
  32854. source: "isNavigationNode\x0a\x09\x22Answer true if the node can be navigated to\x22\x0a\x09\x0a\x09^ false",
  32855. referencedClasses: [],
  32856. //>>excludeEnd("ide");
  32857. messageSends: []
  32858. }),
  32859. $globals.Node);
  32860. $core.addMethod(
  32861. $core.method({
  32862. selector: "isNode",
  32863. protocol: 'testing',
  32864. fn: function (){
  32865. var self=this;
  32866. return true;
  32867. },
  32868. //>>excludeStart("ide", pragmas.excludeIdeData);
  32869. args: [],
  32870. source: "isNode\x0a\x09^ true",
  32871. referencedClasses: [],
  32872. //>>excludeEnd("ide");
  32873. messageSends: []
  32874. }),
  32875. $globals.Node);
  32876. $core.addMethod(
  32877. $core.method({
  32878. selector: "isReferenced",
  32879. protocol: 'testing',
  32880. fn: function (){
  32881. var self=this;
  32882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32883. return $core.withContext(function($ctx1) {
  32884. //>>excludeEnd("ctx");
  32885. var $4,$3,$2,$1;
  32886. $4=self._parent();
  32887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32888. $ctx1.sendIdx["parent"]=1;
  32889. //>>excludeEnd("ctx");
  32890. $3=$recv($4)._isSequenceNode();
  32891. $2=$recv($3)._or_((function(){
  32892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32893. return $core.withContext(function($ctx2) {
  32894. //>>excludeEnd("ctx");
  32895. return $recv(self._parent())._isAssignmentNode();
  32896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32897. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  32898. //>>excludeEnd("ctx");
  32899. }));
  32900. $1=$recv($2)._not();
  32901. return $1;
  32902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32903. }, function($ctx1) {$ctx1.fill(self,"isReferenced",{},$globals.Node)});
  32904. //>>excludeEnd("ctx");
  32905. },
  32906. //>>excludeStart("ide", pragmas.excludeIdeData);
  32907. args: [],
  32908. 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",
  32909. referencedClasses: [],
  32910. //>>excludeEnd("ide");
  32911. messageSends: ["not", "or:", "isSequenceNode", "parent", "isAssignmentNode"]
  32912. }),
  32913. $globals.Node);
  32914. $core.addMethod(
  32915. $core.method({
  32916. selector: "isReturnNode",
  32917. protocol: 'testing',
  32918. fn: function (){
  32919. var self=this;
  32920. return false;
  32921. },
  32922. //>>excludeStart("ide", pragmas.excludeIdeData);
  32923. args: [],
  32924. source: "isReturnNode\x0a\x09^ false",
  32925. referencedClasses: [],
  32926. //>>excludeEnd("ide");
  32927. messageSends: []
  32928. }),
  32929. $globals.Node);
  32930. $core.addMethod(
  32931. $core.method({
  32932. selector: "isSendNode",
  32933. protocol: 'testing',
  32934. fn: function (){
  32935. var self=this;
  32936. return false;
  32937. },
  32938. //>>excludeStart("ide", pragmas.excludeIdeData);
  32939. args: [],
  32940. source: "isSendNode\x0a\x09^ false",
  32941. referencedClasses: [],
  32942. //>>excludeEnd("ide");
  32943. messageSends: []
  32944. }),
  32945. $globals.Node);
  32946. $core.addMethod(
  32947. $core.method({
  32948. selector: "isSequenceNode",
  32949. protocol: 'testing',
  32950. fn: function (){
  32951. var self=this;
  32952. return false;
  32953. },
  32954. //>>excludeStart("ide", pragmas.excludeIdeData);
  32955. args: [],
  32956. source: "isSequenceNode\x0a\x09^ false",
  32957. referencedClasses: [],
  32958. //>>excludeEnd("ide");
  32959. messageSends: []
  32960. }),
  32961. $globals.Node);
  32962. $core.addMethod(
  32963. $core.method({
  32964. selector: "isValueNode",
  32965. protocol: 'testing',
  32966. fn: function (){
  32967. var self=this;
  32968. return false;
  32969. },
  32970. //>>excludeStart("ide", pragmas.excludeIdeData);
  32971. args: [],
  32972. source: "isValueNode\x0a\x09^ false",
  32973. referencedClasses: [],
  32974. //>>excludeEnd("ide");
  32975. messageSends: []
  32976. }),
  32977. $globals.Node);
  32978. $core.addMethod(
  32979. $core.method({
  32980. selector: "isVariableNode",
  32981. protocol: 'testing',
  32982. fn: function (){
  32983. var self=this;
  32984. return false;
  32985. },
  32986. //>>excludeStart("ide", pragmas.excludeIdeData);
  32987. args: [],
  32988. source: "isVariableNode\x0a\x09^ false",
  32989. referencedClasses: [],
  32990. //>>excludeEnd("ide");
  32991. messageSends: []
  32992. }),
  32993. $globals.Node);
  32994. $core.addMethod(
  32995. $core.method({
  32996. selector: "method",
  32997. protocol: 'accessing',
  32998. fn: function (){
  32999. var self=this;
  33000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33001. return $core.withContext(function($ctx1) {
  33002. //>>excludeEnd("ctx");
  33003. var $2,$1,$receiver;
  33004. $2=self._parent();
  33005. if(($receiver = $2) == null || $receiver.isNil){
  33006. $1=$2;
  33007. } else {
  33008. var node;
  33009. node=$receiver;
  33010. $1=$recv(node)._method();
  33011. };
  33012. return $1;
  33013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33014. }, function($ctx1) {$ctx1.fill(self,"method",{},$globals.Node)});
  33015. //>>excludeEnd("ctx");
  33016. },
  33017. //>>excludeStart("ide", pragmas.excludeIdeData);
  33018. args: [],
  33019. source: "method\x0a\x09^ self parent ifNotNil: [ :node | node method ]",
  33020. referencedClasses: [],
  33021. //>>excludeEnd("ide");
  33022. messageSends: ["ifNotNil:", "parent", "method"]
  33023. }),
  33024. $globals.Node);
  33025. $core.addMethod(
  33026. $core.method({
  33027. selector: "navigationNodeAt:ifAbsent:",
  33028. protocol: 'accessing',
  33029. fn: function (aPoint,aBlock){
  33030. var self=this;
  33031. var children;
  33032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33033. return $core.withContext(function($ctx1) {
  33034. //>>excludeEnd("ctx");
  33035. var $1,$4,$3,$2;
  33036. var $early={};
  33037. try {
  33038. children=$recv(self._allNodes())._select_((function(each){
  33039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33040. return $core.withContext(function($ctx2) {
  33041. //>>excludeEnd("ctx");
  33042. return $recv($recv(each)._isNavigationNode())._and_((function(){
  33043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33044. return $core.withContext(function($ctx3) {
  33045. //>>excludeEnd("ctx");
  33046. return $recv(each)._inPosition_(aPoint);
  33047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33048. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  33049. //>>excludeEnd("ctx");
  33050. }));
  33051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33052. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  33053. //>>excludeEnd("ctx");
  33054. }));
  33055. $recv(children)._ifEmpty_((function(){
  33056. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33057. return $core.withContext(function($ctx2) {
  33058. //>>excludeEnd("ctx");
  33059. $1=$recv(aBlock)._value();
  33060. throw $early=[$1];
  33061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33062. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  33063. //>>excludeEnd("ctx");
  33064. }));
  33065. $2=$recv($recv($recv(children)._asArray())._sort_((function(a,b){
  33066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33067. return $core.withContext(function($ctx2) {
  33068. //>>excludeEnd("ctx");
  33069. $4=$recv(a)._positionStart();
  33070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33071. $ctx2.sendIdx["positionStart"]=1;
  33072. //>>excludeEnd("ctx");
  33073. $3=$recv($4)._dist_(aPoint);
  33074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33075. $ctx2.sendIdx["dist:"]=1;
  33076. //>>excludeEnd("ctx");
  33077. return $recv($3).__lt_eq($recv($recv(b)._positionStart())._dist_(aPoint));
  33078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33079. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,4)});
  33080. //>>excludeEnd("ctx");
  33081. })))._first();
  33082. return $2;
  33083. }
  33084. catch(e) {if(e===$early)return e[0]; throw e}
  33085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33086. }, function($ctx1) {$ctx1.fill(self,"navigationNodeAt:ifAbsent:",{aPoint:aPoint,aBlock:aBlock,children:children},$globals.Node)});
  33087. //>>excludeEnd("ctx");
  33088. },
  33089. //>>excludeStart("ide", pragmas.excludeIdeData);
  33090. args: ["aPoint", "aBlock"],
  33091. 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",
  33092. referencedClasses: [],
  33093. //>>excludeEnd("ide");
  33094. messageSends: ["select:", "allNodes", "and:", "isNavigationNode", "inPosition:", "ifEmpty:", "value", "first", "sort:", "asArray", "<=", "dist:", "positionStart"]
  33095. }),
  33096. $globals.Node);
  33097. $core.addMethod(
  33098. $core.method({
  33099. selector: "nextChild",
  33100. protocol: 'accessing',
  33101. fn: function (){
  33102. var self=this;
  33103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33104. return $core.withContext(function($ctx1) {
  33105. //>>excludeEnd("ctx");
  33106. var $3,$2,$1;
  33107. $3=self._nodes();
  33108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33109. $ctx1.sendIdx["nodes"]=1;
  33110. //>>excludeEnd("ctx");
  33111. $2=$recv($3)._isEmpty();
  33112. if($core.assert($2)){
  33113. $1=self;
  33114. } else {
  33115. $1=$recv($recv(self._nodes())._first())._nextChild();
  33116. };
  33117. return $1;
  33118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33119. }, function($ctx1) {$ctx1.fill(self,"nextChild",{},$globals.Node)});
  33120. //>>excludeEnd("ctx");
  33121. },
  33122. //>>excludeStart("ide", pragmas.excludeIdeData);
  33123. args: [],
  33124. 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 ]",
  33125. referencedClasses: [],
  33126. //>>excludeEnd("ide");
  33127. messageSends: ["ifTrue:ifFalse:", "isEmpty", "nodes", "nextChild", "first"]
  33128. }),
  33129. $globals.Node);
  33130. $core.addMethod(
  33131. $core.method({
  33132. selector: "nextNode",
  33133. protocol: 'accessing',
  33134. fn: function (){
  33135. var self=this;
  33136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33137. return $core.withContext(function($ctx1) {
  33138. //>>excludeEnd("ctx");
  33139. var $2,$1,$receiver;
  33140. $2=self._parent();
  33141. if(($receiver = $2) == null || $receiver.isNil){
  33142. $1=$2;
  33143. } else {
  33144. var node;
  33145. node=$receiver;
  33146. $1=$recv(node)._nextNode_(self);
  33147. };
  33148. return $1;
  33149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33150. }, function($ctx1) {$ctx1.fill(self,"nextNode",{},$globals.Node)});
  33151. //>>excludeEnd("ctx");
  33152. },
  33153. //>>excludeStart("ide", pragmas.excludeIdeData);
  33154. args: [],
  33155. source: "nextNode\x0a\x09^ self parent ifNotNil: [ :node |\x0a\x09\x09node nextNode: self ]",
  33156. referencedClasses: [],
  33157. //>>excludeEnd("ide");
  33158. messageSends: ["ifNotNil:", "parent", "nextNode:"]
  33159. }),
  33160. $globals.Node);
  33161. $core.addMethod(
  33162. $core.method({
  33163. selector: "nextNode:",
  33164. protocol: 'accessing',
  33165. fn: function (aNode){
  33166. var self=this;
  33167. var next;
  33168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33169. return $core.withContext(function($ctx1) {
  33170. //>>excludeEnd("ctx");
  33171. var $1,$2;
  33172. var $early={};
  33173. try {
  33174. $1=self._nodes();
  33175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33176. $ctx1.sendIdx["nodes"]=1;
  33177. //>>excludeEnd("ctx");
  33178. next=$recv($1)._at_ifAbsent_($recv($recv(self._nodes())._indexOf_(aNode)).__plus((1)),(function(){
  33179. throw $early=[self];
  33180. }));
  33181. $2=$recv(next)._nextChild();
  33182. return $2;
  33183. }
  33184. catch(e) {if(e===$early)return e[0]; throw e}
  33185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33186. }, function($ctx1) {$ctx1.fill(self,"nextNode:",{aNode:aNode,next:next},$globals.Node)});
  33187. //>>excludeEnd("ctx");
  33188. },
  33189. //>>excludeStart("ide", pragmas.excludeIdeData);
  33190. args: ["aNode"],
  33191. 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",
  33192. referencedClasses: [],
  33193. //>>excludeEnd("ide");
  33194. messageSends: ["at:ifAbsent:", "nodes", "+", "indexOf:", "nextChild"]
  33195. }),
  33196. $globals.Node);
  33197. $core.addMethod(
  33198. $core.method({
  33199. selector: "nodes",
  33200. protocol: 'accessing',
  33201. fn: function (){
  33202. var self=this;
  33203. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  33204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33205. return $core.withContext(function($ctx1) {
  33206. //>>excludeEnd("ctx");
  33207. var $2,$1,$receiver;
  33208. $2=self["@nodes"];
  33209. if(($receiver = $2) == null || $receiver.isNil){
  33210. self["@nodes"]=$recv($Array())._new();
  33211. $1=self["@nodes"];
  33212. } else {
  33213. $1=$2;
  33214. };
  33215. return $1;
  33216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33217. }, function($ctx1) {$ctx1.fill(self,"nodes",{},$globals.Node)});
  33218. //>>excludeEnd("ctx");
  33219. },
  33220. //>>excludeStart("ide", pragmas.excludeIdeData);
  33221. args: [],
  33222. source: "nodes\x0a\x09^ nodes ifNil: [ nodes := Array new ]",
  33223. referencedClasses: ["Array"],
  33224. //>>excludeEnd("ide");
  33225. messageSends: ["ifNil:", "new"]
  33226. }),
  33227. $globals.Node);
  33228. $core.addMethod(
  33229. $core.method({
  33230. selector: "nodes:",
  33231. protocol: 'building',
  33232. fn: function (aCollection){
  33233. var self=this;
  33234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33235. return $core.withContext(function($ctx1) {
  33236. //>>excludeEnd("ctx");
  33237. self["@nodes"]=aCollection;
  33238. $recv(aCollection)._do_((function(each){
  33239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33240. return $core.withContext(function($ctx2) {
  33241. //>>excludeEnd("ctx");
  33242. return $recv(each)._parent_(self);
  33243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33244. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  33245. //>>excludeEnd("ctx");
  33246. }));
  33247. return self;
  33248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33249. }, function($ctx1) {$ctx1.fill(self,"nodes:",{aCollection:aCollection},$globals.Node)});
  33250. //>>excludeEnd("ctx");
  33251. },
  33252. //>>excludeStart("ide", pragmas.excludeIdeData);
  33253. args: ["aCollection"],
  33254. source: "nodes: aCollection\x0a\x09nodes := aCollection.\x0a\x09aCollection do: [ :each | each parent: self ]",
  33255. referencedClasses: [],
  33256. //>>excludeEnd("ide");
  33257. messageSends: ["do:", "parent:"]
  33258. }),
  33259. $globals.Node);
  33260. $core.addMethod(
  33261. $core.method({
  33262. selector: "parent",
  33263. protocol: 'accessing',
  33264. fn: function (){
  33265. var self=this;
  33266. var $1;
  33267. $1=self["@parent"];
  33268. return $1;
  33269. },
  33270. //>>excludeStart("ide", pragmas.excludeIdeData);
  33271. args: [],
  33272. source: "parent\x0a\x09^ parent",
  33273. referencedClasses: [],
  33274. //>>excludeEnd("ide");
  33275. messageSends: []
  33276. }),
  33277. $globals.Node);
  33278. $core.addMethod(
  33279. $core.method({
  33280. selector: "parent:",
  33281. protocol: 'accessing',
  33282. fn: function (aNode){
  33283. var self=this;
  33284. self["@parent"]=aNode;
  33285. return self;
  33286. },
  33287. //>>excludeStart("ide", pragmas.excludeIdeData);
  33288. args: ["aNode"],
  33289. source: "parent: aNode\x0a\x09parent := aNode",
  33290. referencedClasses: [],
  33291. //>>excludeEnd("ide");
  33292. messageSends: []
  33293. }),
  33294. $globals.Node);
  33295. $core.addMethod(
  33296. $core.method({
  33297. selector: "position",
  33298. protocol: 'accessing',
  33299. fn: function (){
  33300. var self=this;
  33301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33302. return $core.withContext(function($ctx1) {
  33303. //>>excludeEnd("ctx");
  33304. var $2,$3,$1,$receiver;
  33305. $2=self["@position"];
  33306. if(($receiver = $2) == null || $receiver.isNil){
  33307. $3=self._parent();
  33308. if(($receiver = $3) == null || $receiver.isNil){
  33309. $1=$3;
  33310. } else {
  33311. var node;
  33312. node=$receiver;
  33313. $1=$recv(node)._position();
  33314. };
  33315. } else {
  33316. $1=$2;
  33317. };
  33318. return $1;
  33319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33320. }, function($ctx1) {$ctx1.fill(self,"position",{},$globals.Node)});
  33321. //>>excludeEnd("ctx");
  33322. },
  33323. //>>excludeStart("ide", pragmas.excludeIdeData);
  33324. args: [],
  33325. 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 ] ]",
  33326. referencedClasses: [],
  33327. //>>excludeEnd("ide");
  33328. messageSends: ["ifNil:", "ifNotNil:", "parent", "position"]
  33329. }),
  33330. $globals.Node);
  33331. $core.addMethod(
  33332. $core.method({
  33333. selector: "position:",
  33334. protocol: 'accessing',
  33335. fn: function (aPosition){
  33336. var self=this;
  33337. self["@position"]=aPosition;
  33338. return self;
  33339. },
  33340. //>>excludeStart("ide", pragmas.excludeIdeData);
  33341. args: ["aPosition"],
  33342. source: "position: aPosition\x0a\x09position := aPosition",
  33343. referencedClasses: [],
  33344. //>>excludeEnd("ide");
  33345. messageSends: []
  33346. }),
  33347. $globals.Node);
  33348. $core.addMethod(
  33349. $core.method({
  33350. selector: "positionEnd",
  33351. protocol: 'accessing',
  33352. fn: function (){
  33353. var self=this;
  33354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33355. return $core.withContext(function($ctx1) {
  33356. //>>excludeEnd("ctx");
  33357. var $2,$7,$6,$5,$4,$3,$1;
  33358. $2=self._positionStart();
  33359. $7=self._source();
  33360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33361. $ctx1.sendIdx["source"]=1;
  33362. //>>excludeEnd("ctx");
  33363. $6=$recv($7)._lines();
  33364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33365. $ctx1.sendIdx["lines"]=1;
  33366. //>>excludeEnd("ctx");
  33367. $5=$recv($6)._size();
  33368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33369. $ctx1.sendIdx["size"]=1;
  33370. //>>excludeEnd("ctx");
  33371. $4=$recv($5).__minus((1));
  33372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33373. $ctx1.sendIdx["-"]=1;
  33374. //>>excludeEnd("ctx");
  33375. $3=$recv($4).__at($recv($recv($recv($recv(self._source())._lines())._last())._size()).__minus((1)));
  33376. $1=$recv($2).__plus($3);
  33377. return $1;
  33378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33379. }, function($ctx1) {$ctx1.fill(self,"positionEnd",{},$globals.Node)});
  33380. //>>excludeEnd("ctx");
  33381. },
  33382. //>>excludeStart("ide", pragmas.excludeIdeData);
  33383. args: [],
  33384. source: "positionEnd\x0a\x09^ self positionStart + ((self source lines size - 1) @ (self source lines last size - 1))",
  33385. referencedClasses: [],
  33386. //>>excludeEnd("ide");
  33387. messageSends: ["+", "positionStart", "@", "-", "size", "lines", "source", "last"]
  33388. }),
  33389. $globals.Node);
  33390. $core.addMethod(
  33391. $core.method({
  33392. selector: "positionStart",
  33393. protocol: 'accessing',
  33394. fn: function (){
  33395. var self=this;
  33396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33397. return $core.withContext(function($ctx1) {
  33398. //>>excludeEnd("ctx");
  33399. var $1;
  33400. $1=self._position();
  33401. return $1;
  33402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33403. }, function($ctx1) {$ctx1.fill(self,"positionStart",{},$globals.Node)});
  33404. //>>excludeEnd("ctx");
  33405. },
  33406. //>>excludeStart("ide", pragmas.excludeIdeData);
  33407. args: [],
  33408. source: "positionStart\x0a\x09^ self position",
  33409. referencedClasses: [],
  33410. //>>excludeEnd("ide");
  33411. messageSends: ["position"]
  33412. }),
  33413. $globals.Node);
  33414. $core.addMethod(
  33415. $core.method({
  33416. selector: "postCopy",
  33417. protocol: 'copying',
  33418. fn: function (){
  33419. var self=this;
  33420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33421. return $core.withContext(function($ctx1) {
  33422. //>>excludeEnd("ctx");
  33423. (
  33424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33425. $ctx1.supercall = true,
  33426. //>>excludeEnd("ctx");
  33427. $globals.Node.superclass.fn.prototype._postCopy.apply($recv(self), []));
  33428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33429. $ctx1.supercall = false;
  33430. //>>excludeEnd("ctx");;
  33431. $recv(self._nodes())._do_((function(each){
  33432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33433. return $core.withContext(function($ctx2) {
  33434. //>>excludeEnd("ctx");
  33435. return $recv(each)._parent_(self);
  33436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33437. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  33438. //>>excludeEnd("ctx");
  33439. }));
  33440. return self;
  33441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33442. }, function($ctx1) {$ctx1.fill(self,"postCopy",{},$globals.Node)});
  33443. //>>excludeEnd("ctx");
  33444. },
  33445. //>>excludeStart("ide", pragmas.excludeIdeData);
  33446. args: [],
  33447. source: "postCopy\x0a\x09super postCopy.\x0a\x09self nodes do: [ :each | each parent: self ]",
  33448. referencedClasses: [],
  33449. //>>excludeEnd("ide");
  33450. messageSends: ["postCopy", "do:", "nodes", "parent:"]
  33451. }),
  33452. $globals.Node);
  33453. $core.addMethod(
  33454. $core.method({
  33455. selector: "requiresSmalltalkContext",
  33456. protocol: 'testing',
  33457. fn: function (){
  33458. var self=this;
  33459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33460. return $core.withContext(function($ctx1) {
  33461. //>>excludeEnd("ctx");
  33462. var $1;
  33463. $1=$recv($recv(self._nodes())._detect_ifNone_((function(each){
  33464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33465. return $core.withContext(function($ctx2) {
  33466. //>>excludeEnd("ctx");
  33467. return $recv(each)._requiresSmalltalkContext();
  33468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33469. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  33470. //>>excludeEnd("ctx");
  33471. }),(function(){
  33472. return nil;
  33473. })))._notNil();
  33474. return $1;
  33475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33476. }, function($ctx1) {$ctx1.fill(self,"requiresSmalltalkContext",{},$globals.Node)});
  33477. //>>excludeEnd("ctx");
  33478. },
  33479. //>>excludeStart("ide", pragmas.excludeIdeData);
  33480. args: [],
  33481. 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",
  33482. referencedClasses: [],
  33483. //>>excludeEnd("ide");
  33484. messageSends: ["notNil", "detect:ifNone:", "nodes", "requiresSmalltalkContext"]
  33485. }),
  33486. $globals.Node);
  33487. $core.addMethod(
  33488. $core.method({
  33489. selector: "shouldBeAliased",
  33490. protocol: 'accessing',
  33491. fn: function (){
  33492. var self=this;
  33493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33494. return $core.withContext(function($ctx1) {
  33495. //>>excludeEnd("ctx");
  33496. var $2,$1,$receiver;
  33497. $2=self["@shouldBeAliased"];
  33498. if(($receiver = $2) == null || $receiver.isNil){
  33499. $1=false;
  33500. } else {
  33501. $1=$2;
  33502. };
  33503. return $1;
  33504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33505. }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{},$globals.Node)});
  33506. //>>excludeEnd("ctx");
  33507. },
  33508. //>>excludeStart("ide", pragmas.excludeIdeData);
  33509. args: [],
  33510. source: "shouldBeAliased\x0a\x09^ shouldBeAliased ifNil: [ false ]",
  33511. referencedClasses: [],
  33512. //>>excludeEnd("ide");
  33513. messageSends: ["ifNil:"]
  33514. }),
  33515. $globals.Node);
  33516. $core.addMethod(
  33517. $core.method({
  33518. selector: "shouldBeAliased:",
  33519. protocol: 'accessing',
  33520. fn: function (aBoolean){
  33521. var self=this;
  33522. self["@shouldBeAliased"]=aBoolean;
  33523. return self;
  33524. },
  33525. //>>excludeStart("ide", pragmas.excludeIdeData);
  33526. args: ["aBoolean"],
  33527. source: "shouldBeAliased: aBoolean\x0a\x09shouldBeAliased := aBoolean",
  33528. referencedClasses: [],
  33529. //>>excludeEnd("ide");
  33530. messageSends: []
  33531. }),
  33532. $globals.Node);
  33533. $core.addMethod(
  33534. $core.method({
  33535. selector: "shouldBeInlined",
  33536. protocol: 'accessing',
  33537. fn: function (){
  33538. var self=this;
  33539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33540. return $core.withContext(function($ctx1) {
  33541. //>>excludeEnd("ctx");
  33542. var $2,$1,$receiver;
  33543. $2=self["@shouldBeInlined"];
  33544. if(($receiver = $2) == null || $receiver.isNil){
  33545. $1=false;
  33546. } else {
  33547. $1=$2;
  33548. };
  33549. return $1;
  33550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33551. }, function($ctx1) {$ctx1.fill(self,"shouldBeInlined",{},$globals.Node)});
  33552. //>>excludeEnd("ctx");
  33553. },
  33554. //>>excludeStart("ide", pragmas.excludeIdeData);
  33555. args: [],
  33556. source: "shouldBeInlined\x0a\x09^ shouldBeInlined ifNil: [ false ]",
  33557. referencedClasses: [],
  33558. //>>excludeEnd("ide");
  33559. messageSends: ["ifNil:"]
  33560. }),
  33561. $globals.Node);
  33562. $core.addMethod(
  33563. $core.method({
  33564. selector: "shouldBeInlined:",
  33565. protocol: 'accessing',
  33566. fn: function (aBoolean){
  33567. var self=this;
  33568. self["@shouldBeInlined"]=aBoolean;
  33569. return self;
  33570. },
  33571. //>>excludeStart("ide", pragmas.excludeIdeData);
  33572. args: ["aBoolean"],
  33573. source: "shouldBeInlined: aBoolean\x0a\x09shouldBeInlined := aBoolean",
  33574. referencedClasses: [],
  33575. //>>excludeEnd("ide");
  33576. messageSends: []
  33577. }),
  33578. $globals.Node);
  33579. $core.addMethod(
  33580. $core.method({
  33581. selector: "size",
  33582. protocol: 'accessing',
  33583. fn: function (){
  33584. var self=this;
  33585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33586. return $core.withContext(function($ctx1) {
  33587. //>>excludeEnd("ctx");
  33588. var $1;
  33589. $1=$recv(self._source())._size();
  33590. return $1;
  33591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33592. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Node)});
  33593. //>>excludeEnd("ctx");
  33594. },
  33595. //>>excludeStart("ide", pragmas.excludeIdeData);
  33596. args: [],
  33597. source: "size\x0a\x09^ self source size",
  33598. referencedClasses: [],
  33599. //>>excludeEnd("ide");
  33600. messageSends: ["size", "source"]
  33601. }),
  33602. $globals.Node);
  33603. $core.addMethod(
  33604. $core.method({
  33605. selector: "source",
  33606. protocol: 'accessing',
  33607. fn: function (){
  33608. var self=this;
  33609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33610. return $core.withContext(function($ctx1) {
  33611. //>>excludeEnd("ctx");
  33612. var $2,$1,$receiver;
  33613. $2=self["@source"];
  33614. if(($receiver = $2) == null || $receiver.isNil){
  33615. $1="";
  33616. } else {
  33617. $1=$2;
  33618. };
  33619. return $1;
  33620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33621. }, function($ctx1) {$ctx1.fill(self,"source",{},$globals.Node)});
  33622. //>>excludeEnd("ctx");
  33623. },
  33624. //>>excludeStart("ide", pragmas.excludeIdeData);
  33625. args: [],
  33626. source: "source\x0a\x09^ source ifNil: [ '' ]",
  33627. referencedClasses: [],
  33628. //>>excludeEnd("ide");
  33629. messageSends: ["ifNil:"]
  33630. }),
  33631. $globals.Node);
  33632. $core.addMethod(
  33633. $core.method({
  33634. selector: "source:",
  33635. protocol: 'accessing',
  33636. fn: function (aString){
  33637. var self=this;
  33638. self["@source"]=aString;
  33639. return self;
  33640. },
  33641. //>>excludeStart("ide", pragmas.excludeIdeData);
  33642. args: ["aString"],
  33643. source: "source: aString\x0a\x09source := aString",
  33644. referencedClasses: [],
  33645. //>>excludeEnd("ide");
  33646. messageSends: []
  33647. }),
  33648. $globals.Node);
  33649. $core.addMethod(
  33650. $core.method({
  33651. selector: "stopOnStepping",
  33652. protocol: 'testing',
  33653. fn: function (){
  33654. var self=this;
  33655. return false;
  33656. },
  33657. //>>excludeStart("ide", pragmas.excludeIdeData);
  33658. args: [],
  33659. source: "stopOnStepping\x0a\x09^ false",
  33660. referencedClasses: [],
  33661. //>>excludeEnd("ide");
  33662. messageSends: []
  33663. }),
  33664. $globals.Node);
  33665. $core.addMethod(
  33666. $core.method({
  33667. selector: "subtreeNeedsAliasing",
  33668. protocol: 'testing',
  33669. fn: function (){
  33670. var self=this;
  33671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33672. return $core.withContext(function($ctx1) {
  33673. //>>excludeEnd("ctx");
  33674. var $1;
  33675. $1=$recv($recv(self._shouldBeAliased())._or_((function(){
  33676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33677. return $core.withContext(function($ctx2) {
  33678. //>>excludeEnd("ctx");
  33679. return self._shouldBeInlined();
  33680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33681. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  33682. //>>excludeEnd("ctx");
  33683. })))._or_((function(){
  33684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33685. return $core.withContext(function($ctx2) {
  33686. //>>excludeEnd("ctx");
  33687. return $recv(self._nodes())._anySatisfy_((function(each){
  33688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33689. return $core.withContext(function($ctx3) {
  33690. //>>excludeEnd("ctx");
  33691. return $recv(each)._subtreeNeedsAliasing();
  33692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33693. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,3)});
  33694. //>>excludeEnd("ctx");
  33695. }));
  33696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33697. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  33698. //>>excludeEnd("ctx");
  33699. }));
  33700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33701. $ctx1.sendIdx["or:"]=1;
  33702. //>>excludeEnd("ctx");
  33703. return $1;
  33704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33705. }, function($ctx1) {$ctx1.fill(self,"subtreeNeedsAliasing",{},$globals.Node)});
  33706. //>>excludeEnd("ctx");
  33707. },
  33708. //>>excludeStart("ide", pragmas.excludeIdeData);
  33709. args: [],
  33710. source: "subtreeNeedsAliasing\x0a\x09^ (self shouldBeAliased or: [ self shouldBeInlined ]) or: [\x0a\x09\x09self nodes anySatisfy: [ :each | each subtreeNeedsAliasing ] ]",
  33711. referencedClasses: [],
  33712. //>>excludeEnd("ide");
  33713. messageSends: ["or:", "shouldBeAliased", "shouldBeInlined", "anySatisfy:", "nodes", "subtreeNeedsAliasing"]
  33714. }),
  33715. $globals.Node);
  33716. $core.addClass('AssignmentNode', $globals.Node, ['left', 'right'], 'Compiler-AST');
  33717. //>>excludeStart("ide", pragmas.excludeIdeData);
  33718. $globals.AssignmentNode.comment="I represent an assignment node.";
  33719. //>>excludeEnd("ide");
  33720. $core.addMethod(
  33721. $core.method({
  33722. selector: "accept:",
  33723. protocol: 'visiting',
  33724. fn: function (aVisitor){
  33725. var self=this;
  33726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33727. return $core.withContext(function($ctx1) {
  33728. //>>excludeEnd("ctx");
  33729. var $1;
  33730. $1=$recv(aVisitor)._visitAssignmentNode_(self);
  33731. return $1;
  33732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33733. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.AssignmentNode)});
  33734. //>>excludeEnd("ctx");
  33735. },
  33736. //>>excludeStart("ide", pragmas.excludeIdeData);
  33737. args: ["aVisitor"],
  33738. source: "accept: aVisitor\x0a\x09^ aVisitor visitAssignmentNode: self",
  33739. referencedClasses: [],
  33740. //>>excludeEnd("ide");
  33741. messageSends: ["visitAssignmentNode:"]
  33742. }),
  33743. $globals.AssignmentNode);
  33744. $core.addMethod(
  33745. $core.method({
  33746. selector: "isAssignmentNode",
  33747. protocol: 'testing',
  33748. fn: function (){
  33749. var self=this;
  33750. return true;
  33751. },
  33752. //>>excludeStart("ide", pragmas.excludeIdeData);
  33753. args: [],
  33754. source: "isAssignmentNode\x0a\x09^ true",
  33755. referencedClasses: [],
  33756. //>>excludeEnd("ide");
  33757. messageSends: []
  33758. }),
  33759. $globals.AssignmentNode);
  33760. $core.addMethod(
  33761. $core.method({
  33762. selector: "left",
  33763. protocol: 'accessing',
  33764. fn: function (){
  33765. var self=this;
  33766. var $1;
  33767. $1=self["@left"];
  33768. return $1;
  33769. },
  33770. //>>excludeStart("ide", pragmas.excludeIdeData);
  33771. args: [],
  33772. source: "left\x0a\x09^ left",
  33773. referencedClasses: [],
  33774. //>>excludeEnd("ide");
  33775. messageSends: []
  33776. }),
  33777. $globals.AssignmentNode);
  33778. $core.addMethod(
  33779. $core.method({
  33780. selector: "left:",
  33781. protocol: 'accessing',
  33782. fn: function (aNode){
  33783. var self=this;
  33784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33785. return $core.withContext(function($ctx1) {
  33786. //>>excludeEnd("ctx");
  33787. self["@left"]=aNode;
  33788. $recv(aNode)._parent_(self);
  33789. return self;
  33790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33791. }, function($ctx1) {$ctx1.fill(self,"left:",{aNode:aNode},$globals.AssignmentNode)});
  33792. //>>excludeEnd("ctx");
  33793. },
  33794. //>>excludeStart("ide", pragmas.excludeIdeData);
  33795. args: ["aNode"],
  33796. source: "left: aNode\x0a\x09left := aNode.\x0a\x09aNode parent: self",
  33797. referencedClasses: [],
  33798. //>>excludeEnd("ide");
  33799. messageSends: ["parent:"]
  33800. }),
  33801. $globals.AssignmentNode);
  33802. $core.addMethod(
  33803. $core.method({
  33804. selector: "nodes",
  33805. protocol: 'accessing',
  33806. fn: function (){
  33807. var self=this;
  33808. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  33809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33810. return $core.withContext(function($ctx1) {
  33811. //>>excludeEnd("ctx");
  33812. var $1;
  33813. $1=$recv($Array())._with_with_(self._left(),self._right());
  33814. return $1;
  33815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33816. }, function($ctx1) {$ctx1.fill(self,"nodes",{},$globals.AssignmentNode)});
  33817. //>>excludeEnd("ctx");
  33818. },
  33819. //>>excludeStart("ide", pragmas.excludeIdeData);
  33820. args: [],
  33821. source: "nodes\x0a\x09^ Array with: self left with: self right",
  33822. referencedClasses: ["Array"],
  33823. //>>excludeEnd("ide");
  33824. messageSends: ["with:with:", "left", "right"]
  33825. }),
  33826. $globals.AssignmentNode);
  33827. $core.addMethod(
  33828. $core.method({
  33829. selector: "right",
  33830. protocol: 'accessing',
  33831. fn: function (){
  33832. var self=this;
  33833. var $1;
  33834. $1=self["@right"];
  33835. return $1;
  33836. },
  33837. //>>excludeStart("ide", pragmas.excludeIdeData);
  33838. args: [],
  33839. source: "right\x0a\x09^ right",
  33840. referencedClasses: [],
  33841. //>>excludeEnd("ide");
  33842. messageSends: []
  33843. }),
  33844. $globals.AssignmentNode);
  33845. $core.addMethod(
  33846. $core.method({
  33847. selector: "right:",
  33848. protocol: 'accessing',
  33849. fn: function (aNode){
  33850. var self=this;
  33851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33852. return $core.withContext(function($ctx1) {
  33853. //>>excludeEnd("ctx");
  33854. self["@right"]=aNode;
  33855. $recv(aNode)._parent_(self);
  33856. return self;
  33857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33858. }, function($ctx1) {$ctx1.fill(self,"right:",{aNode:aNode},$globals.AssignmentNode)});
  33859. //>>excludeEnd("ctx");
  33860. },
  33861. //>>excludeStart("ide", pragmas.excludeIdeData);
  33862. args: ["aNode"],
  33863. source: "right: aNode\x0a\x09right := aNode.\x0a\x09aNode parent: self",
  33864. referencedClasses: [],
  33865. //>>excludeEnd("ide");
  33866. messageSends: ["parent:"]
  33867. }),
  33868. $globals.AssignmentNode);
  33869. $core.addMethod(
  33870. $core.method({
  33871. selector: "shouldBeAliased",
  33872. protocol: 'testing',
  33873. fn: function (){
  33874. var self=this;
  33875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33876. return $core.withContext(function($ctx1) {
  33877. //>>excludeEnd("ctx");
  33878. var $2,$1;
  33879. $2=(
  33880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33881. $ctx1.supercall = true,
  33882. //>>excludeEnd("ctx");
  33883. $globals.AssignmentNode.superclass.fn.prototype._shouldBeAliased.apply($recv(self), []));
  33884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33885. $ctx1.supercall = false;
  33886. //>>excludeEnd("ctx");;
  33887. $1=$recv($2)._or_((function(){
  33888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33889. return $core.withContext(function($ctx2) {
  33890. //>>excludeEnd("ctx");
  33891. return self._isReferenced();
  33892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33893. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  33894. //>>excludeEnd("ctx");
  33895. }));
  33896. return $1;
  33897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33898. }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{},$globals.AssignmentNode)});
  33899. //>>excludeEnd("ctx");
  33900. },
  33901. //>>excludeStart("ide", pragmas.excludeIdeData);
  33902. args: [],
  33903. source: "shouldBeAliased\x0a\x09^ super shouldBeAliased or: [ self isReferenced ]",
  33904. referencedClasses: [],
  33905. //>>excludeEnd("ide");
  33906. messageSends: ["or:", "shouldBeAliased", "isReferenced"]
  33907. }),
  33908. $globals.AssignmentNode);
  33909. $core.addClass('BlockNode', $globals.Node, ['parameters', 'scope'], 'Compiler-AST');
  33910. //>>excludeStart("ide", pragmas.excludeIdeData);
  33911. $globals.BlockNode.comment="I represent an block closure node.";
  33912. //>>excludeEnd("ide");
  33913. $core.addMethod(
  33914. $core.method({
  33915. selector: "accept:",
  33916. protocol: 'visiting',
  33917. fn: function (aVisitor){
  33918. var self=this;
  33919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33920. return $core.withContext(function($ctx1) {
  33921. //>>excludeEnd("ctx");
  33922. var $1;
  33923. $1=$recv(aVisitor)._visitBlockNode_(self);
  33924. return $1;
  33925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33926. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.BlockNode)});
  33927. //>>excludeEnd("ctx");
  33928. },
  33929. //>>excludeStart("ide", pragmas.excludeIdeData);
  33930. args: ["aVisitor"],
  33931. source: "accept: aVisitor\x0a\x09^ aVisitor visitBlockNode: self",
  33932. referencedClasses: [],
  33933. //>>excludeEnd("ide");
  33934. messageSends: ["visitBlockNode:"]
  33935. }),
  33936. $globals.BlockNode);
  33937. $core.addMethod(
  33938. $core.method({
  33939. selector: "isBlockNode",
  33940. protocol: 'testing',
  33941. fn: function (){
  33942. var self=this;
  33943. return true;
  33944. },
  33945. //>>excludeStart("ide", pragmas.excludeIdeData);
  33946. args: [],
  33947. source: "isBlockNode\x0a\x09^ true",
  33948. referencedClasses: [],
  33949. //>>excludeEnd("ide");
  33950. messageSends: []
  33951. }),
  33952. $globals.BlockNode);
  33953. $core.addMethod(
  33954. $core.method({
  33955. selector: "nextChild",
  33956. protocol: 'accessing',
  33957. fn: function (){
  33958. var self=this;
  33959. return self;
  33960. },
  33961. //>>excludeStart("ide", pragmas.excludeIdeData);
  33962. args: [],
  33963. source: "nextChild\x0a\x09\x22Answer the receiver as we want to avoid eager evaluation\x22\x0a\x09\x0a\x09^ self",
  33964. referencedClasses: [],
  33965. //>>excludeEnd("ide");
  33966. messageSends: []
  33967. }),
  33968. $globals.BlockNode);
  33969. $core.addMethod(
  33970. $core.method({
  33971. selector: "nextNode:",
  33972. protocol: 'accessing',
  33973. fn: function (aNode){
  33974. var self=this;
  33975. return self;
  33976. },
  33977. //>>excludeStart("ide", pragmas.excludeIdeData);
  33978. args: ["aNode"],
  33979. source: "nextNode: aNode\x0a\x09\x22Answer the receiver as we want to avoid eager evaluation\x22\x0a\x09\x0a\x09^ self",
  33980. referencedClasses: [],
  33981. //>>excludeEnd("ide");
  33982. messageSends: []
  33983. }),
  33984. $globals.BlockNode);
  33985. $core.addMethod(
  33986. $core.method({
  33987. selector: "parameters",
  33988. protocol: 'accessing',
  33989. fn: function (){
  33990. var self=this;
  33991. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  33992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33993. return $core.withContext(function($ctx1) {
  33994. //>>excludeEnd("ctx");
  33995. var $2,$1,$receiver;
  33996. $2=self["@parameters"];
  33997. if(($receiver = $2) == null || $receiver.isNil){
  33998. self["@parameters"]=$recv($Array())._new();
  33999. $1=self["@parameters"];
  34000. } else {
  34001. $1=$2;
  34002. };
  34003. return $1;
  34004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34005. }, function($ctx1) {$ctx1.fill(self,"parameters",{},$globals.BlockNode)});
  34006. //>>excludeEnd("ctx");
  34007. },
  34008. //>>excludeStart("ide", pragmas.excludeIdeData);
  34009. args: [],
  34010. source: "parameters\x0a\x09^ parameters ifNil: [ parameters := Array new ]",
  34011. referencedClasses: ["Array"],
  34012. //>>excludeEnd("ide");
  34013. messageSends: ["ifNil:", "new"]
  34014. }),
  34015. $globals.BlockNode);
  34016. $core.addMethod(
  34017. $core.method({
  34018. selector: "parameters:",
  34019. protocol: 'accessing',
  34020. fn: function (aCollection){
  34021. var self=this;
  34022. self["@parameters"]=aCollection;
  34023. return self;
  34024. },
  34025. //>>excludeStart("ide", pragmas.excludeIdeData);
  34026. args: ["aCollection"],
  34027. source: "parameters: aCollection\x0a\x09parameters := aCollection",
  34028. referencedClasses: [],
  34029. //>>excludeEnd("ide");
  34030. messageSends: []
  34031. }),
  34032. $globals.BlockNode);
  34033. $core.addMethod(
  34034. $core.method({
  34035. selector: "scope",
  34036. protocol: 'accessing',
  34037. fn: function (){
  34038. var self=this;
  34039. var $1;
  34040. $1=self["@scope"];
  34041. return $1;
  34042. },
  34043. //>>excludeStart("ide", pragmas.excludeIdeData);
  34044. args: [],
  34045. source: "scope\x0a\x09^ scope",
  34046. referencedClasses: [],
  34047. //>>excludeEnd("ide");
  34048. messageSends: []
  34049. }),
  34050. $globals.BlockNode);
  34051. $core.addMethod(
  34052. $core.method({
  34053. selector: "scope:",
  34054. protocol: 'accessing',
  34055. fn: function (aLexicalScope){
  34056. var self=this;
  34057. self["@scope"]=aLexicalScope;
  34058. return self;
  34059. },
  34060. //>>excludeStart("ide", pragmas.excludeIdeData);
  34061. args: ["aLexicalScope"],
  34062. source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
  34063. referencedClasses: [],
  34064. //>>excludeEnd("ide");
  34065. messageSends: []
  34066. }),
  34067. $globals.BlockNode);
  34068. $core.addMethod(
  34069. $core.method({
  34070. selector: "subtreeNeedsAliasing",
  34071. protocol: 'testing',
  34072. fn: function (){
  34073. var self=this;
  34074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34075. return $core.withContext(function($ctx1) {
  34076. //>>excludeEnd("ctx");
  34077. var $1;
  34078. $1=$recv(self._shouldBeAliased())._or_((function(){
  34079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34080. return $core.withContext(function($ctx2) {
  34081. //>>excludeEnd("ctx");
  34082. return self._shouldBeInlined();
  34083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34084. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  34085. //>>excludeEnd("ctx");
  34086. }));
  34087. return $1;
  34088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34089. }, function($ctx1) {$ctx1.fill(self,"subtreeNeedsAliasing",{},$globals.BlockNode)});
  34090. //>>excludeEnd("ctx");
  34091. },
  34092. //>>excludeStart("ide", pragmas.excludeIdeData);
  34093. args: [],
  34094. source: "subtreeNeedsAliasing\x0a\x09^ self shouldBeAliased or: [ self shouldBeInlined ]",
  34095. referencedClasses: [],
  34096. //>>excludeEnd("ide");
  34097. messageSends: ["or:", "shouldBeAliased", "shouldBeInlined"]
  34098. }),
  34099. $globals.BlockNode);
  34100. $core.addClass('CascadeNode', $globals.Node, ['receiver'], 'Compiler-AST');
  34101. //>>excludeStart("ide", pragmas.excludeIdeData);
  34102. $globals.CascadeNode.comment="I represent an cascade node.";
  34103. //>>excludeEnd("ide");
  34104. $core.addMethod(
  34105. $core.method({
  34106. selector: "accept:",
  34107. protocol: 'visiting',
  34108. fn: function (aVisitor){
  34109. var self=this;
  34110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34111. return $core.withContext(function($ctx1) {
  34112. //>>excludeEnd("ctx");
  34113. var $1;
  34114. $1=$recv(aVisitor)._visitCascadeNode_(self);
  34115. return $1;
  34116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34117. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.CascadeNode)});
  34118. //>>excludeEnd("ctx");
  34119. },
  34120. //>>excludeStart("ide", pragmas.excludeIdeData);
  34121. args: ["aVisitor"],
  34122. source: "accept: aVisitor\x0a\x09^ aVisitor visitCascadeNode: self",
  34123. referencedClasses: [],
  34124. //>>excludeEnd("ide");
  34125. messageSends: ["visitCascadeNode:"]
  34126. }),
  34127. $globals.CascadeNode);
  34128. $core.addMethod(
  34129. $core.method({
  34130. selector: "isCascadeNode",
  34131. protocol: 'testing',
  34132. fn: function (){
  34133. var self=this;
  34134. return true;
  34135. },
  34136. //>>excludeStart("ide", pragmas.excludeIdeData);
  34137. args: [],
  34138. source: "isCascadeNode\x0a\x09^ true",
  34139. referencedClasses: [],
  34140. //>>excludeEnd("ide");
  34141. messageSends: []
  34142. }),
  34143. $globals.CascadeNode);
  34144. $core.addMethod(
  34145. $core.method({
  34146. selector: "receiver",
  34147. protocol: 'accessing',
  34148. fn: function (){
  34149. var self=this;
  34150. var $1;
  34151. $1=self["@receiver"];
  34152. return $1;
  34153. },
  34154. //>>excludeStart("ide", pragmas.excludeIdeData);
  34155. args: [],
  34156. source: "receiver\x0a\x09^ receiver",
  34157. referencedClasses: [],
  34158. //>>excludeEnd("ide");
  34159. messageSends: []
  34160. }),
  34161. $globals.CascadeNode);
  34162. $core.addMethod(
  34163. $core.method({
  34164. selector: "receiver:",
  34165. protocol: 'accessing',
  34166. fn: function (aNode){
  34167. var self=this;
  34168. self["@receiver"]=aNode;
  34169. return self;
  34170. },
  34171. //>>excludeStart("ide", pragmas.excludeIdeData);
  34172. args: ["aNode"],
  34173. source: "receiver: aNode\x0a\x09receiver := aNode",
  34174. referencedClasses: [],
  34175. //>>excludeEnd("ide");
  34176. messageSends: []
  34177. }),
  34178. $globals.CascadeNode);
  34179. $core.addClass('DynamicArrayNode', $globals.Node, [], 'Compiler-AST');
  34180. //>>excludeStart("ide", pragmas.excludeIdeData);
  34181. $globals.DynamicArrayNode.comment="I represent an dynamic array node.";
  34182. //>>excludeEnd("ide");
  34183. $core.addMethod(
  34184. $core.method({
  34185. selector: "accept:",
  34186. protocol: 'visiting',
  34187. fn: function (aVisitor){
  34188. var self=this;
  34189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34190. return $core.withContext(function($ctx1) {
  34191. //>>excludeEnd("ctx");
  34192. var $1;
  34193. $1=$recv(aVisitor)._visitDynamicArrayNode_(self);
  34194. return $1;
  34195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34196. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.DynamicArrayNode)});
  34197. //>>excludeEnd("ctx");
  34198. },
  34199. //>>excludeStart("ide", pragmas.excludeIdeData);
  34200. args: ["aVisitor"],
  34201. source: "accept: aVisitor\x0a\x09^ aVisitor visitDynamicArrayNode: self",
  34202. referencedClasses: [],
  34203. //>>excludeEnd("ide");
  34204. messageSends: ["visitDynamicArrayNode:"]
  34205. }),
  34206. $globals.DynamicArrayNode);
  34207. $core.addClass('DynamicDictionaryNode', $globals.Node, [], 'Compiler-AST');
  34208. //>>excludeStart("ide", pragmas.excludeIdeData);
  34209. $globals.DynamicDictionaryNode.comment="I represent an dynamic dictionary node.";
  34210. //>>excludeEnd("ide");
  34211. $core.addMethod(
  34212. $core.method({
  34213. selector: "accept:",
  34214. protocol: 'visiting',
  34215. fn: function (aVisitor){
  34216. var self=this;
  34217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34218. return $core.withContext(function($ctx1) {
  34219. //>>excludeEnd("ctx");
  34220. var $1;
  34221. $1=$recv(aVisitor)._visitDynamicDictionaryNode_(self);
  34222. return $1;
  34223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34224. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.DynamicDictionaryNode)});
  34225. //>>excludeEnd("ctx");
  34226. },
  34227. //>>excludeStart("ide", pragmas.excludeIdeData);
  34228. args: ["aVisitor"],
  34229. source: "accept: aVisitor\x0a\x09^ aVisitor visitDynamicDictionaryNode: self",
  34230. referencedClasses: [],
  34231. //>>excludeEnd("ide");
  34232. messageSends: ["visitDynamicDictionaryNode:"]
  34233. }),
  34234. $globals.DynamicDictionaryNode);
  34235. $core.addClass('JSStatementNode', $globals.Node, [], 'Compiler-AST');
  34236. //>>excludeStart("ide", pragmas.excludeIdeData);
  34237. $globals.JSStatementNode.comment="I represent an JavaScript statement node.";
  34238. //>>excludeEnd("ide");
  34239. $core.addMethod(
  34240. $core.method({
  34241. selector: "accept:",
  34242. protocol: 'visiting',
  34243. fn: function (aVisitor){
  34244. var self=this;
  34245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34246. return $core.withContext(function($ctx1) {
  34247. //>>excludeEnd("ctx");
  34248. var $1;
  34249. $1=$recv(aVisitor)._visitJSStatementNode_(self);
  34250. return $1;
  34251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34252. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.JSStatementNode)});
  34253. //>>excludeEnd("ctx");
  34254. },
  34255. //>>excludeStart("ide", pragmas.excludeIdeData);
  34256. args: ["aVisitor"],
  34257. source: "accept: aVisitor\x0a\x09^ aVisitor visitJSStatementNode: self",
  34258. referencedClasses: [],
  34259. //>>excludeEnd("ide");
  34260. messageSends: ["visitJSStatementNode:"]
  34261. }),
  34262. $globals.JSStatementNode);
  34263. $core.addMethod(
  34264. $core.method({
  34265. selector: "isJSStatementNode",
  34266. protocol: 'testing',
  34267. fn: function (){
  34268. var self=this;
  34269. return true;
  34270. },
  34271. //>>excludeStart("ide", pragmas.excludeIdeData);
  34272. args: [],
  34273. source: "isJSStatementNode\x0a\x09^ true",
  34274. referencedClasses: [],
  34275. //>>excludeEnd("ide");
  34276. messageSends: []
  34277. }),
  34278. $globals.JSStatementNode);
  34279. $core.addMethod(
  34280. $core.method({
  34281. selector: "requiresSmalltalkContext",
  34282. protocol: 'testing',
  34283. fn: function (){
  34284. var self=this;
  34285. return true;
  34286. },
  34287. //>>excludeStart("ide", pragmas.excludeIdeData);
  34288. args: [],
  34289. source: "requiresSmalltalkContext\x0a\x09^ true",
  34290. referencedClasses: [],
  34291. //>>excludeEnd("ide");
  34292. messageSends: []
  34293. }),
  34294. $globals.JSStatementNode);
  34295. $core.addClass('MethodNode', $globals.Node, ['selector', 'arguments', 'source', 'scope', 'classReferences', 'sendIndexes', 'superSends'], 'Compiler-AST');
  34296. //>>excludeStart("ide", pragmas.excludeIdeData);
  34297. $globals.MethodNode.comment="I represent an method node.\x0a\x0aA method node must be the root and only method node of a valid AST.";
  34298. //>>excludeEnd("ide");
  34299. $core.addMethod(
  34300. $core.method({
  34301. selector: "accept:",
  34302. protocol: 'visiting',
  34303. fn: function (aVisitor){
  34304. var self=this;
  34305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34306. return $core.withContext(function($ctx1) {
  34307. //>>excludeEnd("ctx");
  34308. var $1;
  34309. $1=$recv(aVisitor)._visitMethodNode_(self);
  34310. return $1;
  34311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34312. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.MethodNode)});
  34313. //>>excludeEnd("ctx");
  34314. },
  34315. //>>excludeStart("ide", pragmas.excludeIdeData);
  34316. args: ["aVisitor"],
  34317. source: "accept: aVisitor\x0a\x09^ aVisitor visitMethodNode: self",
  34318. referencedClasses: [],
  34319. //>>excludeEnd("ide");
  34320. messageSends: ["visitMethodNode:"]
  34321. }),
  34322. $globals.MethodNode);
  34323. $core.addMethod(
  34324. $core.method({
  34325. selector: "arguments",
  34326. protocol: 'accessing',
  34327. fn: function (){
  34328. var self=this;
  34329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34330. return $core.withContext(function($ctx1) {
  34331. //>>excludeEnd("ctx");
  34332. var $2,$1,$receiver;
  34333. $2=self["@arguments"];
  34334. if(($receiver = $2) == null || $receiver.isNil){
  34335. $1=[];
  34336. } else {
  34337. $1=$2;
  34338. };
  34339. return $1;
  34340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34341. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.MethodNode)});
  34342. //>>excludeEnd("ctx");
  34343. },
  34344. //>>excludeStart("ide", pragmas.excludeIdeData);
  34345. args: [],
  34346. source: "arguments\x0a\x09^ arguments ifNil: [ #() ]",
  34347. referencedClasses: [],
  34348. //>>excludeEnd("ide");
  34349. messageSends: ["ifNil:"]
  34350. }),
  34351. $globals.MethodNode);
  34352. $core.addMethod(
  34353. $core.method({
  34354. selector: "arguments:",
  34355. protocol: 'accessing',
  34356. fn: function (aCollection){
  34357. var self=this;
  34358. self["@arguments"]=aCollection;
  34359. return self;
  34360. },
  34361. //>>excludeStart("ide", pragmas.excludeIdeData);
  34362. args: ["aCollection"],
  34363. source: "arguments: aCollection\x0a\x09arguments := aCollection",
  34364. referencedClasses: [],
  34365. //>>excludeEnd("ide");
  34366. messageSends: []
  34367. }),
  34368. $globals.MethodNode);
  34369. $core.addMethod(
  34370. $core.method({
  34371. selector: "classReferences",
  34372. protocol: 'accessing',
  34373. fn: function (){
  34374. var self=this;
  34375. var $1;
  34376. $1=self["@classReferences"];
  34377. return $1;
  34378. },
  34379. //>>excludeStart("ide", pragmas.excludeIdeData);
  34380. args: [],
  34381. source: "classReferences\x0a\x09^ classReferences",
  34382. referencedClasses: [],
  34383. //>>excludeEnd("ide");
  34384. messageSends: []
  34385. }),
  34386. $globals.MethodNode);
  34387. $core.addMethod(
  34388. $core.method({
  34389. selector: "classReferences:",
  34390. protocol: 'accessing',
  34391. fn: function (aCollection){
  34392. var self=this;
  34393. self["@classReferences"]=aCollection;
  34394. return self;
  34395. },
  34396. //>>excludeStart("ide", pragmas.excludeIdeData);
  34397. args: ["aCollection"],
  34398. source: "classReferences: aCollection\x0a\x09classReferences := aCollection",
  34399. referencedClasses: [],
  34400. //>>excludeEnd("ide");
  34401. messageSends: []
  34402. }),
  34403. $globals.MethodNode);
  34404. $core.addMethod(
  34405. $core.method({
  34406. selector: "messageSends",
  34407. protocol: 'accessing',
  34408. fn: function (){
  34409. var self=this;
  34410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34411. return $core.withContext(function($ctx1) {
  34412. //>>excludeEnd("ctx");
  34413. var $1;
  34414. $1=$recv(self._sendIndexes())._keys();
  34415. return $1;
  34416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34417. }, function($ctx1) {$ctx1.fill(self,"messageSends",{},$globals.MethodNode)});
  34418. //>>excludeEnd("ctx");
  34419. },
  34420. //>>excludeStart("ide", pragmas.excludeIdeData);
  34421. args: [],
  34422. source: "messageSends\x0a\x09^ self sendIndexes keys",
  34423. referencedClasses: [],
  34424. //>>excludeEnd("ide");
  34425. messageSends: ["keys", "sendIndexes"]
  34426. }),
  34427. $globals.MethodNode);
  34428. $core.addMethod(
  34429. $core.method({
  34430. selector: "method",
  34431. protocol: 'accessing',
  34432. fn: function (){
  34433. var self=this;
  34434. return self;
  34435. },
  34436. //>>excludeStart("ide", pragmas.excludeIdeData);
  34437. args: [],
  34438. source: "method\x0a\x09^ self",
  34439. referencedClasses: [],
  34440. //>>excludeEnd("ide");
  34441. messageSends: []
  34442. }),
  34443. $globals.MethodNode);
  34444. $core.addMethod(
  34445. $core.method({
  34446. selector: "scope",
  34447. protocol: 'accessing',
  34448. fn: function (){
  34449. var self=this;
  34450. var $1;
  34451. $1=self["@scope"];
  34452. return $1;
  34453. },
  34454. //>>excludeStart("ide", pragmas.excludeIdeData);
  34455. args: [],
  34456. source: "scope\x0a\x09^ scope",
  34457. referencedClasses: [],
  34458. //>>excludeEnd("ide");
  34459. messageSends: []
  34460. }),
  34461. $globals.MethodNode);
  34462. $core.addMethod(
  34463. $core.method({
  34464. selector: "scope:",
  34465. protocol: 'accessing',
  34466. fn: function (aMethodScope){
  34467. var self=this;
  34468. self["@scope"]=aMethodScope;
  34469. return self;
  34470. },
  34471. //>>excludeStart("ide", pragmas.excludeIdeData);
  34472. args: ["aMethodScope"],
  34473. source: "scope: aMethodScope\x0a\x09scope := aMethodScope",
  34474. referencedClasses: [],
  34475. //>>excludeEnd("ide");
  34476. messageSends: []
  34477. }),
  34478. $globals.MethodNode);
  34479. $core.addMethod(
  34480. $core.method({
  34481. selector: "selector",
  34482. protocol: 'accessing',
  34483. fn: function (){
  34484. var self=this;
  34485. var $1;
  34486. $1=self["@selector"];
  34487. return $1;
  34488. },
  34489. //>>excludeStart("ide", pragmas.excludeIdeData);
  34490. args: [],
  34491. source: "selector\x0a\x09^ selector",
  34492. referencedClasses: [],
  34493. //>>excludeEnd("ide");
  34494. messageSends: []
  34495. }),
  34496. $globals.MethodNode);
  34497. $core.addMethod(
  34498. $core.method({
  34499. selector: "selector:",
  34500. protocol: 'accessing',
  34501. fn: function (aString){
  34502. var self=this;
  34503. self["@selector"]=aString;
  34504. return self;
  34505. },
  34506. //>>excludeStart("ide", pragmas.excludeIdeData);
  34507. args: ["aString"],
  34508. source: "selector: aString\x0a\x09selector := aString",
  34509. referencedClasses: [],
  34510. //>>excludeEnd("ide");
  34511. messageSends: []
  34512. }),
  34513. $globals.MethodNode);
  34514. $core.addMethod(
  34515. $core.method({
  34516. selector: "sendIndexes",
  34517. protocol: 'accessing',
  34518. fn: function (){
  34519. var self=this;
  34520. var $1;
  34521. $1=self["@sendIndexes"];
  34522. return $1;
  34523. },
  34524. //>>excludeStart("ide", pragmas.excludeIdeData);
  34525. args: [],
  34526. source: "sendIndexes\x0a\x09^ sendIndexes",
  34527. referencedClasses: [],
  34528. //>>excludeEnd("ide");
  34529. messageSends: []
  34530. }),
  34531. $globals.MethodNode);
  34532. $core.addMethod(
  34533. $core.method({
  34534. selector: "sendIndexes:",
  34535. protocol: 'accessing',
  34536. fn: function (aDictionary){
  34537. var self=this;
  34538. self["@sendIndexes"]=aDictionary;
  34539. return self;
  34540. },
  34541. //>>excludeStart("ide", pragmas.excludeIdeData);
  34542. args: ["aDictionary"],
  34543. source: "sendIndexes: aDictionary\x0a\x09sendIndexes := aDictionary",
  34544. referencedClasses: [],
  34545. //>>excludeEnd("ide");
  34546. messageSends: []
  34547. }),
  34548. $globals.MethodNode);
  34549. $core.addMethod(
  34550. $core.method({
  34551. selector: "sequenceNode",
  34552. protocol: 'accessing',
  34553. fn: function (){
  34554. var self=this;
  34555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34556. return $core.withContext(function($ctx1) {
  34557. //>>excludeEnd("ctx");
  34558. var $1;
  34559. var $early={};
  34560. try {
  34561. $recv(self._nodes())._do_((function(each){
  34562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34563. return $core.withContext(function($ctx2) {
  34564. //>>excludeEnd("ctx");
  34565. $1=$recv(each)._isSequenceNode();
  34566. if($core.assert($1)){
  34567. throw $early=[each];
  34568. };
  34569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34570. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  34571. //>>excludeEnd("ctx");
  34572. }));
  34573. return nil;
  34574. }
  34575. catch(e) {if(e===$early)return e[0]; throw e}
  34576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34577. }, function($ctx1) {$ctx1.fill(self,"sequenceNode",{},$globals.MethodNode)});
  34578. //>>excludeEnd("ctx");
  34579. },
  34580. //>>excludeStart("ide", pragmas.excludeIdeData);
  34581. args: [],
  34582. source: "sequenceNode\x0a\x09self nodes do: [ :each |\x0a\x09\x09each isSequenceNode ifTrue: [ ^ each ] ].\x0a\x09\x09\x0a\x09^ nil",
  34583. referencedClasses: [],
  34584. //>>excludeEnd("ide");
  34585. messageSends: ["do:", "nodes", "ifTrue:", "isSequenceNode"]
  34586. }),
  34587. $globals.MethodNode);
  34588. $core.addMethod(
  34589. $core.method({
  34590. selector: "source",
  34591. protocol: 'accessing',
  34592. fn: function (){
  34593. var self=this;
  34594. var $1;
  34595. $1=self["@source"];
  34596. return $1;
  34597. },
  34598. //>>excludeStart("ide", pragmas.excludeIdeData);
  34599. args: [],
  34600. source: "source\x0a\x09^ source",
  34601. referencedClasses: [],
  34602. //>>excludeEnd("ide");
  34603. messageSends: []
  34604. }),
  34605. $globals.MethodNode);
  34606. $core.addMethod(
  34607. $core.method({
  34608. selector: "source:",
  34609. protocol: 'accessing',
  34610. fn: function (aString){
  34611. var self=this;
  34612. self["@source"]=aString;
  34613. return self;
  34614. },
  34615. //>>excludeStart("ide", pragmas.excludeIdeData);
  34616. args: ["aString"],
  34617. source: "source: aString\x0a\x09source := aString",
  34618. referencedClasses: [],
  34619. //>>excludeEnd("ide");
  34620. messageSends: []
  34621. }),
  34622. $globals.MethodNode);
  34623. $core.addMethod(
  34624. $core.method({
  34625. selector: "superSends",
  34626. protocol: 'accessing',
  34627. fn: function (){
  34628. var self=this;
  34629. var $1;
  34630. $1=self["@superSends"];
  34631. return $1;
  34632. },
  34633. //>>excludeStart("ide", pragmas.excludeIdeData);
  34634. args: [],
  34635. source: "superSends\x0a\x09^ superSends",
  34636. referencedClasses: [],
  34637. //>>excludeEnd("ide");
  34638. messageSends: []
  34639. }),
  34640. $globals.MethodNode);
  34641. $core.addMethod(
  34642. $core.method({
  34643. selector: "superSends:",
  34644. protocol: 'accessing',
  34645. fn: function (aCollection){
  34646. var self=this;
  34647. self["@superSends"]=aCollection;
  34648. return self;
  34649. },
  34650. //>>excludeStart("ide", pragmas.excludeIdeData);
  34651. args: ["aCollection"],
  34652. source: "superSends: aCollection\x0a\x09superSends := aCollection",
  34653. referencedClasses: [],
  34654. //>>excludeEnd("ide");
  34655. messageSends: []
  34656. }),
  34657. $globals.MethodNode);
  34658. $core.addClass('ReturnNode', $globals.Node, ['scope'], 'Compiler-AST');
  34659. //>>excludeStart("ide", pragmas.excludeIdeData);
  34660. $globals.ReturnNode.comment="I represent an return node. At the AST level, there is not difference between a local return or non-local return.";
  34661. //>>excludeEnd("ide");
  34662. $core.addMethod(
  34663. $core.method({
  34664. selector: "accept:",
  34665. protocol: 'visiting',
  34666. fn: function (aVisitor){
  34667. var self=this;
  34668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34669. return $core.withContext(function($ctx1) {
  34670. //>>excludeEnd("ctx");
  34671. var $1;
  34672. $1=$recv(aVisitor)._visitReturnNode_(self);
  34673. return $1;
  34674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34675. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.ReturnNode)});
  34676. //>>excludeEnd("ctx");
  34677. },
  34678. //>>excludeStart("ide", pragmas.excludeIdeData);
  34679. args: ["aVisitor"],
  34680. source: "accept: aVisitor\x0a\x09^ aVisitor visitReturnNode: self",
  34681. referencedClasses: [],
  34682. //>>excludeEnd("ide");
  34683. messageSends: ["visitReturnNode:"]
  34684. }),
  34685. $globals.ReturnNode);
  34686. $core.addMethod(
  34687. $core.method({
  34688. selector: "isReturnNode",
  34689. protocol: 'testing',
  34690. fn: function (){
  34691. var self=this;
  34692. return true;
  34693. },
  34694. //>>excludeStart("ide", pragmas.excludeIdeData);
  34695. args: [],
  34696. source: "isReturnNode\x0a\x09^ true",
  34697. referencedClasses: [],
  34698. //>>excludeEnd("ide");
  34699. messageSends: []
  34700. }),
  34701. $globals.ReturnNode);
  34702. $core.addMethod(
  34703. $core.method({
  34704. selector: "nonLocalReturn",
  34705. protocol: 'testing',
  34706. fn: function (){
  34707. var self=this;
  34708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34709. return $core.withContext(function($ctx1) {
  34710. //>>excludeEnd("ctx");
  34711. var $1;
  34712. $1=$recv($recv(self._scope())._isMethodScope())._not();
  34713. return $1;
  34714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34715. }, function($ctx1) {$ctx1.fill(self,"nonLocalReturn",{},$globals.ReturnNode)});
  34716. //>>excludeEnd("ctx");
  34717. },
  34718. //>>excludeStart("ide", pragmas.excludeIdeData);
  34719. args: [],
  34720. source: "nonLocalReturn\x0a\x09^ self scope isMethodScope not",
  34721. referencedClasses: [],
  34722. //>>excludeEnd("ide");
  34723. messageSends: ["not", "isMethodScope", "scope"]
  34724. }),
  34725. $globals.ReturnNode);
  34726. $core.addMethod(
  34727. $core.method({
  34728. selector: "scope",
  34729. protocol: 'accessing',
  34730. fn: function (){
  34731. var self=this;
  34732. var $1;
  34733. $1=self["@scope"];
  34734. return $1;
  34735. },
  34736. //>>excludeStart("ide", pragmas.excludeIdeData);
  34737. args: [],
  34738. source: "scope\x0a\x09^ scope",
  34739. referencedClasses: [],
  34740. //>>excludeEnd("ide");
  34741. messageSends: []
  34742. }),
  34743. $globals.ReturnNode);
  34744. $core.addMethod(
  34745. $core.method({
  34746. selector: "scope:",
  34747. protocol: 'accessing',
  34748. fn: function (aLexicalScope){
  34749. var self=this;
  34750. self["@scope"]=aLexicalScope;
  34751. return self;
  34752. },
  34753. //>>excludeStart("ide", pragmas.excludeIdeData);
  34754. args: ["aLexicalScope"],
  34755. source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
  34756. referencedClasses: [],
  34757. //>>excludeEnd("ide");
  34758. messageSends: []
  34759. }),
  34760. $globals.ReturnNode);
  34761. $core.addClass('SendNode', $globals.Node, ['selector', 'arguments', 'receiver', 'superSend', 'index'], 'Compiler-AST');
  34762. //>>excludeStart("ide", pragmas.excludeIdeData);
  34763. $globals.SendNode.comment="I represent an message send node.";
  34764. //>>excludeEnd("ide");
  34765. $core.addMethod(
  34766. $core.method({
  34767. selector: "accept:",
  34768. protocol: 'visiting',
  34769. fn: function (aVisitor){
  34770. var self=this;
  34771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34772. return $core.withContext(function($ctx1) {
  34773. //>>excludeEnd("ctx");
  34774. var $1;
  34775. $1=$recv(aVisitor)._visitSendNode_(self);
  34776. return $1;
  34777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34778. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.SendNode)});
  34779. //>>excludeEnd("ctx");
  34780. },
  34781. //>>excludeStart("ide", pragmas.excludeIdeData);
  34782. args: ["aVisitor"],
  34783. source: "accept: aVisitor\x0a\x09^ aVisitor visitSendNode: self",
  34784. referencedClasses: [],
  34785. //>>excludeEnd("ide");
  34786. messageSends: ["visitSendNode:"]
  34787. }),
  34788. $globals.SendNode);
  34789. $core.addMethod(
  34790. $core.method({
  34791. selector: "arguments",
  34792. protocol: 'accessing',
  34793. fn: function (){
  34794. var self=this;
  34795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34796. return $core.withContext(function($ctx1) {
  34797. //>>excludeEnd("ctx");
  34798. var $2,$1,$receiver;
  34799. $2=self["@arguments"];
  34800. if(($receiver = $2) == null || $receiver.isNil){
  34801. self["@arguments"]=[];
  34802. $1=self["@arguments"];
  34803. } else {
  34804. $1=$2;
  34805. };
  34806. return $1;
  34807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34808. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.SendNode)});
  34809. //>>excludeEnd("ctx");
  34810. },
  34811. //>>excludeStart("ide", pragmas.excludeIdeData);
  34812. args: [],
  34813. source: "arguments\x0a\x09^ arguments ifNil: [ arguments := #() ]",
  34814. referencedClasses: [],
  34815. //>>excludeEnd("ide");
  34816. messageSends: ["ifNil:"]
  34817. }),
  34818. $globals.SendNode);
  34819. $core.addMethod(
  34820. $core.method({
  34821. selector: "arguments:",
  34822. protocol: 'accessing',
  34823. fn: function (aCollection){
  34824. var self=this;
  34825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34826. return $core.withContext(function($ctx1) {
  34827. //>>excludeEnd("ctx");
  34828. self["@arguments"]=aCollection;
  34829. $recv(aCollection)._do_((function(each){
  34830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34831. return $core.withContext(function($ctx2) {
  34832. //>>excludeEnd("ctx");
  34833. return $recv(each)._parent_(self);
  34834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34835. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  34836. //>>excludeEnd("ctx");
  34837. }));
  34838. return self;
  34839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34840. }, function($ctx1) {$ctx1.fill(self,"arguments:",{aCollection:aCollection},$globals.SendNode)});
  34841. //>>excludeEnd("ctx");
  34842. },
  34843. //>>excludeStart("ide", pragmas.excludeIdeData);
  34844. args: ["aCollection"],
  34845. source: "arguments: aCollection\x0a\x09arguments := aCollection.\x0a\x09aCollection do: [ :each | each parent: self ]",
  34846. referencedClasses: [],
  34847. //>>excludeEnd("ide");
  34848. messageSends: ["do:", "parent:"]
  34849. }),
  34850. $globals.SendNode);
  34851. $core.addMethod(
  34852. $core.method({
  34853. selector: "cascadeNodeWithMessages:",
  34854. protocol: 'accessing',
  34855. fn: function (aCollection){
  34856. var self=this;
  34857. var first;
  34858. function $SendNode(){return $globals.SendNode||(typeof SendNode=="undefined"?nil:SendNode)}
  34859. function $CascadeNode(){return $globals.CascadeNode||(typeof CascadeNode=="undefined"?nil:CascadeNode)}
  34860. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  34861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34862. return $core.withContext(function($ctx1) {
  34863. //>>excludeEnd("ctx");
  34864. var $1,$2,$4,$5,$3;
  34865. $1=$recv($SendNode())._new();
  34866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34867. $ctx1.sendIdx["new"]=1;
  34868. //>>excludeEnd("ctx");
  34869. $recv($1)._selector_(self._selector());
  34870. $recv($1)._arguments_(self._arguments());
  34871. $2=$recv($1)._yourself();
  34872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34873. $ctx1.sendIdx["yourself"]=1;
  34874. //>>excludeEnd("ctx");
  34875. first=$2;
  34876. $4=$recv($CascadeNode())._new();
  34877. $recv($4)._receiver_(self._receiver());
  34878. $recv($4)._nodes_($recv($recv($Array())._with_(first)).__comma(aCollection));
  34879. $5=$recv($4)._yourself();
  34880. $3=$5;
  34881. return $3;
  34882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34883. }, function($ctx1) {$ctx1.fill(self,"cascadeNodeWithMessages:",{aCollection:aCollection,first:first},$globals.SendNode)});
  34884. //>>excludeEnd("ctx");
  34885. },
  34886. //>>excludeStart("ide", pragmas.excludeIdeData);
  34887. args: ["aCollection"],
  34888. 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",
  34889. referencedClasses: ["SendNode", "CascadeNode", "Array"],
  34890. //>>excludeEnd("ide");
  34891. messageSends: ["selector:", "new", "selector", "arguments:", "arguments", "yourself", "receiver:", "receiver", "nodes:", ",", "with:"]
  34892. }),
  34893. $globals.SendNode);
  34894. $core.addMethod(
  34895. $core.method({
  34896. selector: "index",
  34897. protocol: 'accessing',
  34898. fn: function (){
  34899. var self=this;
  34900. var $1;
  34901. $1=self["@index"];
  34902. return $1;
  34903. },
  34904. //>>excludeStart("ide", pragmas.excludeIdeData);
  34905. args: [],
  34906. source: "index\x0a\x09^ index",
  34907. referencedClasses: [],
  34908. //>>excludeEnd("ide");
  34909. messageSends: []
  34910. }),
  34911. $globals.SendNode);
  34912. $core.addMethod(
  34913. $core.method({
  34914. selector: "index:",
  34915. protocol: 'accessing',
  34916. fn: function (anInteger){
  34917. var self=this;
  34918. self["@index"]=anInteger;
  34919. return self;
  34920. },
  34921. //>>excludeStart("ide", pragmas.excludeIdeData);
  34922. args: ["anInteger"],
  34923. source: "index: anInteger\x0a\x09index := anInteger",
  34924. referencedClasses: [],
  34925. //>>excludeEnd("ide");
  34926. messageSends: []
  34927. }),
  34928. $globals.SendNode);
  34929. $core.addMethod(
  34930. $core.method({
  34931. selector: "isCascadeSendNode",
  34932. protocol: 'testing',
  34933. fn: function (){
  34934. var self=this;
  34935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34936. return $core.withContext(function($ctx1) {
  34937. //>>excludeEnd("ctx");
  34938. var $1;
  34939. $1=$recv(self._parent())._isCascadeNode();
  34940. return $1;
  34941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34942. }, function($ctx1) {$ctx1.fill(self,"isCascadeSendNode",{},$globals.SendNode)});
  34943. //>>excludeEnd("ctx");
  34944. },
  34945. //>>excludeStart("ide", pragmas.excludeIdeData);
  34946. args: [],
  34947. source: "isCascadeSendNode\x0a\x09^ self parent isCascadeNode",
  34948. referencedClasses: [],
  34949. //>>excludeEnd("ide");
  34950. messageSends: ["isCascadeNode", "parent"]
  34951. }),
  34952. $globals.SendNode);
  34953. $core.addMethod(
  34954. $core.method({
  34955. selector: "isNavigationNode",
  34956. protocol: 'testing',
  34957. fn: function (){
  34958. var self=this;
  34959. return true;
  34960. },
  34961. //>>excludeStart("ide", pragmas.excludeIdeData);
  34962. args: [],
  34963. source: "isNavigationNode\x0a\x09^ true",
  34964. referencedClasses: [],
  34965. //>>excludeEnd("ide");
  34966. messageSends: []
  34967. }),
  34968. $globals.SendNode);
  34969. $core.addMethod(
  34970. $core.method({
  34971. selector: "isSendNode",
  34972. protocol: 'testing',
  34973. fn: function (){
  34974. var self=this;
  34975. return true;
  34976. },
  34977. //>>excludeStart("ide", pragmas.excludeIdeData);
  34978. args: [],
  34979. source: "isSendNode\x0a\x09^ true",
  34980. referencedClasses: [],
  34981. //>>excludeEnd("ide");
  34982. messageSends: []
  34983. }),
  34984. $globals.SendNode);
  34985. $core.addMethod(
  34986. $core.method({
  34987. selector: "navigationLink",
  34988. protocol: 'accessing',
  34989. fn: function (){
  34990. var self=this;
  34991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34992. return $core.withContext(function($ctx1) {
  34993. //>>excludeEnd("ctx");
  34994. var $1;
  34995. $1=self._selector();
  34996. return $1;
  34997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34998. }, function($ctx1) {$ctx1.fill(self,"navigationLink",{},$globals.SendNode)});
  34999. //>>excludeEnd("ctx");
  35000. },
  35001. //>>excludeStart("ide", pragmas.excludeIdeData);
  35002. args: [],
  35003. source: "navigationLink\x0a\x09^ self selector",
  35004. referencedClasses: [],
  35005. //>>excludeEnd("ide");
  35006. messageSends: ["selector"]
  35007. }),
  35008. $globals.SendNode);
  35009. $core.addMethod(
  35010. $core.method({
  35011. selector: "nodes",
  35012. protocol: 'accessing',
  35013. fn: function (){
  35014. var self=this;
  35015. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  35016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35017. return $core.withContext(function($ctx1) {
  35018. //>>excludeEnd("ctx");
  35019. var $1,$3,$2,$5,$6,$4,$receiver;
  35020. $1=self._receiver();
  35021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35022. $ctx1.sendIdx["receiver"]=1;
  35023. //>>excludeEnd("ctx");
  35024. if(($receiver = $1) == null || $receiver.isNil){
  35025. $3=self._arguments();
  35026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35027. $ctx1.sendIdx["arguments"]=1;
  35028. //>>excludeEnd("ctx");
  35029. $2=$recv($3)._copy();
  35030. return $2;
  35031. } else {
  35032. $1;
  35033. };
  35034. $5=$recv($Array())._with_(self._receiver());
  35035. $recv($5)._addAll_(self._arguments());
  35036. $6=$recv($5)._yourself();
  35037. $4=$6;
  35038. return $4;
  35039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35040. }, function($ctx1) {$ctx1.fill(self,"nodes",{},$globals.SendNode)});
  35041. //>>excludeEnd("ctx");
  35042. },
  35043. //>>excludeStart("ide", pragmas.excludeIdeData);
  35044. args: [],
  35045. 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",
  35046. referencedClasses: ["Array"],
  35047. //>>excludeEnd("ide");
  35048. messageSends: ["ifNil:", "receiver", "copy", "arguments", "addAll:", "with:", "yourself"]
  35049. }),
  35050. $globals.SendNode);
  35051. $core.addMethod(
  35052. $core.method({
  35053. selector: "receiver",
  35054. protocol: 'accessing',
  35055. fn: function (){
  35056. var self=this;
  35057. var $1;
  35058. $1=self["@receiver"];
  35059. return $1;
  35060. },
  35061. //>>excludeStart("ide", pragmas.excludeIdeData);
  35062. args: [],
  35063. source: "receiver\x0a\x09^ receiver",
  35064. referencedClasses: [],
  35065. //>>excludeEnd("ide");
  35066. messageSends: []
  35067. }),
  35068. $globals.SendNode);
  35069. $core.addMethod(
  35070. $core.method({
  35071. selector: "receiver:",
  35072. protocol: 'accessing',
  35073. fn: function (aNode){
  35074. var self=this;
  35075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35076. return $core.withContext(function($ctx1) {
  35077. //>>excludeEnd("ctx");
  35078. var $1;
  35079. self["@receiver"]=aNode;
  35080. $1=$recv(aNode)._isNode();
  35081. if($core.assert($1)){
  35082. $recv(aNode)._parent_(self);
  35083. };
  35084. return self;
  35085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35086. }, function($ctx1) {$ctx1.fill(self,"receiver:",{aNode:aNode},$globals.SendNode)});
  35087. //>>excludeEnd("ctx");
  35088. },
  35089. //>>excludeStart("ide", pragmas.excludeIdeData);
  35090. args: ["aNode"],
  35091. source: "receiver: aNode\x0a\x09receiver := aNode.\x0a\x09aNode isNode ifTrue: [\x0a\x09\x09aNode parent: self ]",
  35092. referencedClasses: [],
  35093. //>>excludeEnd("ide");
  35094. messageSends: ["ifTrue:", "isNode", "parent:"]
  35095. }),
  35096. $globals.SendNode);
  35097. $core.addMethod(
  35098. $core.method({
  35099. selector: "requiresSmalltalkContext",
  35100. protocol: 'testing',
  35101. fn: function (){
  35102. var self=this;
  35103. return true;
  35104. },
  35105. //>>excludeStart("ide", pragmas.excludeIdeData);
  35106. args: [],
  35107. source: "requiresSmalltalkContext\x0a\x09^ true",
  35108. referencedClasses: [],
  35109. //>>excludeEnd("ide");
  35110. messageSends: []
  35111. }),
  35112. $globals.SendNode);
  35113. $core.addMethod(
  35114. $core.method({
  35115. selector: "selector",
  35116. protocol: 'accessing',
  35117. fn: function (){
  35118. var self=this;
  35119. var $1;
  35120. $1=self["@selector"];
  35121. return $1;
  35122. },
  35123. //>>excludeStart("ide", pragmas.excludeIdeData);
  35124. args: [],
  35125. source: "selector\x0a\x09^ selector",
  35126. referencedClasses: [],
  35127. //>>excludeEnd("ide");
  35128. messageSends: []
  35129. }),
  35130. $globals.SendNode);
  35131. $core.addMethod(
  35132. $core.method({
  35133. selector: "selector:",
  35134. protocol: 'accessing',
  35135. fn: function (aString){
  35136. var self=this;
  35137. self["@selector"]=aString;
  35138. return self;
  35139. },
  35140. //>>excludeStart("ide", pragmas.excludeIdeData);
  35141. args: ["aString"],
  35142. source: "selector: aString\x0a\x09selector := aString",
  35143. referencedClasses: [],
  35144. //>>excludeEnd("ide");
  35145. messageSends: []
  35146. }),
  35147. $globals.SendNode);
  35148. $core.addMethod(
  35149. $core.method({
  35150. selector: "shouldBeAliased",
  35151. protocol: 'testing',
  35152. fn: function (){
  35153. var self=this;
  35154. var sends;
  35155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35156. return $core.withContext(function($ctx1) {
  35157. //>>excludeEnd("ctx");
  35158. var $2,$1;
  35159. sends=$recv($recv($recv(self._method())._sendIndexes())._at_(self._selector()))._size();
  35160. $2=(
  35161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35162. $ctx1.supercall = true,
  35163. //>>excludeEnd("ctx");
  35164. $globals.SendNode.superclass.fn.prototype._shouldBeAliased.apply($recv(self), []));
  35165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35166. $ctx1.supercall = false;
  35167. //>>excludeEnd("ctx");;
  35168. $1=$recv($2)._or_((function(){
  35169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35170. return $core.withContext(function($ctx2) {
  35171. //>>excludeEnd("ctx");
  35172. return $recv(self._isReferenced())._and_((function(){
  35173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35174. return $core.withContext(function($ctx3) {
  35175. //>>excludeEnd("ctx");
  35176. return $recv($recv($recv(sends).__gt((1)))._and_((function(){
  35177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35178. return $core.withContext(function($ctx4) {
  35179. //>>excludeEnd("ctx");
  35180. return $recv(self._index()).__lt(sends);
  35181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35182. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,3)});
  35183. //>>excludeEnd("ctx");
  35184. })))._or_((function(){
  35185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35186. return $core.withContext(function($ctx4) {
  35187. //>>excludeEnd("ctx");
  35188. return self._superSend();
  35189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35190. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,4)});
  35191. //>>excludeEnd("ctx");
  35192. }));
  35193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35194. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  35195. //>>excludeEnd("ctx");
  35196. }));
  35197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35198. $ctx2.sendIdx["and:"]=1;
  35199. //>>excludeEnd("ctx");
  35200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35201. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  35202. //>>excludeEnd("ctx");
  35203. }));
  35204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35205. $ctx1.sendIdx["or:"]=1;
  35206. //>>excludeEnd("ctx");
  35207. return $1;
  35208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35209. }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{sends:sends},$globals.SendNode)});
  35210. //>>excludeEnd("ctx");
  35211. },
  35212. //>>excludeStart("ide", pragmas.excludeIdeData);
  35213. args: [],
  35214. 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 ] ] ])",
  35215. referencedClasses: [],
  35216. //>>excludeEnd("ide");
  35217. messageSends: ["size", "at:", "sendIndexes", "method", "selector", "or:", "shouldBeAliased", "and:", "isReferenced", ">", "<", "index", "superSend"]
  35218. }),
  35219. $globals.SendNode);
  35220. $core.addMethod(
  35221. $core.method({
  35222. selector: "stopOnStepping",
  35223. protocol: 'testing',
  35224. fn: function (){
  35225. var self=this;
  35226. return true;
  35227. },
  35228. //>>excludeStart("ide", pragmas.excludeIdeData);
  35229. args: [],
  35230. source: "stopOnStepping\x0a\x09^ true",
  35231. referencedClasses: [],
  35232. //>>excludeEnd("ide");
  35233. messageSends: []
  35234. }),
  35235. $globals.SendNode);
  35236. $core.addMethod(
  35237. $core.method({
  35238. selector: "superSend",
  35239. protocol: 'accessing',
  35240. fn: function (){
  35241. var self=this;
  35242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35243. return $core.withContext(function($ctx1) {
  35244. //>>excludeEnd("ctx");
  35245. var $2,$1,$receiver;
  35246. $2=self["@superSend"];
  35247. if(($receiver = $2) == null || $receiver.isNil){
  35248. $1=false;
  35249. } else {
  35250. $1=$2;
  35251. };
  35252. return $1;
  35253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35254. }, function($ctx1) {$ctx1.fill(self,"superSend",{},$globals.SendNode)});
  35255. //>>excludeEnd("ctx");
  35256. },
  35257. //>>excludeStart("ide", pragmas.excludeIdeData);
  35258. args: [],
  35259. source: "superSend\x0a\x09^ superSend ifNil: [ false ]",
  35260. referencedClasses: [],
  35261. //>>excludeEnd("ide");
  35262. messageSends: ["ifNil:"]
  35263. }),
  35264. $globals.SendNode);
  35265. $core.addMethod(
  35266. $core.method({
  35267. selector: "superSend:",
  35268. protocol: 'accessing',
  35269. fn: function (aBoolean){
  35270. var self=this;
  35271. self["@superSend"]=aBoolean;
  35272. return self;
  35273. },
  35274. //>>excludeStart("ide", pragmas.excludeIdeData);
  35275. args: ["aBoolean"],
  35276. source: "superSend: aBoolean\x0a\x09superSend := aBoolean",
  35277. referencedClasses: [],
  35278. //>>excludeEnd("ide");
  35279. messageSends: []
  35280. }),
  35281. $globals.SendNode);
  35282. $core.addMethod(
  35283. $core.method({
  35284. selector: "valueForReceiver:",
  35285. protocol: 'accessing',
  35286. fn: function (anObject){
  35287. var self=this;
  35288. function $SendNode(){return $globals.SendNode||(typeof SendNode=="undefined"?nil:SendNode)}
  35289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35290. return $core.withContext(function($ctx1) {
  35291. //>>excludeEnd("ctx");
  35292. var $2,$3,$5,$4,$6,$1,$receiver;
  35293. $2=$recv($SendNode())._new();
  35294. $recv($2)._position_(self._position());
  35295. $recv($2)._source_(self._source());
  35296. $3=$2;
  35297. $5=self._receiver();
  35298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35299. $ctx1.sendIdx["receiver"]=1;
  35300. //>>excludeEnd("ctx");
  35301. if(($receiver = $5) == null || $receiver.isNil){
  35302. $4=anObject;
  35303. } else {
  35304. $4=$recv(self._receiver())._valueForReceiver_(anObject);
  35305. };
  35306. $recv($3)._receiver_($4);
  35307. $recv($2)._selector_(self._selector());
  35308. $recv($2)._arguments_(self._arguments());
  35309. $6=$recv($2)._yourself();
  35310. $1=$6;
  35311. return $1;
  35312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35313. }, function($ctx1) {$ctx1.fill(self,"valueForReceiver:",{anObject:anObject},$globals.SendNode)});
  35314. //>>excludeEnd("ctx");
  35315. },
  35316. //>>excludeStart("ide", pragmas.excludeIdeData);
  35317. args: ["anObject"],
  35318. 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",
  35319. referencedClasses: ["SendNode"],
  35320. //>>excludeEnd("ide");
  35321. messageSends: ["position:", "new", "position", "source:", "source", "receiver:", "ifNil:ifNotNil:", "receiver", "valueForReceiver:", "selector:", "selector", "arguments:", "arguments", "yourself"]
  35322. }),
  35323. $globals.SendNode);
  35324. $core.addClass('SequenceNode', $globals.Node, ['temps', 'scope'], 'Compiler-AST');
  35325. //>>excludeStart("ide", pragmas.excludeIdeData);
  35326. $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).";
  35327. //>>excludeEnd("ide");
  35328. $core.addMethod(
  35329. $core.method({
  35330. selector: "accept:",
  35331. protocol: 'visiting',
  35332. fn: function (aVisitor){
  35333. var self=this;
  35334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35335. return $core.withContext(function($ctx1) {
  35336. //>>excludeEnd("ctx");
  35337. var $1;
  35338. $1=$recv(aVisitor)._visitSequenceNode_(self);
  35339. return $1;
  35340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35341. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.SequenceNode)});
  35342. //>>excludeEnd("ctx");
  35343. },
  35344. //>>excludeStart("ide", pragmas.excludeIdeData);
  35345. args: ["aVisitor"],
  35346. source: "accept: aVisitor\x0a\x09^ aVisitor visitSequenceNode: self",
  35347. referencedClasses: [],
  35348. //>>excludeEnd("ide");
  35349. messageSends: ["visitSequenceNode:"]
  35350. }),
  35351. $globals.SequenceNode);
  35352. $core.addMethod(
  35353. $core.method({
  35354. selector: "asBlockSequenceNode",
  35355. protocol: 'converting',
  35356. fn: function (){
  35357. var self=this;
  35358. function $BlockSequenceNode(){return $globals.BlockSequenceNode||(typeof BlockSequenceNode=="undefined"?nil:BlockSequenceNode)}
  35359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35360. return $core.withContext(function($ctx1) {
  35361. //>>excludeEnd("ctx");
  35362. var $2,$3,$1;
  35363. $2=$recv($BlockSequenceNode())._new();
  35364. $recv($2)._position_(self._position());
  35365. $recv($2)._source_(self._source());
  35366. $recv($2)._nodes_(self._nodes());
  35367. $recv($2)._temps_(self._temps());
  35368. $3=$recv($2)._yourself();
  35369. $1=$3;
  35370. return $1;
  35371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35372. }, function($ctx1) {$ctx1.fill(self,"asBlockSequenceNode",{},$globals.SequenceNode)});
  35373. //>>excludeEnd("ctx");
  35374. },
  35375. //>>excludeStart("ide", pragmas.excludeIdeData);
  35376. args: [],
  35377. 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",
  35378. referencedClasses: ["BlockSequenceNode"],
  35379. //>>excludeEnd("ide");
  35380. messageSends: ["position:", "new", "position", "source:", "source", "nodes:", "nodes", "temps:", "temps", "yourself"]
  35381. }),
  35382. $globals.SequenceNode);
  35383. $core.addMethod(
  35384. $core.method({
  35385. selector: "isSequenceNode",
  35386. protocol: 'testing',
  35387. fn: function (){
  35388. var self=this;
  35389. return true;
  35390. },
  35391. //>>excludeStart("ide", pragmas.excludeIdeData);
  35392. args: [],
  35393. source: "isSequenceNode\x0a\x09^ true",
  35394. referencedClasses: [],
  35395. //>>excludeEnd("ide");
  35396. messageSends: []
  35397. }),
  35398. $globals.SequenceNode);
  35399. $core.addMethod(
  35400. $core.method({
  35401. selector: "scope",
  35402. protocol: 'accessing',
  35403. fn: function (){
  35404. var self=this;
  35405. var $1;
  35406. $1=self["@scope"];
  35407. return $1;
  35408. },
  35409. //>>excludeStart("ide", pragmas.excludeIdeData);
  35410. args: [],
  35411. source: "scope\x0a\x09^ scope",
  35412. referencedClasses: [],
  35413. //>>excludeEnd("ide");
  35414. messageSends: []
  35415. }),
  35416. $globals.SequenceNode);
  35417. $core.addMethod(
  35418. $core.method({
  35419. selector: "scope:",
  35420. protocol: 'accessing',
  35421. fn: function (aLexicalScope){
  35422. var self=this;
  35423. self["@scope"]=aLexicalScope;
  35424. return self;
  35425. },
  35426. //>>excludeStart("ide", pragmas.excludeIdeData);
  35427. args: ["aLexicalScope"],
  35428. source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
  35429. referencedClasses: [],
  35430. //>>excludeEnd("ide");
  35431. messageSends: []
  35432. }),
  35433. $globals.SequenceNode);
  35434. $core.addMethod(
  35435. $core.method({
  35436. selector: "temps",
  35437. protocol: 'accessing',
  35438. fn: function (){
  35439. var self=this;
  35440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35441. return $core.withContext(function($ctx1) {
  35442. //>>excludeEnd("ctx");
  35443. var $2,$1,$receiver;
  35444. $2=self["@temps"];
  35445. if(($receiver = $2) == null || $receiver.isNil){
  35446. $1=[];
  35447. } else {
  35448. $1=$2;
  35449. };
  35450. return $1;
  35451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35452. }, function($ctx1) {$ctx1.fill(self,"temps",{},$globals.SequenceNode)});
  35453. //>>excludeEnd("ctx");
  35454. },
  35455. //>>excludeStart("ide", pragmas.excludeIdeData);
  35456. args: [],
  35457. source: "temps\x0a\x09^ temps ifNil: [ #() ]",
  35458. referencedClasses: [],
  35459. //>>excludeEnd("ide");
  35460. messageSends: ["ifNil:"]
  35461. }),
  35462. $globals.SequenceNode);
  35463. $core.addMethod(
  35464. $core.method({
  35465. selector: "temps:",
  35466. protocol: 'accessing',
  35467. fn: function (aCollection){
  35468. var self=this;
  35469. self["@temps"]=aCollection;
  35470. return self;
  35471. },
  35472. //>>excludeStart("ide", pragmas.excludeIdeData);
  35473. args: ["aCollection"],
  35474. source: "temps: aCollection\x0a\x09temps := aCollection",
  35475. referencedClasses: [],
  35476. //>>excludeEnd("ide");
  35477. messageSends: []
  35478. }),
  35479. $globals.SequenceNode);
  35480. $core.addClass('BlockSequenceNode', $globals.SequenceNode, [], 'Compiler-AST');
  35481. //>>excludeStart("ide", pragmas.excludeIdeData);
  35482. $globals.BlockSequenceNode.comment="I represent an special sequence node for block scopes.";
  35483. //>>excludeEnd("ide");
  35484. $core.addMethod(
  35485. $core.method({
  35486. selector: "accept:",
  35487. protocol: 'visiting',
  35488. fn: function (aVisitor){
  35489. var self=this;
  35490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35491. return $core.withContext(function($ctx1) {
  35492. //>>excludeEnd("ctx");
  35493. var $1;
  35494. $1=$recv(aVisitor)._visitBlockSequenceNode_(self);
  35495. return $1;
  35496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35497. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.BlockSequenceNode)});
  35498. //>>excludeEnd("ctx");
  35499. },
  35500. //>>excludeStart("ide", pragmas.excludeIdeData);
  35501. args: ["aVisitor"],
  35502. source: "accept: aVisitor\x0a\x09^ aVisitor visitBlockSequenceNode: self",
  35503. referencedClasses: [],
  35504. //>>excludeEnd("ide");
  35505. messageSends: ["visitBlockSequenceNode:"]
  35506. }),
  35507. $globals.BlockSequenceNode);
  35508. $core.addMethod(
  35509. $core.method({
  35510. selector: "isBlockSequenceNode",
  35511. protocol: 'testing',
  35512. fn: function (){
  35513. var self=this;
  35514. return true;
  35515. },
  35516. //>>excludeStart("ide", pragmas.excludeIdeData);
  35517. args: [],
  35518. source: "isBlockSequenceNode\x0a\x09^ true",
  35519. referencedClasses: [],
  35520. //>>excludeEnd("ide");
  35521. messageSends: []
  35522. }),
  35523. $globals.BlockSequenceNode);
  35524. $core.addClass('ValueNode', $globals.Node, ['value'], 'Compiler-AST');
  35525. //>>excludeStart("ide", pragmas.excludeIdeData);
  35526. $globals.ValueNode.comment="I represent a value node.";
  35527. //>>excludeEnd("ide");
  35528. $core.addMethod(
  35529. $core.method({
  35530. selector: "accept:",
  35531. protocol: 'visiting',
  35532. fn: function (aVisitor){
  35533. var self=this;
  35534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35535. return $core.withContext(function($ctx1) {
  35536. //>>excludeEnd("ctx");
  35537. var $1;
  35538. $1=$recv(aVisitor)._visitValueNode_(self);
  35539. return $1;
  35540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35541. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.ValueNode)});
  35542. //>>excludeEnd("ctx");
  35543. },
  35544. //>>excludeStart("ide", pragmas.excludeIdeData);
  35545. args: ["aVisitor"],
  35546. source: "accept: aVisitor\x0a\x09^ aVisitor visitValueNode: self",
  35547. referencedClasses: [],
  35548. //>>excludeEnd("ide");
  35549. messageSends: ["visitValueNode:"]
  35550. }),
  35551. $globals.ValueNode);
  35552. $core.addMethod(
  35553. $core.method({
  35554. selector: "isImmutable",
  35555. protocol: 'testing',
  35556. fn: function (){
  35557. var self=this;
  35558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35559. return $core.withContext(function($ctx1) {
  35560. //>>excludeEnd("ctx");
  35561. var $1;
  35562. $1=$recv(self._value())._isImmutable();
  35563. return $1;
  35564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35565. }, function($ctx1) {$ctx1.fill(self,"isImmutable",{},$globals.ValueNode)});
  35566. //>>excludeEnd("ctx");
  35567. },
  35568. //>>excludeStart("ide", pragmas.excludeIdeData);
  35569. args: [],
  35570. source: "isImmutable\x0a\x09^ self value isImmutable",
  35571. referencedClasses: [],
  35572. //>>excludeEnd("ide");
  35573. messageSends: ["isImmutable", "value"]
  35574. }),
  35575. $globals.ValueNode);
  35576. $core.addMethod(
  35577. $core.method({
  35578. selector: "isValueNode",
  35579. protocol: 'testing',
  35580. fn: function (){
  35581. var self=this;
  35582. return true;
  35583. },
  35584. //>>excludeStart("ide", pragmas.excludeIdeData);
  35585. args: [],
  35586. source: "isValueNode\x0a\x09^ true",
  35587. referencedClasses: [],
  35588. //>>excludeEnd("ide");
  35589. messageSends: []
  35590. }),
  35591. $globals.ValueNode);
  35592. $core.addMethod(
  35593. $core.method({
  35594. selector: "value",
  35595. protocol: 'accessing',
  35596. fn: function (){
  35597. var self=this;
  35598. var $1;
  35599. $1=self["@value"];
  35600. return $1;
  35601. },
  35602. //>>excludeStart("ide", pragmas.excludeIdeData);
  35603. args: [],
  35604. source: "value\x0a\x09^ value",
  35605. referencedClasses: [],
  35606. //>>excludeEnd("ide");
  35607. messageSends: []
  35608. }),
  35609. $globals.ValueNode);
  35610. $core.addMethod(
  35611. $core.method({
  35612. selector: "value:",
  35613. protocol: 'accessing',
  35614. fn: function (anObject){
  35615. var self=this;
  35616. self["@value"]=anObject;
  35617. return self;
  35618. },
  35619. //>>excludeStart("ide", pragmas.excludeIdeData);
  35620. args: ["anObject"],
  35621. source: "value: anObject\x0a\x09value := anObject",
  35622. referencedClasses: [],
  35623. //>>excludeEnd("ide");
  35624. messageSends: []
  35625. }),
  35626. $globals.ValueNode);
  35627. $core.addClass('VariableNode', $globals.ValueNode, ['assigned', 'binding'], 'Compiler-AST');
  35628. //>>excludeStart("ide", pragmas.excludeIdeData);
  35629. $globals.VariableNode.comment="I represent an variable node.";
  35630. //>>excludeEnd("ide");
  35631. $core.addMethod(
  35632. $core.method({
  35633. selector: "accept:",
  35634. protocol: 'visiting',
  35635. fn: function (aVisitor){
  35636. var self=this;
  35637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35638. return $core.withContext(function($ctx1) {
  35639. //>>excludeEnd("ctx");
  35640. var $1;
  35641. $1=$recv(aVisitor)._visitVariableNode_(self);
  35642. return $1;
  35643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35644. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.VariableNode)});
  35645. //>>excludeEnd("ctx");
  35646. },
  35647. //>>excludeStart("ide", pragmas.excludeIdeData);
  35648. args: ["aVisitor"],
  35649. source: "accept: aVisitor\x0a\x09^ aVisitor visitVariableNode: self",
  35650. referencedClasses: [],
  35651. //>>excludeEnd("ide");
  35652. messageSends: ["visitVariableNode:"]
  35653. }),
  35654. $globals.VariableNode);
  35655. $core.addMethod(
  35656. $core.method({
  35657. selector: "alias",
  35658. protocol: 'accessing',
  35659. fn: function (){
  35660. var self=this;
  35661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35662. return $core.withContext(function($ctx1) {
  35663. //>>excludeEnd("ctx");
  35664. var $1;
  35665. $1=$recv(self._binding())._alias();
  35666. return $1;
  35667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35668. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.VariableNode)});
  35669. //>>excludeEnd("ctx");
  35670. },
  35671. //>>excludeStart("ide", pragmas.excludeIdeData);
  35672. args: [],
  35673. source: "alias\x0a\x09^ self binding alias",
  35674. referencedClasses: [],
  35675. //>>excludeEnd("ide");
  35676. messageSends: ["alias", "binding"]
  35677. }),
  35678. $globals.VariableNode);
  35679. $core.addMethod(
  35680. $core.method({
  35681. selector: "assigned",
  35682. protocol: 'accessing',
  35683. fn: function (){
  35684. var self=this;
  35685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35686. return $core.withContext(function($ctx1) {
  35687. //>>excludeEnd("ctx");
  35688. var $2,$1,$receiver;
  35689. $2=self["@assigned"];
  35690. if(($receiver = $2) == null || $receiver.isNil){
  35691. $1=false;
  35692. } else {
  35693. $1=$2;
  35694. };
  35695. return $1;
  35696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35697. }, function($ctx1) {$ctx1.fill(self,"assigned",{},$globals.VariableNode)});
  35698. //>>excludeEnd("ctx");
  35699. },
  35700. //>>excludeStart("ide", pragmas.excludeIdeData);
  35701. args: [],
  35702. source: "assigned\x0a\x09^ assigned ifNil: [ false ]",
  35703. referencedClasses: [],
  35704. //>>excludeEnd("ide");
  35705. messageSends: ["ifNil:"]
  35706. }),
  35707. $globals.VariableNode);
  35708. $core.addMethod(
  35709. $core.method({
  35710. selector: "assigned:",
  35711. protocol: 'accessing',
  35712. fn: function (aBoolean){
  35713. var self=this;
  35714. self["@assigned"]=aBoolean;
  35715. return self;
  35716. },
  35717. //>>excludeStart("ide", pragmas.excludeIdeData);
  35718. args: ["aBoolean"],
  35719. source: "assigned: aBoolean\x0a\x09assigned := aBoolean",
  35720. referencedClasses: [],
  35721. //>>excludeEnd("ide");
  35722. messageSends: []
  35723. }),
  35724. $globals.VariableNode);
  35725. $core.addMethod(
  35726. $core.method({
  35727. selector: "beAssigned",
  35728. protocol: 'accessing',
  35729. fn: function (){
  35730. var self=this;
  35731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35732. return $core.withContext(function($ctx1) {
  35733. //>>excludeEnd("ctx");
  35734. $recv(self._binding())._validateAssignment();
  35735. self["@assigned"]=true;
  35736. return self;
  35737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35738. }, function($ctx1) {$ctx1.fill(self,"beAssigned",{},$globals.VariableNode)});
  35739. //>>excludeEnd("ctx");
  35740. },
  35741. //>>excludeStart("ide", pragmas.excludeIdeData);
  35742. args: [],
  35743. source: "beAssigned\x0a\x09self binding validateAssignment.\x0a\x09assigned := true",
  35744. referencedClasses: [],
  35745. //>>excludeEnd("ide");
  35746. messageSends: ["validateAssignment", "binding"]
  35747. }),
  35748. $globals.VariableNode);
  35749. $core.addMethod(
  35750. $core.method({
  35751. selector: "binding",
  35752. protocol: 'accessing',
  35753. fn: function (){
  35754. var self=this;
  35755. var $1;
  35756. $1=self["@binding"];
  35757. return $1;
  35758. },
  35759. //>>excludeStart("ide", pragmas.excludeIdeData);
  35760. args: [],
  35761. source: "binding\x0a\x09^ binding",
  35762. referencedClasses: [],
  35763. //>>excludeEnd("ide");
  35764. messageSends: []
  35765. }),
  35766. $globals.VariableNode);
  35767. $core.addMethod(
  35768. $core.method({
  35769. selector: "binding:",
  35770. protocol: 'accessing',
  35771. fn: function (aScopeVar){
  35772. var self=this;
  35773. self["@binding"]=aScopeVar;
  35774. return self;
  35775. },
  35776. //>>excludeStart("ide", pragmas.excludeIdeData);
  35777. args: ["aScopeVar"],
  35778. source: "binding: aScopeVar\x0a\x09binding := aScopeVar",
  35779. referencedClasses: [],
  35780. //>>excludeEnd("ide");
  35781. messageSends: []
  35782. }),
  35783. $globals.VariableNode);
  35784. $core.addMethod(
  35785. $core.method({
  35786. selector: "isArgument",
  35787. protocol: 'testing',
  35788. fn: function (){
  35789. var self=this;
  35790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35791. return $core.withContext(function($ctx1) {
  35792. //>>excludeEnd("ctx");
  35793. var $1;
  35794. $1=$recv(self._binding())._isArgVar();
  35795. return $1;
  35796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35797. }, function($ctx1) {$ctx1.fill(self,"isArgument",{},$globals.VariableNode)});
  35798. //>>excludeEnd("ctx");
  35799. },
  35800. //>>excludeStart("ide", pragmas.excludeIdeData);
  35801. args: [],
  35802. source: "isArgument\x0a\x09^ self binding isArgVar",
  35803. referencedClasses: [],
  35804. //>>excludeEnd("ide");
  35805. messageSends: ["isArgVar", "binding"]
  35806. }),
  35807. $globals.VariableNode);
  35808. $core.addMethod(
  35809. $core.method({
  35810. selector: "isImmutable",
  35811. protocol: 'testing',
  35812. fn: function (){
  35813. var self=this;
  35814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35815. return $core.withContext(function($ctx1) {
  35816. //>>excludeEnd("ctx");
  35817. var $1;
  35818. $1=$recv(self._binding())._isImmutable();
  35819. return $1;
  35820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35821. }, function($ctx1) {$ctx1.fill(self,"isImmutable",{},$globals.VariableNode)});
  35822. //>>excludeEnd("ctx");
  35823. },
  35824. //>>excludeStart("ide", pragmas.excludeIdeData);
  35825. args: [],
  35826. source: "isImmutable\x0a\x09^ self binding isImmutable",
  35827. referencedClasses: [],
  35828. //>>excludeEnd("ide");
  35829. messageSends: ["isImmutable", "binding"]
  35830. }),
  35831. $globals.VariableNode);
  35832. $core.addMethod(
  35833. $core.method({
  35834. selector: "isNavigationNode",
  35835. protocol: 'testing',
  35836. fn: function (){
  35837. var self=this;
  35838. return true;
  35839. },
  35840. //>>excludeStart("ide", pragmas.excludeIdeData);
  35841. args: [],
  35842. source: "isNavigationNode\x0a\x09^ true",
  35843. referencedClasses: [],
  35844. //>>excludeEnd("ide");
  35845. messageSends: []
  35846. }),
  35847. $globals.VariableNode);
  35848. $core.addMethod(
  35849. $core.method({
  35850. selector: "isVariableNode",
  35851. protocol: 'testing',
  35852. fn: function (){
  35853. var self=this;
  35854. return true;
  35855. },
  35856. //>>excludeStart("ide", pragmas.excludeIdeData);
  35857. args: [],
  35858. source: "isVariableNode\x0a\x09^ true",
  35859. referencedClasses: [],
  35860. //>>excludeEnd("ide");
  35861. messageSends: []
  35862. }),
  35863. $globals.VariableNode);
  35864. $core.addMethod(
  35865. $core.method({
  35866. selector: "navigationLink",
  35867. protocol: 'accessing',
  35868. fn: function (){
  35869. var self=this;
  35870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35871. return $core.withContext(function($ctx1) {
  35872. //>>excludeEnd("ctx");
  35873. var $1;
  35874. $1=self._value();
  35875. return $1;
  35876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35877. }, function($ctx1) {$ctx1.fill(self,"navigationLink",{},$globals.VariableNode)});
  35878. //>>excludeEnd("ctx");
  35879. },
  35880. //>>excludeStart("ide", pragmas.excludeIdeData);
  35881. args: [],
  35882. source: "navigationLink\x0a\x09^ self value",
  35883. referencedClasses: [],
  35884. //>>excludeEnd("ide");
  35885. messageSends: ["value"]
  35886. }),
  35887. $globals.VariableNode);
  35888. $core.addMethod(
  35889. $core.method({
  35890. selector: "ast",
  35891. protocol: '*Compiler-AST',
  35892. fn: function (){
  35893. var self=this;
  35894. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  35895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35896. return $core.withContext(function($ctx1) {
  35897. //>>excludeEnd("ctx");
  35898. var $1,$2;
  35899. $1=self._source();
  35900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35901. $ctx1.sendIdx["source"]=1;
  35902. //>>excludeEnd("ctx");
  35903. $recv($1)._ifEmpty_((function(){
  35904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35905. return $core.withContext(function($ctx2) {
  35906. //>>excludeEnd("ctx");
  35907. return self._error_("Method source is empty");
  35908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35909. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  35910. //>>excludeEnd("ctx");
  35911. }));
  35912. $2=$recv($Smalltalk())._parse_(self._source());
  35913. return $2;
  35914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35915. }, function($ctx1) {$ctx1.fill(self,"ast",{},$globals.CompiledMethod)});
  35916. //>>excludeEnd("ctx");
  35917. },
  35918. //>>excludeStart("ide", pragmas.excludeIdeData);
  35919. args: [],
  35920. source: "ast\x0a\x09self source ifEmpty: [ self error: 'Method source is empty' ].\x0a\x09\x0a\x09^ Smalltalk parse: self source",
  35921. referencedClasses: ["Smalltalk"],
  35922. //>>excludeEnd("ide");
  35923. messageSends: ["ifEmpty:", "source", "error:", "parse:"]
  35924. }),
  35925. $globals.CompiledMethod);
  35926. $core.addMethod(
  35927. $core.method({
  35928. selector: "isNode",
  35929. protocol: '*Compiler-AST',
  35930. fn: function (){
  35931. var self=this;
  35932. return false;
  35933. },
  35934. //>>excludeStart("ide", pragmas.excludeIdeData);
  35935. args: [],
  35936. source: "isNode\x0a\x09^ false",
  35937. referencedClasses: [],
  35938. //>>excludeEnd("ide");
  35939. messageSends: []
  35940. }),
  35941. $globals.Object);
  35942. });
  35943. define("amber_core/Compiler-IR", ["amber/boot", "amber_core/Compiler-Core", "amber_core/Kernel-Objects", "amber_core/Kernel-Methods"], function($boot){
  35944. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  35945. $core.addPackage('Compiler-IR');
  35946. $core.packages["Compiler-IR"].innerEval = function (expr) { return eval(expr); };
  35947. $core.packages["Compiler-IR"].transport = {"type":"amd","amdNamespace":"amber_core"};
  35948. $core.addClass('IRASTTranslator', $globals.NodeVisitor, ['source', 'theClass', 'method', 'sequence', 'nextAlias'], 'Compiler-IR');
  35949. //>>excludeStart("ide", pragmas.excludeIdeData);
  35950. $globals.IRASTTranslator.comment="I am the AST (abstract syntax tree) visitor responsible for building the intermediate representation graph.";
  35951. //>>excludeEnd("ide");
  35952. $core.addMethod(
  35953. $core.method({
  35954. selector: "alias:",
  35955. protocol: 'visiting',
  35956. fn: function (aNode){
  35957. var self=this;
  35958. var variable;
  35959. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  35960. function $AliasVar(){return $globals.AliasVar||(typeof AliasVar=="undefined"?nil:AliasVar)}
  35961. function $IRAssignment(){return $globals.IRAssignment||(typeof IRAssignment=="undefined"?nil:IRAssignment)}
  35962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35963. return $core.withContext(function($ctx1) {
  35964. //>>excludeEnd("ctx");
  35965. var $1,$2,$3,$4,$6,$5,$7,$8,$10,$11,$9,$12;
  35966. $1=$recv(aNode)._isImmutable();
  35967. if($core.assert($1)){
  35968. $2=self._visit_(aNode);
  35969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35970. $ctx1.sendIdx["visit:"]=1;
  35971. //>>excludeEnd("ctx");
  35972. return $2;
  35973. };
  35974. $3=$recv($IRVariable())._new();
  35975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35976. $ctx1.sendIdx["new"]=1;
  35977. //>>excludeEnd("ctx");
  35978. $4=$3;
  35979. $6=$recv($AliasVar())._new();
  35980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35981. $ctx1.sendIdx["new"]=2;
  35982. //>>excludeEnd("ctx");
  35983. $5=$recv($6)._name_("$".__comma(self._nextAlias()));
  35984. $recv($4)._variable_($5);
  35985. $7=$recv($3)._yourself();
  35986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35987. $ctx1.sendIdx["yourself"]=1;
  35988. //>>excludeEnd("ctx");
  35989. variable=$7;
  35990. $8=self._sequence();
  35991. $10=$recv($IRAssignment())._new();
  35992. $recv($10)._add_(variable);
  35993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35994. $ctx1.sendIdx["add:"]=2;
  35995. //>>excludeEnd("ctx");
  35996. $recv($10)._add_(self._visit_(aNode));
  35997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35998. $ctx1.sendIdx["add:"]=3;
  35999. //>>excludeEnd("ctx");
  36000. $11=$recv($10)._yourself();
  36001. $9=$11;
  36002. $recv($8)._add_($9);
  36003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36004. $ctx1.sendIdx["add:"]=1;
  36005. //>>excludeEnd("ctx");
  36006. $recv($recv(self._method())._internalVariables())._add_(variable);
  36007. $12=variable;
  36008. return $12;
  36009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36010. }, function($ctx1) {$ctx1.fill(self,"alias:",{aNode:aNode,variable:variable},$globals.IRASTTranslator)});
  36011. //>>excludeEnd("ctx");
  36012. },
  36013. //>>excludeStart("ide", pragmas.excludeIdeData);
  36014. args: ["aNode"],
  36015. 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",
  36016. referencedClasses: ["IRVariable", "AliasVar", "IRAssignment"],
  36017. //>>excludeEnd("ide");
  36018. messageSends: ["ifTrue:", "isImmutable", "visit:", "variable:", "new", "name:", ",", "nextAlias", "yourself", "add:", "sequence", "internalVariables", "method"]
  36019. }),
  36020. $globals.IRASTTranslator);
  36021. $core.addMethod(
  36022. $core.method({
  36023. selector: "aliasTemporally:",
  36024. protocol: 'visiting',
  36025. fn: function (aCollection){
  36026. var self=this;
  36027. var threshold,result;
  36028. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  36029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36030. return $core.withContext(function($ctx1) {
  36031. //>>excludeEnd("ctx");
  36032. var $1,$2,$4,$3,$5;
  36033. threshold=(0);
  36034. $recv(aCollection)._withIndexDo_((function(each,i){
  36035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36036. return $core.withContext(function($ctx2) {
  36037. //>>excludeEnd("ctx");
  36038. $1=$recv(each)._subtreeNeedsAliasing();
  36039. if($core.assert($1)){
  36040. threshold=i;
  36041. return threshold;
  36042. };
  36043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36044. }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,1)});
  36045. //>>excludeEnd("ctx");
  36046. }));
  36047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36048. $ctx1.sendIdx["withIndexDo:"]=1;
  36049. //>>excludeEnd("ctx");
  36050. result=$recv($OrderedCollection())._new();
  36051. $recv(aCollection)._withIndexDo_((function(each,i){
  36052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36053. return $core.withContext(function($ctx2) {
  36054. //>>excludeEnd("ctx");
  36055. $2=result;
  36056. $4=$recv(i).__lt_eq(threshold);
  36057. if($core.assert($4)){
  36058. $3=self._alias_(each);
  36059. } else {
  36060. $3=self._visit_(each);
  36061. };
  36062. return $recv($2)._add_($3);
  36063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36064. }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,3)});
  36065. //>>excludeEnd("ctx");
  36066. }));
  36067. $5=result;
  36068. return $5;
  36069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36070. }, function($ctx1) {$ctx1.fill(self,"aliasTemporally:",{aCollection:aCollection,threshold:threshold,result:result},$globals.IRASTTranslator)});
  36071. //>>excludeEnd("ctx");
  36072. },
  36073. //>>excludeStart("ide", pragmas.excludeIdeData);
  36074. args: ["aCollection"],
  36075. 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",
  36076. referencedClasses: ["OrderedCollection"],
  36077. //>>excludeEnd("ide");
  36078. messageSends: ["withIndexDo:", "ifTrue:", "subtreeNeedsAliasing", "new", "add:", "ifTrue:ifFalse:", "<=", "alias:", "visit:"]
  36079. }),
  36080. $globals.IRASTTranslator);
  36081. $core.addMethod(
  36082. $core.method({
  36083. selector: "method",
  36084. protocol: 'accessing',
  36085. fn: function (){
  36086. var self=this;
  36087. var $1;
  36088. $1=self["@method"];
  36089. return $1;
  36090. },
  36091. //>>excludeStart("ide", pragmas.excludeIdeData);
  36092. args: [],
  36093. source: "method\x0a\x09^ method",
  36094. referencedClasses: [],
  36095. //>>excludeEnd("ide");
  36096. messageSends: []
  36097. }),
  36098. $globals.IRASTTranslator);
  36099. $core.addMethod(
  36100. $core.method({
  36101. selector: "method:",
  36102. protocol: 'accessing',
  36103. fn: function (anIRMethod){
  36104. var self=this;
  36105. self["@method"]=anIRMethod;
  36106. return self;
  36107. },
  36108. //>>excludeStart("ide", pragmas.excludeIdeData);
  36109. args: ["anIRMethod"],
  36110. source: "method: anIRMethod\x0a\x09method := anIRMethod",
  36111. referencedClasses: [],
  36112. //>>excludeEnd("ide");
  36113. messageSends: []
  36114. }),
  36115. $globals.IRASTTranslator);
  36116. $core.addMethod(
  36117. $core.method({
  36118. selector: "nextAlias",
  36119. protocol: 'accessing',
  36120. fn: function (){
  36121. var self=this;
  36122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36123. return $core.withContext(function($ctx1) {
  36124. //>>excludeEnd("ctx");
  36125. var $1,$2,$receiver;
  36126. $1=self["@nextAlias"];
  36127. if(($receiver = $1) == null || $receiver.isNil){
  36128. self["@nextAlias"]=(0);
  36129. self["@nextAlias"];
  36130. } else {
  36131. $1;
  36132. };
  36133. self["@nextAlias"]=$recv(self["@nextAlias"]).__plus((1));
  36134. $2=$recv(self["@nextAlias"])._asString();
  36135. return $2;
  36136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36137. }, function($ctx1) {$ctx1.fill(self,"nextAlias",{},$globals.IRASTTranslator)});
  36138. //>>excludeEnd("ctx");
  36139. },
  36140. //>>excludeStart("ide", pragmas.excludeIdeData);
  36141. args: [],
  36142. source: "nextAlias\x0a\x09nextAlias ifNil: [ nextAlias := 0 ].\x0a\x09nextAlias := nextAlias + 1.\x0a\x09^ nextAlias asString",
  36143. referencedClasses: [],
  36144. //>>excludeEnd("ide");
  36145. messageSends: ["ifNil:", "+", "asString"]
  36146. }),
  36147. $globals.IRASTTranslator);
  36148. $core.addMethod(
  36149. $core.method({
  36150. selector: "sequence",
  36151. protocol: 'accessing',
  36152. fn: function (){
  36153. var self=this;
  36154. var $1;
  36155. $1=self["@sequence"];
  36156. return $1;
  36157. },
  36158. //>>excludeStart("ide", pragmas.excludeIdeData);
  36159. args: [],
  36160. source: "sequence\x0a\x09^ sequence",
  36161. referencedClasses: [],
  36162. //>>excludeEnd("ide");
  36163. messageSends: []
  36164. }),
  36165. $globals.IRASTTranslator);
  36166. $core.addMethod(
  36167. $core.method({
  36168. selector: "sequence:",
  36169. protocol: 'accessing',
  36170. fn: function (anIRSequence){
  36171. var self=this;
  36172. self["@sequence"]=anIRSequence;
  36173. return self;
  36174. },
  36175. //>>excludeStart("ide", pragmas.excludeIdeData);
  36176. args: ["anIRSequence"],
  36177. source: "sequence: anIRSequence\x0a\x09sequence := anIRSequence",
  36178. referencedClasses: [],
  36179. //>>excludeEnd("ide");
  36180. messageSends: []
  36181. }),
  36182. $globals.IRASTTranslator);
  36183. $core.addMethod(
  36184. $core.method({
  36185. selector: "source",
  36186. protocol: 'accessing',
  36187. fn: function (){
  36188. var self=this;
  36189. var $1;
  36190. $1=self["@source"];
  36191. return $1;
  36192. },
  36193. //>>excludeStart("ide", pragmas.excludeIdeData);
  36194. args: [],
  36195. source: "source\x0a\x09^ source",
  36196. referencedClasses: [],
  36197. //>>excludeEnd("ide");
  36198. messageSends: []
  36199. }),
  36200. $globals.IRASTTranslator);
  36201. $core.addMethod(
  36202. $core.method({
  36203. selector: "source:",
  36204. protocol: 'accessing',
  36205. fn: function (aString){
  36206. var self=this;
  36207. self["@source"]=aString;
  36208. return self;
  36209. },
  36210. //>>excludeStart("ide", pragmas.excludeIdeData);
  36211. args: ["aString"],
  36212. source: "source: aString\x0a\x09source := aString",
  36213. referencedClasses: [],
  36214. //>>excludeEnd("ide");
  36215. messageSends: []
  36216. }),
  36217. $globals.IRASTTranslator);
  36218. $core.addMethod(
  36219. $core.method({
  36220. selector: "theClass",
  36221. protocol: 'accessing',
  36222. fn: function (){
  36223. var self=this;
  36224. var $1;
  36225. $1=self["@theClass"];
  36226. return $1;
  36227. },
  36228. //>>excludeStart("ide", pragmas.excludeIdeData);
  36229. args: [],
  36230. source: "theClass\x0a\x09^ theClass",
  36231. referencedClasses: [],
  36232. //>>excludeEnd("ide");
  36233. messageSends: []
  36234. }),
  36235. $globals.IRASTTranslator);
  36236. $core.addMethod(
  36237. $core.method({
  36238. selector: "theClass:",
  36239. protocol: 'accessing',
  36240. fn: function (aClass){
  36241. var self=this;
  36242. self["@theClass"]=aClass;
  36243. return self;
  36244. },
  36245. //>>excludeStart("ide", pragmas.excludeIdeData);
  36246. args: ["aClass"],
  36247. source: "theClass: aClass\x0a\x09theClass := aClass",
  36248. referencedClasses: [],
  36249. //>>excludeEnd("ide");
  36250. messageSends: []
  36251. }),
  36252. $globals.IRASTTranslator);
  36253. $core.addMethod(
  36254. $core.method({
  36255. selector: "visitAssignmentNode:",
  36256. protocol: 'visiting',
  36257. fn: function (aNode){
  36258. var self=this;
  36259. var left,right,assignment;
  36260. function $IRAssignment(){return $globals.IRAssignment||(typeof IRAssignment=="undefined"?nil:IRAssignment)}
  36261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36262. return $core.withContext(function($ctx1) {
  36263. //>>excludeEnd("ctx");
  36264. var $1,$3,$4,$2,$5;
  36265. right=self._visit_($recv(aNode)._right());
  36266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36267. $ctx1.sendIdx["visit:"]=1;
  36268. //>>excludeEnd("ctx");
  36269. left=self._visit_($recv(aNode)._left());
  36270. $1=self._sequence();
  36271. $3=$recv($IRAssignment())._new();
  36272. $recv($3)._add_(left);
  36273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36274. $ctx1.sendIdx["add:"]=2;
  36275. //>>excludeEnd("ctx");
  36276. $recv($3)._add_(right);
  36277. $4=$recv($3)._yourself();
  36278. $2=$4;
  36279. $recv($1)._add_($2);
  36280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36281. $ctx1.sendIdx["add:"]=1;
  36282. //>>excludeEnd("ctx");
  36283. $5=left;
  36284. return $5;
  36285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36286. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode,left:left,right:right,assignment:assignment},$globals.IRASTTranslator)});
  36287. //>>excludeEnd("ctx");
  36288. },
  36289. //>>excludeStart("ide", pragmas.excludeIdeData);
  36290. args: ["aNode"],
  36291. 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",
  36292. referencedClasses: ["IRAssignment"],
  36293. //>>excludeEnd("ide");
  36294. messageSends: ["visit:", "right", "left", "add:", "sequence", "new", "yourself"]
  36295. }),
  36296. $globals.IRASTTranslator);
  36297. $core.addMethod(
  36298. $core.method({
  36299. selector: "visitBlockNode:",
  36300. protocol: 'visiting',
  36301. fn: function (aNode){
  36302. var self=this;
  36303. var closure;
  36304. function $IRClosure(){return $globals.IRClosure||(typeof IRClosure=="undefined"?nil:IRClosure)}
  36305. function $IRTempDeclaration(){return $globals.IRTempDeclaration||(typeof IRTempDeclaration=="undefined"?nil:IRTempDeclaration)}
  36306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36307. return $core.withContext(function($ctx1) {
  36308. //>>excludeEnd("ctx");
  36309. var $1,$2,$3,$4,$6,$5,$7,$8,$9;
  36310. $1=$recv($IRClosure())._new();
  36311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36312. $ctx1.sendIdx["new"]=1;
  36313. //>>excludeEnd("ctx");
  36314. $recv($1)._arguments_($recv(aNode)._parameters());
  36315. $recv($1)._requiresSmalltalkContext_($recv(aNode)._requiresSmalltalkContext());
  36316. $2=$1;
  36317. $3=$recv(aNode)._scope();
  36318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36319. $ctx1.sendIdx["scope"]=1;
  36320. //>>excludeEnd("ctx");
  36321. $recv($2)._scope_($3);
  36322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36323. $ctx1.sendIdx["scope:"]=1;
  36324. //>>excludeEnd("ctx");
  36325. $4=$recv($1)._yourself();
  36326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36327. $ctx1.sendIdx["yourself"]=1;
  36328. //>>excludeEnd("ctx");
  36329. closure=$4;
  36330. $6=$recv(aNode)._scope();
  36331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36332. $ctx1.sendIdx["scope"]=2;
  36333. //>>excludeEnd("ctx");
  36334. $5=$recv($6)._temps();
  36335. $recv($5)._do_((function(each){
  36336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36337. return $core.withContext(function($ctx2) {
  36338. //>>excludeEnd("ctx");
  36339. $7=$recv($IRTempDeclaration())._new();
  36340. $recv($7)._name_($recv(each)._name());
  36341. $recv($7)._scope_($recv(aNode)._scope());
  36342. $8=$recv($7)._yourself();
  36343. return $recv(closure)._add_($8);
  36344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36345. $ctx2.sendIdx["add:"]=1;
  36346. //>>excludeEnd("ctx");
  36347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36348. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  36349. //>>excludeEnd("ctx");
  36350. }));
  36351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36352. $ctx1.sendIdx["do:"]=1;
  36353. //>>excludeEnd("ctx");
  36354. $recv($recv(aNode)._nodes())._do_((function(each){
  36355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36356. return $core.withContext(function($ctx2) {
  36357. //>>excludeEnd("ctx");
  36358. return $recv(closure)._add_(self._visit_(each));
  36359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36360. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  36361. //>>excludeEnd("ctx");
  36362. }));
  36363. $9=closure;
  36364. return $9;
  36365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36366. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode,closure:closure},$globals.IRASTTranslator)});
  36367. //>>excludeEnd("ctx");
  36368. },
  36369. //>>excludeStart("ide", pragmas.excludeIdeData);
  36370. args: ["aNode"],
  36371. 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",
  36372. referencedClasses: ["IRClosure", "IRTempDeclaration"],
  36373. //>>excludeEnd("ide");
  36374. messageSends: ["arguments:", "new", "parameters", "requiresSmalltalkContext:", "requiresSmalltalkContext", "scope:", "scope", "yourself", "do:", "temps", "add:", "name:", "name", "nodes", "visit:"]
  36375. }),
  36376. $globals.IRASTTranslator);
  36377. $core.addMethod(
  36378. $core.method({
  36379. selector: "visitBlockSequenceNode:",
  36380. protocol: 'visiting',
  36381. fn: function (aNode){
  36382. var self=this;
  36383. function $IRBlockSequence(){return $globals.IRBlockSequence||(typeof IRBlockSequence=="undefined"?nil:IRBlockSequence)}
  36384. function $IRBlockReturn(){return $globals.IRBlockReturn||(typeof IRBlockReturn=="undefined"?nil:IRBlockReturn)}
  36385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36386. return $core.withContext(function($ctx1) {
  36387. //>>excludeEnd("ctx");
  36388. var $2,$3,$5,$4,$6,$7,$10,$9,$8,$11,$13,$14,$17,$16,$15,$18,$12,$1;
  36389. $2=$recv($IRBlockSequence())._new();
  36390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36391. $ctx1.sendIdx["new"]=1;
  36392. //>>excludeEnd("ctx");
  36393. $1=self._withSequence_do_($2,(function(){
  36394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36395. return $core.withContext(function($ctx2) {
  36396. //>>excludeEnd("ctx");
  36397. $3=$recv(aNode)._nodes();
  36398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36399. $ctx2.sendIdx["nodes"]=1;
  36400. //>>excludeEnd("ctx");
  36401. return $recv($3)._ifNotEmpty_((function(){
  36402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36403. return $core.withContext(function($ctx3) {
  36404. //>>excludeEnd("ctx");
  36405. $5=$recv(aNode)._nodes();
  36406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36407. $ctx3.sendIdx["nodes"]=2;
  36408. //>>excludeEnd("ctx");
  36409. $4=$recv($5)._allButLast();
  36410. $recv($4)._do_((function(each){
  36411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36412. return $core.withContext(function($ctx4) {
  36413. //>>excludeEnd("ctx");
  36414. $6=self._sequence();
  36415. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36416. $ctx4.sendIdx["sequence"]=1;
  36417. //>>excludeEnd("ctx");
  36418. $7=self._visitOrAlias_(each);
  36419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36420. $ctx4.sendIdx["visitOrAlias:"]=1;
  36421. //>>excludeEnd("ctx");
  36422. return $recv($6)._add_($7);
  36423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36424. $ctx4.sendIdx["add:"]=1;
  36425. //>>excludeEnd("ctx");
  36426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36427. }, function($ctx4) {$ctx4.fillBlock({each:each},$ctx3,3)});
  36428. //>>excludeEnd("ctx");
  36429. }));
  36430. $10=$recv(aNode)._nodes();
  36431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36432. $ctx3.sendIdx["nodes"]=3;
  36433. //>>excludeEnd("ctx");
  36434. $9=$recv($10)._last();
  36435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36436. $ctx3.sendIdx["last"]=1;
  36437. //>>excludeEnd("ctx");
  36438. $8=$recv($9)._isReturnNode();
  36439. if($core.assert($8)){
  36440. return $recv(self._sequence())._add_(self._visitOrAlias_($recv($recv(aNode)._nodes())._last()));
  36441. } else {
  36442. $11=self._sequence();
  36443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36444. $ctx3.sendIdx["sequence"]=2;
  36445. //>>excludeEnd("ctx");
  36446. $13=$recv($IRBlockReturn())._new();
  36447. $14=$13;
  36448. $17=$recv(aNode)._nodes();
  36449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36450. $ctx3.sendIdx["nodes"]=4;
  36451. //>>excludeEnd("ctx");
  36452. $16=$recv($17)._last();
  36453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36454. $ctx3.sendIdx["last"]=2;
  36455. //>>excludeEnd("ctx");
  36456. $15=self._visitOrAlias_($16);
  36457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36458. $ctx3.sendIdx["visitOrAlias:"]=2;
  36459. //>>excludeEnd("ctx");
  36460. $recv($14)._add_($15);
  36461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36462. $ctx3.sendIdx["add:"]=3;
  36463. //>>excludeEnd("ctx");
  36464. $18=$recv($13)._yourself();
  36465. $12=$18;
  36466. return $recv($11)._add_($12);
  36467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36468. $ctx3.sendIdx["add:"]=2;
  36469. //>>excludeEnd("ctx");
  36470. };
  36471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36472. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  36473. //>>excludeEnd("ctx");
  36474. }));
  36475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36476. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  36477. //>>excludeEnd("ctx");
  36478. }));
  36479. return $1;
  36480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36481. }, function($ctx1) {$ctx1.fill(self,"visitBlockSequenceNode:",{aNode:aNode},$globals.IRASTTranslator)});
  36482. //>>excludeEnd("ctx");
  36483. },
  36484. //>>excludeStart("ide", pragmas.excludeIdeData);
  36485. args: ["aNode"],
  36486. 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) ] ]]",
  36487. referencedClasses: ["IRBlockSequence", "IRBlockReturn"],
  36488. //>>excludeEnd("ide");
  36489. messageSends: ["withSequence:do:", "new", "ifNotEmpty:", "nodes", "do:", "allButLast", "add:", "sequence", "visitOrAlias:", "ifFalse:ifTrue:", "isReturnNode", "last", "yourself"]
  36490. }),
  36491. $globals.IRASTTranslator);
  36492. $core.addMethod(
  36493. $core.method({
  36494. selector: "visitCascadeNode:",
  36495. protocol: 'visiting',
  36496. fn: function (aNode){
  36497. var self=this;
  36498. var alias,receiver;
  36499. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  36500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36501. return $core.withContext(function($ctx1) {
  36502. //>>excludeEnd("ctx");
  36503. var $2,$1,$3,$5,$4,$6;
  36504. $2=$recv(aNode)._receiver();
  36505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36506. $ctx1.sendIdx["receiver"]=1;
  36507. //>>excludeEnd("ctx");
  36508. $1=$recv($2)._isImmutable();
  36509. if($core.assert($1)){
  36510. receiver=$recv(aNode)._receiver();
  36511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36512. $ctx1.sendIdx["receiver"]=2;
  36513. //>>excludeEnd("ctx");
  36514. receiver;
  36515. } else {
  36516. alias=self._alias_($recv(aNode)._receiver());
  36517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36518. $ctx1.sendIdx["alias:"]=1;
  36519. //>>excludeEnd("ctx");
  36520. alias;
  36521. receiver=$recv($recv($VariableNode())._new())._binding_($recv(alias)._variable());
  36522. receiver;
  36523. };
  36524. $3=$recv(aNode)._nodes();
  36525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36526. $ctx1.sendIdx["nodes"]=1;
  36527. //>>excludeEnd("ctx");
  36528. $recv($3)._do_((function(each){
  36529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36530. return $core.withContext(function($ctx2) {
  36531. //>>excludeEnd("ctx");
  36532. return $recv(each)._receiver_(receiver);
  36533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36534. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  36535. //>>excludeEnd("ctx");
  36536. }));
  36537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36538. $ctx1.sendIdx["do:"]=1;
  36539. //>>excludeEnd("ctx");
  36540. $5=$recv(aNode)._nodes();
  36541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36542. $ctx1.sendIdx["nodes"]=2;
  36543. //>>excludeEnd("ctx");
  36544. $4=$recv($5)._allButLast();
  36545. $recv($4)._do_((function(each){
  36546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36547. return $core.withContext(function($ctx2) {
  36548. //>>excludeEnd("ctx");
  36549. return $recv(self._sequence())._add_(self._visit_(each));
  36550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36551. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  36552. //>>excludeEnd("ctx");
  36553. }));
  36554. $6=self._alias_($recv($recv(aNode)._nodes())._last());
  36555. return $6;
  36556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36557. }, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode,alias:alias,receiver:receiver},$globals.IRASTTranslator)});
  36558. //>>excludeEnd("ctx");
  36559. },
  36560. //>>excludeStart("ide", pragmas.excludeIdeData);
  36561. args: ["aNode"],
  36562. 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",
  36563. referencedClasses: ["VariableNode"],
  36564. //>>excludeEnd("ide");
  36565. messageSends: ["ifTrue:ifFalse:", "isImmutable", "receiver", "alias:", "binding:", "new", "variable", "do:", "nodes", "receiver:", "allButLast", "add:", "sequence", "visit:", "last"]
  36566. }),
  36567. $globals.IRASTTranslator);
  36568. $core.addMethod(
  36569. $core.method({
  36570. selector: "visitDynamicArrayNode:",
  36571. protocol: 'visiting',
  36572. fn: function (aNode){
  36573. var self=this;
  36574. var array;
  36575. function $IRDynamicArray(){return $globals.IRDynamicArray||(typeof IRDynamicArray=="undefined"?nil:IRDynamicArray)}
  36576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36577. return $core.withContext(function($ctx1) {
  36578. //>>excludeEnd("ctx");
  36579. var $1;
  36580. array=$recv($IRDynamicArray())._new();
  36581. $recv(self._aliasTemporally_($recv(aNode)._nodes()))._do_((function(each){
  36582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36583. return $core.withContext(function($ctx2) {
  36584. //>>excludeEnd("ctx");
  36585. return $recv(array)._add_(each);
  36586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36587. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  36588. //>>excludeEnd("ctx");
  36589. }));
  36590. $1=array;
  36591. return $1;
  36592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36593. }, function($ctx1) {$ctx1.fill(self,"visitDynamicArrayNode:",{aNode:aNode,array:array},$globals.IRASTTranslator)});
  36594. //>>excludeEnd("ctx");
  36595. },
  36596. //>>excludeStart("ide", pragmas.excludeIdeData);
  36597. args: ["aNode"],
  36598. source: "visitDynamicArrayNode: aNode\x0a\x09| array |\x0a\x09array := IRDynamicArray new.\x0a\x09(self aliasTemporally: aNode nodes) do: [ :each | array add: each ].\x0a\x09^ array",
  36599. referencedClasses: ["IRDynamicArray"],
  36600. //>>excludeEnd("ide");
  36601. messageSends: ["new", "do:", "aliasTemporally:", "nodes", "add:"]
  36602. }),
  36603. $globals.IRASTTranslator);
  36604. $core.addMethod(
  36605. $core.method({
  36606. selector: "visitDynamicDictionaryNode:",
  36607. protocol: 'visiting',
  36608. fn: function (aNode){
  36609. var self=this;
  36610. var dictionary;
  36611. function $IRDynamicDictionary(){return $globals.IRDynamicDictionary||(typeof IRDynamicDictionary=="undefined"?nil:IRDynamicDictionary)}
  36612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36613. return $core.withContext(function($ctx1) {
  36614. //>>excludeEnd("ctx");
  36615. var $1;
  36616. dictionary=$recv($IRDynamicDictionary())._new();
  36617. $recv(self._aliasTemporally_($recv(aNode)._nodes()))._do_((function(each){
  36618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36619. return $core.withContext(function($ctx2) {
  36620. //>>excludeEnd("ctx");
  36621. return $recv(dictionary)._add_(each);
  36622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36623. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  36624. //>>excludeEnd("ctx");
  36625. }));
  36626. $1=dictionary;
  36627. return $1;
  36628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36629. }, function($ctx1) {$ctx1.fill(self,"visitDynamicDictionaryNode:",{aNode:aNode,dictionary:dictionary},$globals.IRASTTranslator)});
  36630. //>>excludeEnd("ctx");
  36631. },
  36632. //>>excludeStart("ide", pragmas.excludeIdeData);
  36633. args: ["aNode"],
  36634. source: "visitDynamicDictionaryNode: aNode\x0a\x09| dictionary |\x0a\x09dictionary := IRDynamicDictionary new.\x0a\x09(self aliasTemporally: aNode nodes) do: [ :each | dictionary add: each ].\x0a\x09^ dictionary",
  36635. referencedClasses: ["IRDynamicDictionary"],
  36636. //>>excludeEnd("ide");
  36637. messageSends: ["new", "do:", "aliasTemporally:", "nodes", "add:"]
  36638. }),
  36639. $globals.IRASTTranslator);
  36640. $core.addMethod(
  36641. $core.method({
  36642. selector: "visitJSStatementNode:",
  36643. protocol: 'visiting',
  36644. fn: function (aNode){
  36645. var self=this;
  36646. function $IRVerbatim(){return $globals.IRVerbatim||(typeof IRVerbatim=="undefined"?nil:IRVerbatim)}
  36647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36648. return $core.withContext(function($ctx1) {
  36649. //>>excludeEnd("ctx");
  36650. var $2,$3,$1;
  36651. $2=$recv($IRVerbatim())._new();
  36652. $recv($2)._source_($recv($recv(aNode)._source())._crlfSanitized());
  36653. $3=$recv($2)._yourself();
  36654. $1=$3;
  36655. return $1;
  36656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36657. }, function($ctx1) {$ctx1.fill(self,"visitJSStatementNode:",{aNode:aNode},$globals.IRASTTranslator)});
  36658. //>>excludeEnd("ctx");
  36659. },
  36660. //>>excludeStart("ide", pragmas.excludeIdeData);
  36661. args: ["aNode"],
  36662. source: "visitJSStatementNode: aNode\x0a\x09^ IRVerbatim new\x0a\x09\x09source: aNode source crlfSanitized;\x0a\x09\x09yourself",
  36663. referencedClasses: ["IRVerbatim"],
  36664. //>>excludeEnd("ide");
  36665. messageSends: ["source:", "new", "crlfSanitized", "source", "yourself"]
  36666. }),
  36667. $globals.IRASTTranslator);
  36668. $core.addMethod(
  36669. $core.method({
  36670. selector: "visitMethodNode:",
  36671. protocol: 'visiting',
  36672. fn: function (aNode){
  36673. var self=this;
  36674. function $IRMethod(){return $globals.IRMethod||(typeof IRMethod=="undefined"?nil:IRMethod)}
  36675. function $IRTempDeclaration(){return $globals.IRTempDeclaration||(typeof IRTempDeclaration=="undefined"?nil:IRTempDeclaration)}
  36676. function $IRReturn(){return $globals.IRReturn||(typeof IRReturn=="undefined"?nil:IRReturn)}
  36677. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  36678. function $IRVerbatim(){return $globals.IRVerbatim||(typeof IRVerbatim=="undefined"?nil:IRVerbatim)}
  36679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36680. return $core.withContext(function($ctx1) {
  36681. //>>excludeEnd("ctx");
  36682. 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;
  36683. $2=$recv($IRMethod())._new();
  36684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36685. $ctx1.sendIdx["new"]=1;
  36686. //>>excludeEnd("ctx");
  36687. $recv($2)._source_($recv(self._source())._crlfSanitized());
  36688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36689. $ctx1.sendIdx["source:"]=1;
  36690. //>>excludeEnd("ctx");
  36691. $recv($2)._theClass_(self._theClass());
  36692. $recv($2)._arguments_($recv(aNode)._arguments());
  36693. $recv($2)._selector_($recv(aNode)._selector());
  36694. $recv($2)._sendIndexes_($recv(aNode)._sendIndexes());
  36695. $recv($2)._superSends_($recv(aNode)._superSends());
  36696. $recv($2)._requiresSmalltalkContext_($recv(aNode)._requiresSmalltalkContext());
  36697. $recv($2)._classReferences_($recv(aNode)._classReferences());
  36698. $3=$2;
  36699. $4=$recv(aNode)._scope();
  36700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36701. $ctx1.sendIdx["scope"]=1;
  36702. //>>excludeEnd("ctx");
  36703. $recv($3)._scope_($4);
  36704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36705. $ctx1.sendIdx["scope:"]=1;
  36706. //>>excludeEnd("ctx");
  36707. $5=$recv($2)._yourself();
  36708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36709. $ctx1.sendIdx["yourself"]=1;
  36710. //>>excludeEnd("ctx");
  36711. $1=$5;
  36712. self._method_($1);
  36713. $7=$recv(aNode)._scope();
  36714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36715. $ctx1.sendIdx["scope"]=2;
  36716. //>>excludeEnd("ctx");
  36717. $6=$recv($7)._temps();
  36718. $recv($6)._do_((function(each){
  36719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36720. return $core.withContext(function($ctx2) {
  36721. //>>excludeEnd("ctx");
  36722. $8=self._method();
  36723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36724. $ctx2.sendIdx["method"]=1;
  36725. //>>excludeEnd("ctx");
  36726. $10=$recv($IRTempDeclaration())._new();
  36727. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36728. $ctx2.sendIdx["new"]=2;
  36729. //>>excludeEnd("ctx");
  36730. $recv($10)._name_($recv(each)._name());
  36731. $11=$10;
  36732. $12=$recv(aNode)._scope();
  36733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36734. $ctx2.sendIdx["scope"]=3;
  36735. //>>excludeEnd("ctx");
  36736. $recv($11)._scope_($12);
  36737. $13=$recv($10)._yourself();
  36738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36739. $ctx2.sendIdx["yourself"]=2;
  36740. //>>excludeEnd("ctx");
  36741. $9=$13;
  36742. return $recv($8)._add_($9);
  36743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36744. $ctx2.sendIdx["add:"]=1;
  36745. //>>excludeEnd("ctx");
  36746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36747. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  36748. //>>excludeEnd("ctx");
  36749. }));
  36750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36751. $ctx1.sendIdx["do:"]=1;
  36752. //>>excludeEnd("ctx");
  36753. $recv($recv(aNode)._nodes())._do_((function(each){
  36754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36755. return $core.withContext(function($ctx2) {
  36756. //>>excludeEnd("ctx");
  36757. $14=self._method();
  36758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36759. $ctx2.sendIdx["method"]=2;
  36760. //>>excludeEnd("ctx");
  36761. return $recv($14)._add_(self._visit_(each));
  36762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36763. $ctx2.sendIdx["add:"]=2;
  36764. //>>excludeEnd("ctx");
  36765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36766. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  36767. //>>excludeEnd("ctx");
  36768. }));
  36769. $16=$recv(aNode)._scope();
  36770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36771. $ctx1.sendIdx["scope"]=4;
  36772. //>>excludeEnd("ctx");
  36773. $15=$recv($16)._hasLocalReturn();
  36774. if(!$core.assert($15)){
  36775. $17=self._method();
  36776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36777. $ctx1.sendIdx["method"]=3;
  36778. //>>excludeEnd("ctx");
  36779. $18=$17;
  36780. $20=$recv($IRReturn())._new();
  36781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36782. $ctx1.sendIdx["new"]=3;
  36783. //>>excludeEnd("ctx");
  36784. $21=$20;
  36785. $23=$recv($IRVariable())._new();
  36786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36787. $ctx1.sendIdx["new"]=4;
  36788. //>>excludeEnd("ctx");
  36789. $recv($23)._variable_($recv($recv($recv(aNode)._scope())._pseudoVars())._at_("self"));
  36790. $24=$recv($23)._yourself();
  36791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36792. $ctx1.sendIdx["yourself"]=3;
  36793. //>>excludeEnd("ctx");
  36794. $22=$24;
  36795. $recv($21)._add_($22);
  36796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36797. $ctx1.sendIdx["add:"]=4;
  36798. //>>excludeEnd("ctx");
  36799. $25=$recv($20)._yourself();
  36800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36801. $ctx1.sendIdx["yourself"]=4;
  36802. //>>excludeEnd("ctx");
  36803. $19=$25;
  36804. $recv($18)._add_($19);
  36805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36806. $ctx1.sendIdx["add:"]=3;
  36807. //>>excludeEnd("ctx");
  36808. $27=$recv($IRVerbatim())._new();
  36809. $recv($27)._source_("");
  36810. $28=$recv($27)._yourself();
  36811. $26=$recv($17)._add_($28);
  36812. $26;
  36813. };
  36814. $29=self._method();
  36815. return $29;
  36816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36817. }, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode},$globals.IRASTTranslator)});
  36818. //>>excludeEnd("ctx");
  36819. },
  36820. //>>excludeStart("ide", pragmas.excludeIdeData);
  36821. args: ["aNode"],
  36822. 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",
  36823. referencedClasses: ["IRMethod", "IRTempDeclaration", "IRReturn", "IRVariable", "IRVerbatim"],
  36824. //>>excludeEnd("ide");
  36825. 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"]
  36826. }),
  36827. $globals.IRASTTranslator);
  36828. $core.addMethod(
  36829. $core.method({
  36830. selector: "visitOrAlias:",
  36831. protocol: 'visiting',
  36832. fn: function (aNode){
  36833. var self=this;
  36834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36835. return $core.withContext(function($ctx1) {
  36836. //>>excludeEnd("ctx");
  36837. var $2,$1;
  36838. $2=$recv(aNode)._shouldBeAliased();
  36839. if($core.assert($2)){
  36840. $1=self._alias_(aNode);
  36841. } else {
  36842. $1=self._visit_(aNode);
  36843. };
  36844. return $1;
  36845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36846. }, function($ctx1) {$ctx1.fill(self,"visitOrAlias:",{aNode:aNode},$globals.IRASTTranslator)});
  36847. //>>excludeEnd("ctx");
  36848. },
  36849. //>>excludeStart("ide", pragmas.excludeIdeData);
  36850. args: ["aNode"],
  36851. source: "visitOrAlias: aNode\x0a\x09^ aNode shouldBeAliased\x0a\x09\x09ifTrue: [ self alias: aNode ]\x0a\x09\x09ifFalse: [ self visit: aNode ]",
  36852. referencedClasses: [],
  36853. //>>excludeEnd("ide");
  36854. messageSends: ["ifTrue:ifFalse:", "shouldBeAliased", "alias:", "visit:"]
  36855. }),
  36856. $globals.IRASTTranslator);
  36857. $core.addMethod(
  36858. $core.method({
  36859. selector: "visitReturnNode:",
  36860. protocol: 'visiting',
  36861. fn: function (aNode){
  36862. var self=this;
  36863. var return_;
  36864. function $IRNonLocalReturn(){return $globals.IRNonLocalReturn||(typeof IRNonLocalReturn=="undefined"?nil:IRNonLocalReturn)}
  36865. function $IRReturn(){return $globals.IRReturn||(typeof IRReturn=="undefined"?nil:IRReturn)}
  36866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36867. return $core.withContext(function($ctx1) {
  36868. //>>excludeEnd("ctx");
  36869. var $1,$2;
  36870. $1=$recv(aNode)._nonLocalReturn();
  36871. if($core.assert($1)){
  36872. return_=$recv($IRNonLocalReturn())._new();
  36873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36874. $ctx1.sendIdx["new"]=1;
  36875. //>>excludeEnd("ctx");
  36876. } else {
  36877. return_=$recv($IRReturn())._new();
  36878. };
  36879. $recv(return_)._scope_($recv(aNode)._scope());
  36880. $recv($recv(aNode)._nodes())._do_((function(each){
  36881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36882. return $core.withContext(function($ctx2) {
  36883. //>>excludeEnd("ctx");
  36884. return $recv(return_)._add_(self._alias_(each));
  36885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36886. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  36887. //>>excludeEnd("ctx");
  36888. }));
  36889. $2=return_;
  36890. return $2;
  36891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36892. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode,return_:return_},$globals.IRASTTranslator)});
  36893. //>>excludeEnd("ctx");
  36894. },
  36895. //>>excludeStart("ide", pragmas.excludeIdeData);
  36896. args: ["aNode"],
  36897. 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",
  36898. referencedClasses: ["IRNonLocalReturn", "IRReturn"],
  36899. //>>excludeEnd("ide");
  36900. messageSends: ["ifTrue:ifFalse:", "nonLocalReturn", "new", "scope:", "scope", "do:", "nodes", "add:", "alias:"]
  36901. }),
  36902. $globals.IRASTTranslator);
  36903. $core.addMethod(
  36904. $core.method({
  36905. selector: "visitSendNode:",
  36906. protocol: 'visiting',
  36907. fn: function (aNode){
  36908. var self=this;
  36909. var send,all,receiver,arguments_;
  36910. function $IRSend(){return $globals.IRSend||(typeof IRSend=="undefined"?nil:IRSend)}
  36911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36912. return $core.withContext(function($ctx1) {
  36913. //>>excludeEnd("ctx");
  36914. var $1,$2,$3,$4;
  36915. send=$recv($IRSend())._new();
  36916. $1=send;
  36917. $recv($1)._selector_($recv(aNode)._selector());
  36918. $2=$recv($1)._index_($recv(aNode)._index());
  36919. $3=$recv(aNode)._superSend();
  36920. if($core.assert($3)){
  36921. $recv(send)._classSend_($recv(self._theClass())._superclass());
  36922. };
  36923. all=self._aliasTemporally_($recv([$recv(aNode)._receiver()]).__comma($recv(aNode)._arguments()));
  36924. receiver=$recv(all)._first();
  36925. arguments_=$recv(all)._allButFirst();
  36926. $recv(send)._add_(receiver);
  36927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36928. $ctx1.sendIdx["add:"]=1;
  36929. //>>excludeEnd("ctx");
  36930. $recv(arguments_)._do_((function(each){
  36931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36932. return $core.withContext(function($ctx2) {
  36933. //>>excludeEnd("ctx");
  36934. return $recv(send)._add_(each);
  36935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36936. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  36937. //>>excludeEnd("ctx");
  36938. }));
  36939. $4=send;
  36940. return $4;
  36941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36942. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode,send:send,all:all,receiver:receiver,arguments_:arguments_},$globals.IRASTTranslator)});
  36943. //>>excludeEnd("ctx");
  36944. },
  36945. //>>excludeStart("ide", pragmas.excludeIdeData);
  36946. args: ["aNode"],
  36947. 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",
  36948. referencedClasses: ["IRSend"],
  36949. //>>excludeEnd("ide");
  36950. messageSends: ["new", "selector:", "selector", "index:", "index", "ifTrue:", "superSend", "classSend:", "superclass", "theClass", "aliasTemporally:", ",", "receiver", "arguments", "first", "allButFirst", "add:", "do:"]
  36951. }),
  36952. $globals.IRASTTranslator);
  36953. $core.addMethod(
  36954. $core.method({
  36955. selector: "visitSequenceNode:",
  36956. protocol: 'visiting',
  36957. fn: function (aNode){
  36958. var self=this;
  36959. function $IRSequence(){return $globals.IRSequence||(typeof IRSequence=="undefined"?nil:IRSequence)}
  36960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36961. return $core.withContext(function($ctx1) {
  36962. //>>excludeEnd("ctx");
  36963. var $2,$1;
  36964. $1=self._withSequence_do_($recv($IRSequence())._new(),(function(){
  36965. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36966. return $core.withContext(function($ctx2) {
  36967. //>>excludeEnd("ctx");
  36968. return $recv($recv(aNode)._nodes())._do_((function(each){
  36969. var instruction;
  36970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36971. return $core.withContext(function($ctx3) {
  36972. //>>excludeEnd("ctx");
  36973. instruction=self._visitOrAlias_(each);
  36974. instruction;
  36975. $2=$recv(instruction)._isVariable();
  36976. if(!$core.assert($2)){
  36977. return $recv(self._sequence())._add_(instruction);
  36978. };
  36979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36980. }, function($ctx3) {$ctx3.fillBlock({each:each,instruction:instruction},$ctx2,2)});
  36981. //>>excludeEnd("ctx");
  36982. }));
  36983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36984. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  36985. //>>excludeEnd("ctx");
  36986. }));
  36987. return $1;
  36988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36989. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},$globals.IRASTTranslator)});
  36990. //>>excludeEnd("ctx");
  36991. },
  36992. //>>excludeStart("ide", pragmas.excludeIdeData);
  36993. args: ["aNode"],
  36994. 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 ] ]]",
  36995. referencedClasses: ["IRSequence"],
  36996. //>>excludeEnd("ide");
  36997. messageSends: ["withSequence:do:", "new", "do:", "nodes", "visitOrAlias:", "ifFalse:", "isVariable", "add:", "sequence"]
  36998. }),
  36999. $globals.IRASTTranslator);
  37000. $core.addMethod(
  37001. $core.method({
  37002. selector: "visitValueNode:",
  37003. protocol: 'visiting',
  37004. fn: function (aNode){
  37005. var self=this;
  37006. function $IRValue(){return $globals.IRValue||(typeof IRValue=="undefined"?nil:IRValue)}
  37007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37008. return $core.withContext(function($ctx1) {
  37009. //>>excludeEnd("ctx");
  37010. var $2,$3,$1;
  37011. $2=$recv($IRValue())._new();
  37012. $recv($2)._value_($recv(aNode)._value());
  37013. $3=$recv($2)._yourself();
  37014. $1=$3;
  37015. return $1;
  37016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37017. }, function($ctx1) {$ctx1.fill(self,"visitValueNode:",{aNode:aNode},$globals.IRASTTranslator)});
  37018. //>>excludeEnd("ctx");
  37019. },
  37020. //>>excludeStart("ide", pragmas.excludeIdeData);
  37021. args: ["aNode"],
  37022. source: "visitValueNode: aNode\x0a\x09^ IRValue new\x0a\x09\x09value: aNode value;\x0a\x09\x09yourself",
  37023. referencedClasses: ["IRValue"],
  37024. //>>excludeEnd("ide");
  37025. messageSends: ["value:", "new", "value", "yourself"]
  37026. }),
  37027. $globals.IRASTTranslator);
  37028. $core.addMethod(
  37029. $core.method({
  37030. selector: "visitVariableNode:",
  37031. protocol: 'visiting',
  37032. fn: function (aNode){
  37033. var self=this;
  37034. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  37035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37036. return $core.withContext(function($ctx1) {
  37037. //>>excludeEnd("ctx");
  37038. var $2,$3,$1;
  37039. $2=$recv($IRVariable())._new();
  37040. $recv($2)._variable_($recv(aNode)._binding());
  37041. $3=$recv($2)._yourself();
  37042. $1=$3;
  37043. return $1;
  37044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37045. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},$globals.IRASTTranslator)});
  37046. //>>excludeEnd("ctx");
  37047. },
  37048. //>>excludeStart("ide", pragmas.excludeIdeData);
  37049. args: ["aNode"],
  37050. source: "visitVariableNode: aNode\x0a\x09^ IRVariable new\x0a\x09\x09variable: aNode binding;\x0a\x09\x09yourself",
  37051. referencedClasses: ["IRVariable"],
  37052. //>>excludeEnd("ide");
  37053. messageSends: ["variable:", "new", "binding", "yourself"]
  37054. }),
  37055. $globals.IRASTTranslator);
  37056. $core.addMethod(
  37057. $core.method({
  37058. selector: "withSequence:do:",
  37059. protocol: 'accessing',
  37060. fn: function (aSequence,aBlock){
  37061. var self=this;
  37062. var outerSequence;
  37063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37064. return $core.withContext(function($ctx1) {
  37065. //>>excludeEnd("ctx");
  37066. outerSequence=self._sequence();
  37067. self._sequence_(aSequence);
  37068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37069. $ctx1.sendIdx["sequence:"]=1;
  37070. //>>excludeEnd("ctx");
  37071. $recv(aBlock)._value();
  37072. self._sequence_(outerSequence);
  37073. return aSequence;
  37074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37075. }, function($ctx1) {$ctx1.fill(self,"withSequence:do:",{aSequence:aSequence,aBlock:aBlock,outerSequence:outerSequence},$globals.IRASTTranslator)});
  37076. //>>excludeEnd("ctx");
  37077. },
  37078. //>>excludeStart("ide", pragmas.excludeIdeData);
  37079. args: ["aSequence", "aBlock"],
  37080. 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",
  37081. referencedClasses: [],
  37082. //>>excludeEnd("ide");
  37083. messageSends: ["sequence", "sequence:", "value"]
  37084. }),
  37085. $globals.IRASTTranslator);
  37086. $core.addClass('IRInstruction', $globals.Object, ['parent', 'instructions'], 'Compiler-IR');
  37087. //>>excludeStart("ide", pragmas.excludeIdeData);
  37088. $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.";
  37089. //>>excludeEnd("ide");
  37090. $core.addMethod(
  37091. $core.method({
  37092. selector: "accept:",
  37093. protocol: 'visiting',
  37094. fn: function (aVisitor){
  37095. var self=this;
  37096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37097. return $core.withContext(function($ctx1) {
  37098. //>>excludeEnd("ctx");
  37099. var $1;
  37100. $1=$recv(aVisitor)._visitIRInstruction_(self);
  37101. return $1;
  37102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37103. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInstruction)});
  37104. //>>excludeEnd("ctx");
  37105. },
  37106. //>>excludeStart("ide", pragmas.excludeIdeData);
  37107. args: ["aVisitor"],
  37108. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRInstruction: self",
  37109. referencedClasses: [],
  37110. //>>excludeEnd("ide");
  37111. messageSends: ["visitIRInstruction:"]
  37112. }),
  37113. $globals.IRInstruction);
  37114. $core.addMethod(
  37115. $core.method({
  37116. selector: "add:",
  37117. protocol: 'building',
  37118. fn: function (anObject){
  37119. var self=this;
  37120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37121. return $core.withContext(function($ctx1) {
  37122. //>>excludeEnd("ctx");
  37123. var $1;
  37124. $recv(anObject)._parent_(self);
  37125. $1=$recv(self._instructions())._add_(anObject);
  37126. return $1;
  37127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37128. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject},$globals.IRInstruction)});
  37129. //>>excludeEnd("ctx");
  37130. },
  37131. //>>excludeStart("ide", pragmas.excludeIdeData);
  37132. args: ["anObject"],
  37133. source: "add: anObject\x0a\x09anObject parent: self.\x0a\x09^ self instructions add: anObject",
  37134. referencedClasses: [],
  37135. //>>excludeEnd("ide");
  37136. messageSends: ["parent:", "add:", "instructions"]
  37137. }),
  37138. $globals.IRInstruction);
  37139. $core.addMethod(
  37140. $core.method({
  37141. selector: "canBeAssigned",
  37142. protocol: 'testing',
  37143. fn: function (){
  37144. var self=this;
  37145. return true;
  37146. },
  37147. //>>excludeStart("ide", pragmas.excludeIdeData);
  37148. args: [],
  37149. source: "canBeAssigned\x0a\x09^ true",
  37150. referencedClasses: [],
  37151. //>>excludeEnd("ide");
  37152. messageSends: []
  37153. }),
  37154. $globals.IRInstruction);
  37155. $core.addMethod(
  37156. $core.method({
  37157. selector: "instructions",
  37158. protocol: 'accessing',
  37159. fn: function (){
  37160. var self=this;
  37161. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  37162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37163. return $core.withContext(function($ctx1) {
  37164. //>>excludeEnd("ctx");
  37165. var $2,$1,$receiver;
  37166. $2=self["@instructions"];
  37167. if(($receiver = $2) == null || $receiver.isNil){
  37168. self["@instructions"]=$recv($OrderedCollection())._new();
  37169. $1=self["@instructions"];
  37170. } else {
  37171. $1=$2;
  37172. };
  37173. return $1;
  37174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37175. }, function($ctx1) {$ctx1.fill(self,"instructions",{},$globals.IRInstruction)});
  37176. //>>excludeEnd("ctx");
  37177. },
  37178. //>>excludeStart("ide", pragmas.excludeIdeData);
  37179. args: [],
  37180. source: "instructions\x0a\x09^ instructions ifNil: [ instructions := OrderedCollection new ]",
  37181. referencedClasses: ["OrderedCollection"],
  37182. //>>excludeEnd("ide");
  37183. messageSends: ["ifNil:", "new"]
  37184. }),
  37185. $globals.IRInstruction);
  37186. $core.addMethod(
  37187. $core.method({
  37188. selector: "isClosure",
  37189. protocol: 'testing',
  37190. fn: function (){
  37191. var self=this;
  37192. return false;
  37193. },
  37194. //>>excludeStart("ide", pragmas.excludeIdeData);
  37195. args: [],
  37196. source: "isClosure\x0a\x09^ false",
  37197. referencedClasses: [],
  37198. //>>excludeEnd("ide");
  37199. messageSends: []
  37200. }),
  37201. $globals.IRInstruction);
  37202. $core.addMethod(
  37203. $core.method({
  37204. selector: "isInlined",
  37205. protocol: 'testing',
  37206. fn: function (){
  37207. var self=this;
  37208. return false;
  37209. },
  37210. //>>excludeStart("ide", pragmas.excludeIdeData);
  37211. args: [],
  37212. source: "isInlined\x0a\x09^ false",
  37213. referencedClasses: [],
  37214. //>>excludeEnd("ide");
  37215. messageSends: []
  37216. }),
  37217. $globals.IRInstruction);
  37218. $core.addMethod(
  37219. $core.method({
  37220. selector: "isLocalReturn",
  37221. protocol: 'testing',
  37222. fn: function (){
  37223. var self=this;
  37224. return false;
  37225. },
  37226. //>>excludeStart("ide", pragmas.excludeIdeData);
  37227. args: [],
  37228. source: "isLocalReturn\x0a\x09^ false",
  37229. referencedClasses: [],
  37230. //>>excludeEnd("ide");
  37231. messageSends: []
  37232. }),
  37233. $globals.IRInstruction);
  37234. $core.addMethod(
  37235. $core.method({
  37236. selector: "isMethod",
  37237. protocol: 'testing',
  37238. fn: function (){
  37239. var self=this;
  37240. return false;
  37241. },
  37242. //>>excludeStart("ide", pragmas.excludeIdeData);
  37243. args: [],
  37244. source: "isMethod\x0a\x09^ false",
  37245. referencedClasses: [],
  37246. //>>excludeEnd("ide");
  37247. messageSends: []
  37248. }),
  37249. $globals.IRInstruction);
  37250. $core.addMethod(
  37251. $core.method({
  37252. selector: "isReturn",
  37253. protocol: 'testing',
  37254. fn: function (){
  37255. var self=this;
  37256. return false;
  37257. },
  37258. //>>excludeStart("ide", pragmas.excludeIdeData);
  37259. args: [],
  37260. source: "isReturn\x0a\x09^ false",
  37261. referencedClasses: [],
  37262. //>>excludeEnd("ide");
  37263. messageSends: []
  37264. }),
  37265. $globals.IRInstruction);
  37266. $core.addMethod(
  37267. $core.method({
  37268. selector: "isSend",
  37269. protocol: 'testing',
  37270. fn: function (){
  37271. var self=this;
  37272. return false;
  37273. },
  37274. //>>excludeStart("ide", pragmas.excludeIdeData);
  37275. args: [],
  37276. source: "isSend\x0a\x09^ false",
  37277. referencedClasses: [],
  37278. //>>excludeEnd("ide");
  37279. messageSends: []
  37280. }),
  37281. $globals.IRInstruction);
  37282. $core.addMethod(
  37283. $core.method({
  37284. selector: "isSequence",
  37285. protocol: 'testing',
  37286. fn: function (){
  37287. var self=this;
  37288. return false;
  37289. },
  37290. //>>excludeStart("ide", pragmas.excludeIdeData);
  37291. args: [],
  37292. source: "isSequence\x0a\x09^ false",
  37293. referencedClasses: [],
  37294. //>>excludeEnd("ide");
  37295. messageSends: []
  37296. }),
  37297. $globals.IRInstruction);
  37298. $core.addMethod(
  37299. $core.method({
  37300. selector: "isTempDeclaration",
  37301. protocol: 'testing',
  37302. fn: function (){
  37303. var self=this;
  37304. return false;
  37305. },
  37306. //>>excludeStart("ide", pragmas.excludeIdeData);
  37307. args: [],
  37308. source: "isTempDeclaration\x0a\x09^ false",
  37309. referencedClasses: [],
  37310. //>>excludeEnd("ide");
  37311. messageSends: []
  37312. }),
  37313. $globals.IRInstruction);
  37314. $core.addMethod(
  37315. $core.method({
  37316. selector: "isVariable",
  37317. protocol: 'testing',
  37318. fn: function (){
  37319. var self=this;
  37320. return false;
  37321. },
  37322. //>>excludeStart("ide", pragmas.excludeIdeData);
  37323. args: [],
  37324. source: "isVariable\x0a\x09^ false",
  37325. referencedClasses: [],
  37326. //>>excludeEnd("ide");
  37327. messageSends: []
  37328. }),
  37329. $globals.IRInstruction);
  37330. $core.addMethod(
  37331. $core.method({
  37332. selector: "method",
  37333. protocol: 'accessing',
  37334. fn: function (){
  37335. var self=this;
  37336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37337. return $core.withContext(function($ctx1) {
  37338. //>>excludeEnd("ctx");
  37339. var $1;
  37340. $1=$recv(self._parent())._method();
  37341. return $1;
  37342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37343. }, function($ctx1) {$ctx1.fill(self,"method",{},$globals.IRInstruction)});
  37344. //>>excludeEnd("ctx");
  37345. },
  37346. //>>excludeStart("ide", pragmas.excludeIdeData);
  37347. args: [],
  37348. source: "method\x0a\x09^ self parent method",
  37349. referencedClasses: [],
  37350. //>>excludeEnd("ide");
  37351. messageSends: ["method", "parent"]
  37352. }),
  37353. $globals.IRInstruction);
  37354. $core.addMethod(
  37355. $core.method({
  37356. selector: "needsBoxingAsReceiver",
  37357. protocol: 'testing',
  37358. fn: function (){
  37359. var self=this;
  37360. return true;
  37361. },
  37362. //>>excludeStart("ide", pragmas.excludeIdeData);
  37363. args: [],
  37364. source: "needsBoxingAsReceiver\x0a\x09^ true",
  37365. referencedClasses: [],
  37366. //>>excludeEnd("ide");
  37367. messageSends: []
  37368. }),
  37369. $globals.IRInstruction);
  37370. $core.addMethod(
  37371. $core.method({
  37372. selector: "parent",
  37373. protocol: 'accessing',
  37374. fn: function (){
  37375. var self=this;
  37376. var $1;
  37377. $1=self["@parent"];
  37378. return $1;
  37379. },
  37380. //>>excludeStart("ide", pragmas.excludeIdeData);
  37381. args: [],
  37382. source: "parent\x0a\x09^ parent",
  37383. referencedClasses: [],
  37384. //>>excludeEnd("ide");
  37385. messageSends: []
  37386. }),
  37387. $globals.IRInstruction);
  37388. $core.addMethod(
  37389. $core.method({
  37390. selector: "parent:",
  37391. protocol: 'accessing',
  37392. fn: function (anIRInstruction){
  37393. var self=this;
  37394. self["@parent"]=anIRInstruction;
  37395. return self;
  37396. },
  37397. //>>excludeStart("ide", pragmas.excludeIdeData);
  37398. args: ["anIRInstruction"],
  37399. source: "parent: anIRInstruction\x0a\x09parent := anIRInstruction",
  37400. referencedClasses: [],
  37401. //>>excludeEnd("ide");
  37402. messageSends: []
  37403. }),
  37404. $globals.IRInstruction);
  37405. $core.addMethod(
  37406. $core.method({
  37407. selector: "remove",
  37408. protocol: 'building',
  37409. fn: function (){
  37410. var self=this;
  37411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37412. return $core.withContext(function($ctx1) {
  37413. //>>excludeEnd("ctx");
  37414. $recv(self._parent())._remove_(self);
  37415. return self;
  37416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37417. }, function($ctx1) {$ctx1.fill(self,"remove",{},$globals.IRInstruction)});
  37418. //>>excludeEnd("ctx");
  37419. },
  37420. //>>excludeStart("ide", pragmas.excludeIdeData);
  37421. args: [],
  37422. source: "remove\x0a\x09self parent remove: self",
  37423. referencedClasses: [],
  37424. //>>excludeEnd("ide");
  37425. messageSends: ["remove:", "parent"]
  37426. }),
  37427. $globals.IRInstruction);
  37428. $core.addMethod(
  37429. $core.method({
  37430. selector: "remove:",
  37431. protocol: 'building',
  37432. fn: function (anIRInstruction){
  37433. var self=this;
  37434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37435. return $core.withContext(function($ctx1) {
  37436. //>>excludeEnd("ctx");
  37437. $recv(self._instructions())._remove_(anIRInstruction);
  37438. return self;
  37439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37440. }, function($ctx1) {$ctx1.fill(self,"remove:",{anIRInstruction:anIRInstruction},$globals.IRInstruction)});
  37441. //>>excludeEnd("ctx");
  37442. },
  37443. //>>excludeStart("ide", pragmas.excludeIdeData);
  37444. args: ["anIRInstruction"],
  37445. source: "remove: anIRInstruction\x0a\x09self instructions remove: anIRInstruction",
  37446. referencedClasses: [],
  37447. //>>excludeEnd("ide");
  37448. messageSends: ["remove:", "instructions"]
  37449. }),
  37450. $globals.IRInstruction);
  37451. $core.addMethod(
  37452. $core.method({
  37453. selector: "replace:with:",
  37454. protocol: 'building',
  37455. fn: function (anIRInstruction,anotherIRInstruction){
  37456. var self=this;
  37457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37458. return $core.withContext(function($ctx1) {
  37459. //>>excludeEnd("ctx");
  37460. var $1;
  37461. $recv(anotherIRInstruction)._parent_(self);
  37462. $1=self._instructions();
  37463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37464. $ctx1.sendIdx["instructions"]=1;
  37465. //>>excludeEnd("ctx");
  37466. $recv($1)._at_put_($recv(self._instructions())._indexOf_(anIRInstruction),anotherIRInstruction);
  37467. return self;
  37468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37469. }, function($ctx1) {$ctx1.fill(self,"replace:with:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRInstruction)});
  37470. //>>excludeEnd("ctx");
  37471. },
  37472. //>>excludeStart("ide", pragmas.excludeIdeData);
  37473. args: ["anIRInstruction", "anotherIRInstruction"],
  37474. source: "replace: anIRInstruction with: anotherIRInstruction\x0a\x09anotherIRInstruction parent: self.\x0a\x09self instructions\x0a\x09\x09at: (self instructions indexOf: anIRInstruction)\x0a\x09\x09put: anotherIRInstruction",
  37475. referencedClasses: [],
  37476. //>>excludeEnd("ide");
  37477. messageSends: ["parent:", "at:put:", "instructions", "indexOf:"]
  37478. }),
  37479. $globals.IRInstruction);
  37480. $core.addMethod(
  37481. $core.method({
  37482. selector: "replaceWith:",
  37483. protocol: 'building',
  37484. fn: function (anIRInstruction){
  37485. var self=this;
  37486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37487. return $core.withContext(function($ctx1) {
  37488. //>>excludeEnd("ctx");
  37489. $recv(self._parent())._replace_with_(self,anIRInstruction);
  37490. return self;
  37491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37492. }, function($ctx1) {$ctx1.fill(self,"replaceWith:",{anIRInstruction:anIRInstruction},$globals.IRInstruction)});
  37493. //>>excludeEnd("ctx");
  37494. },
  37495. //>>excludeStart("ide", pragmas.excludeIdeData);
  37496. args: ["anIRInstruction"],
  37497. source: "replaceWith: anIRInstruction\x0a\x09self parent replace: self with: anIRInstruction",
  37498. referencedClasses: [],
  37499. //>>excludeEnd("ide");
  37500. messageSends: ["replace:with:", "parent"]
  37501. }),
  37502. $globals.IRInstruction);
  37503. $core.addMethod(
  37504. $core.method({
  37505. selector: "scope",
  37506. protocol: 'accessing',
  37507. fn: function (){
  37508. var self=this;
  37509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37510. return $core.withContext(function($ctx1) {
  37511. //>>excludeEnd("ctx");
  37512. var $2,$1,$receiver;
  37513. $2=self._parent();
  37514. if(($receiver = $2) == null || $receiver.isNil){
  37515. $1=$2;
  37516. } else {
  37517. var node;
  37518. node=$receiver;
  37519. $1=$recv(node)._scope();
  37520. };
  37521. return $1;
  37522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37523. }, function($ctx1) {$ctx1.fill(self,"scope",{},$globals.IRInstruction)});
  37524. //>>excludeEnd("ctx");
  37525. },
  37526. //>>excludeStart("ide", pragmas.excludeIdeData);
  37527. args: [],
  37528. source: "scope\x0a\x09^ self parent ifNotNil: [ :node | \x0a\x09\x09node scope ]",
  37529. referencedClasses: [],
  37530. //>>excludeEnd("ide");
  37531. messageSends: ["ifNotNil:", "parent", "scope"]
  37532. }),
  37533. $globals.IRInstruction);
  37534. $core.addMethod(
  37535. $core.method({
  37536. selector: "on:",
  37537. protocol: 'instance creation',
  37538. fn: function (aBuilder){
  37539. var self=this;
  37540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37541. return $core.withContext(function($ctx1) {
  37542. //>>excludeEnd("ctx");
  37543. var $2,$3,$1;
  37544. $2=self._new();
  37545. $recv($2)._builder_(aBuilder);
  37546. $3=$recv($2)._yourself();
  37547. $1=$3;
  37548. return $1;
  37549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37550. }, function($ctx1) {$ctx1.fill(self,"on:",{aBuilder:aBuilder},$globals.IRInstruction.klass)});
  37551. //>>excludeEnd("ctx");
  37552. },
  37553. //>>excludeStart("ide", pragmas.excludeIdeData);
  37554. args: ["aBuilder"],
  37555. source: "on: aBuilder\x0a\x09^ self new\x0a\x09\x09builder: aBuilder;\x0a\x09\x09yourself",
  37556. referencedClasses: [],
  37557. //>>excludeEnd("ide");
  37558. messageSends: ["builder:", "new", "yourself"]
  37559. }),
  37560. $globals.IRInstruction.klass);
  37561. $core.addClass('IRAssignment', $globals.IRInstruction, [], 'Compiler-IR');
  37562. $core.addMethod(
  37563. $core.method({
  37564. selector: "accept:",
  37565. protocol: 'visiting',
  37566. fn: function (aVisitor){
  37567. var self=this;
  37568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37569. return $core.withContext(function($ctx1) {
  37570. //>>excludeEnd("ctx");
  37571. var $1;
  37572. $1=$recv(aVisitor)._visitIRAssignment_(self);
  37573. return $1;
  37574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37575. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRAssignment)});
  37576. //>>excludeEnd("ctx");
  37577. },
  37578. //>>excludeStart("ide", pragmas.excludeIdeData);
  37579. args: ["aVisitor"],
  37580. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRAssignment: self",
  37581. referencedClasses: [],
  37582. //>>excludeEnd("ide");
  37583. messageSends: ["visitIRAssignment:"]
  37584. }),
  37585. $globals.IRAssignment);
  37586. $core.addClass('IRDynamicArray', $globals.IRInstruction, [], 'Compiler-IR');
  37587. $core.addMethod(
  37588. $core.method({
  37589. selector: "accept:",
  37590. protocol: 'visiting',
  37591. fn: function (aVisitor){
  37592. var self=this;
  37593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37594. return $core.withContext(function($ctx1) {
  37595. //>>excludeEnd("ctx");
  37596. var $1;
  37597. $1=$recv(aVisitor)._visitIRDynamicArray_(self);
  37598. return $1;
  37599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37600. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRDynamicArray)});
  37601. //>>excludeEnd("ctx");
  37602. },
  37603. //>>excludeStart("ide", pragmas.excludeIdeData);
  37604. args: ["aVisitor"],
  37605. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRDynamicArray: self",
  37606. referencedClasses: [],
  37607. //>>excludeEnd("ide");
  37608. messageSends: ["visitIRDynamicArray:"]
  37609. }),
  37610. $globals.IRDynamicArray);
  37611. $core.addClass('IRDynamicDictionary', $globals.IRInstruction, [], 'Compiler-IR');
  37612. $core.addMethod(
  37613. $core.method({
  37614. selector: "accept:",
  37615. protocol: 'visiting',
  37616. fn: function (aVisitor){
  37617. var self=this;
  37618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37619. return $core.withContext(function($ctx1) {
  37620. //>>excludeEnd("ctx");
  37621. var $1;
  37622. $1=$recv(aVisitor)._visitIRDynamicDictionary_(self);
  37623. return $1;
  37624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37625. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRDynamicDictionary)});
  37626. //>>excludeEnd("ctx");
  37627. },
  37628. //>>excludeStart("ide", pragmas.excludeIdeData);
  37629. args: ["aVisitor"],
  37630. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRDynamicDictionary: self",
  37631. referencedClasses: [],
  37632. //>>excludeEnd("ide");
  37633. messageSends: ["visitIRDynamicDictionary:"]
  37634. }),
  37635. $globals.IRDynamicDictionary);
  37636. $core.addClass('IRScopedInstruction', $globals.IRInstruction, ['scope'], 'Compiler-IR');
  37637. $core.addMethod(
  37638. $core.method({
  37639. selector: "scope",
  37640. protocol: 'accessing',
  37641. fn: function (){
  37642. var self=this;
  37643. var $1;
  37644. $1=self["@scope"];
  37645. return $1;
  37646. },
  37647. //>>excludeStart("ide", pragmas.excludeIdeData);
  37648. args: [],
  37649. source: "scope\x0a\x09^ scope",
  37650. referencedClasses: [],
  37651. //>>excludeEnd("ide");
  37652. messageSends: []
  37653. }),
  37654. $globals.IRScopedInstruction);
  37655. $core.addMethod(
  37656. $core.method({
  37657. selector: "scope:",
  37658. protocol: 'accessing',
  37659. fn: function (aScope){
  37660. var self=this;
  37661. self["@scope"]=aScope;
  37662. return self;
  37663. },
  37664. //>>excludeStart("ide", pragmas.excludeIdeData);
  37665. args: ["aScope"],
  37666. source: "scope: aScope\x0a\x09scope := aScope",
  37667. referencedClasses: [],
  37668. //>>excludeEnd("ide");
  37669. messageSends: []
  37670. }),
  37671. $globals.IRScopedInstruction);
  37672. $core.addClass('IRClosureInstruction', $globals.IRScopedInstruction, ['arguments', 'requiresSmalltalkContext'], 'Compiler-IR');
  37673. $core.addMethod(
  37674. $core.method({
  37675. selector: "arguments",
  37676. protocol: 'accessing',
  37677. fn: function (){
  37678. var self=this;
  37679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37680. return $core.withContext(function($ctx1) {
  37681. //>>excludeEnd("ctx");
  37682. var $2,$1,$receiver;
  37683. $2=self["@arguments"];
  37684. if(($receiver = $2) == null || $receiver.isNil){
  37685. $1=[];
  37686. } else {
  37687. $1=$2;
  37688. };
  37689. return $1;
  37690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37691. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.IRClosureInstruction)});
  37692. //>>excludeEnd("ctx");
  37693. },
  37694. //>>excludeStart("ide", pragmas.excludeIdeData);
  37695. args: [],
  37696. source: "arguments\x0a\x09^ arguments ifNil: [ #() ]",
  37697. referencedClasses: [],
  37698. //>>excludeEnd("ide");
  37699. messageSends: ["ifNil:"]
  37700. }),
  37701. $globals.IRClosureInstruction);
  37702. $core.addMethod(
  37703. $core.method({
  37704. selector: "arguments:",
  37705. protocol: 'accessing',
  37706. fn: function (aCollection){
  37707. var self=this;
  37708. self["@arguments"]=aCollection;
  37709. return self;
  37710. },
  37711. //>>excludeStart("ide", pragmas.excludeIdeData);
  37712. args: ["aCollection"],
  37713. source: "arguments: aCollection\x0a\x09arguments := aCollection",
  37714. referencedClasses: [],
  37715. //>>excludeEnd("ide");
  37716. messageSends: []
  37717. }),
  37718. $globals.IRClosureInstruction);
  37719. $core.addMethod(
  37720. $core.method({
  37721. selector: "locals",
  37722. protocol: 'accessing',
  37723. fn: function (){
  37724. var self=this;
  37725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37726. return $core.withContext(function($ctx1) {
  37727. //>>excludeEnd("ctx");
  37728. var $2,$3,$1;
  37729. $2=$recv(self._arguments())._copy();
  37730. $recv($2)._addAll_($recv(self._tempDeclarations())._collect_((function(each){
  37731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37732. return $core.withContext(function($ctx2) {
  37733. //>>excludeEnd("ctx");
  37734. return $recv(each)._name();
  37735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37736. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  37737. //>>excludeEnd("ctx");
  37738. })));
  37739. $3=$recv($2)._yourself();
  37740. $1=$3;
  37741. return $1;
  37742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37743. }, function($ctx1) {$ctx1.fill(self,"locals",{},$globals.IRClosureInstruction)});
  37744. //>>excludeEnd("ctx");
  37745. },
  37746. //>>excludeStart("ide", pragmas.excludeIdeData);
  37747. args: [],
  37748. source: "locals\x0a\x09^ self arguments copy\x0a\x09\x09addAll: (self tempDeclarations collect: [ :each | each name ]);\x0a\x09\x09yourself",
  37749. referencedClasses: [],
  37750. //>>excludeEnd("ide");
  37751. messageSends: ["addAll:", "copy", "arguments", "collect:", "tempDeclarations", "name", "yourself"]
  37752. }),
  37753. $globals.IRClosureInstruction);
  37754. $core.addMethod(
  37755. $core.method({
  37756. selector: "requiresSmalltalkContext",
  37757. protocol: 'accessing',
  37758. fn: function (){
  37759. var self=this;
  37760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37761. return $core.withContext(function($ctx1) {
  37762. //>>excludeEnd("ctx");
  37763. var $2,$1,$receiver;
  37764. $2=self["@requiresSmalltalkContext"];
  37765. if(($receiver = $2) == null || $receiver.isNil){
  37766. $1=false;
  37767. } else {
  37768. $1=$2;
  37769. };
  37770. return $1;
  37771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37772. }, function($ctx1) {$ctx1.fill(self,"requiresSmalltalkContext",{},$globals.IRClosureInstruction)});
  37773. //>>excludeEnd("ctx");
  37774. },
  37775. //>>excludeStart("ide", pragmas.excludeIdeData);
  37776. args: [],
  37777. source: "requiresSmalltalkContext\x0a\x09^ requiresSmalltalkContext ifNil: [ false ]",
  37778. referencedClasses: [],
  37779. //>>excludeEnd("ide");
  37780. messageSends: ["ifNil:"]
  37781. }),
  37782. $globals.IRClosureInstruction);
  37783. $core.addMethod(
  37784. $core.method({
  37785. selector: "requiresSmalltalkContext:",
  37786. protocol: 'accessing',
  37787. fn: function (anObject){
  37788. var self=this;
  37789. self["@requiresSmalltalkContext"]=anObject;
  37790. return self;
  37791. },
  37792. //>>excludeStart("ide", pragmas.excludeIdeData);
  37793. args: ["anObject"],
  37794. source: "requiresSmalltalkContext: anObject\x0a\x09requiresSmalltalkContext := anObject",
  37795. referencedClasses: [],
  37796. //>>excludeEnd("ide");
  37797. messageSends: []
  37798. }),
  37799. $globals.IRClosureInstruction);
  37800. $core.addMethod(
  37801. $core.method({
  37802. selector: "scope:",
  37803. protocol: 'accessing',
  37804. fn: function (aScope){
  37805. var self=this;
  37806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37807. return $core.withContext(function($ctx1) {
  37808. //>>excludeEnd("ctx");
  37809. (
  37810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37811. $ctx1.supercall = true,
  37812. //>>excludeEnd("ctx");
  37813. $globals.IRClosureInstruction.superclass.fn.prototype._scope_.apply($recv(self), [aScope]));
  37814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37815. $ctx1.supercall = false;
  37816. //>>excludeEnd("ctx");;
  37817. $recv(aScope)._instruction_(self);
  37818. return self;
  37819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37820. }, function($ctx1) {$ctx1.fill(self,"scope:",{aScope:aScope},$globals.IRClosureInstruction)});
  37821. //>>excludeEnd("ctx");
  37822. },
  37823. //>>excludeStart("ide", pragmas.excludeIdeData);
  37824. args: ["aScope"],
  37825. source: "scope: aScope\x0a\x09super scope: aScope.\x0a\x09aScope instruction: self",
  37826. referencedClasses: [],
  37827. //>>excludeEnd("ide");
  37828. messageSends: ["scope:", "instruction:"]
  37829. }),
  37830. $globals.IRClosureInstruction);
  37831. $core.addMethod(
  37832. $core.method({
  37833. selector: "tempDeclarations",
  37834. protocol: 'accessing',
  37835. fn: function (){
  37836. var self=this;
  37837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37838. return $core.withContext(function($ctx1) {
  37839. //>>excludeEnd("ctx");
  37840. var $1;
  37841. $1=$recv(self._instructions())._select_((function(each){
  37842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37843. return $core.withContext(function($ctx2) {
  37844. //>>excludeEnd("ctx");
  37845. return $recv(each)._isTempDeclaration();
  37846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37847. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  37848. //>>excludeEnd("ctx");
  37849. }));
  37850. return $1;
  37851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37852. }, function($ctx1) {$ctx1.fill(self,"tempDeclarations",{},$globals.IRClosureInstruction)});
  37853. //>>excludeEnd("ctx");
  37854. },
  37855. //>>excludeStart("ide", pragmas.excludeIdeData);
  37856. args: [],
  37857. source: "tempDeclarations\x0a\x09^ self instructions select: [ :each |\x0a\x09\x09each isTempDeclaration ]",
  37858. referencedClasses: [],
  37859. //>>excludeEnd("ide");
  37860. messageSends: ["select:", "instructions", "isTempDeclaration"]
  37861. }),
  37862. $globals.IRClosureInstruction);
  37863. $core.addClass('IRClosure', $globals.IRClosureInstruction, [], 'Compiler-IR');
  37864. $core.addMethod(
  37865. $core.method({
  37866. selector: "accept:",
  37867. protocol: 'visiting',
  37868. fn: function (aVisitor){
  37869. var self=this;
  37870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37871. return $core.withContext(function($ctx1) {
  37872. //>>excludeEnd("ctx");
  37873. var $1;
  37874. $1=$recv(aVisitor)._visitIRClosure_(self);
  37875. return $1;
  37876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37877. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRClosure)});
  37878. //>>excludeEnd("ctx");
  37879. },
  37880. //>>excludeStart("ide", pragmas.excludeIdeData);
  37881. args: ["aVisitor"],
  37882. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRClosure: self",
  37883. referencedClasses: [],
  37884. //>>excludeEnd("ide");
  37885. messageSends: ["visitIRClosure:"]
  37886. }),
  37887. $globals.IRClosure);
  37888. $core.addMethod(
  37889. $core.method({
  37890. selector: "isClosure",
  37891. protocol: 'testing',
  37892. fn: function (){
  37893. var self=this;
  37894. return true;
  37895. },
  37896. //>>excludeStart("ide", pragmas.excludeIdeData);
  37897. args: [],
  37898. source: "isClosure\x0a\x09^ true",
  37899. referencedClasses: [],
  37900. //>>excludeEnd("ide");
  37901. messageSends: []
  37902. }),
  37903. $globals.IRClosure);
  37904. $core.addMethod(
  37905. $core.method({
  37906. selector: "sequence",
  37907. protocol: 'accessing',
  37908. fn: function (){
  37909. var self=this;
  37910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37911. return $core.withContext(function($ctx1) {
  37912. //>>excludeEnd("ctx");
  37913. var $1;
  37914. $1=$recv(self._instructions())._last();
  37915. return $1;
  37916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37917. }, function($ctx1) {$ctx1.fill(self,"sequence",{},$globals.IRClosure)});
  37918. //>>excludeEnd("ctx");
  37919. },
  37920. //>>excludeStart("ide", pragmas.excludeIdeData);
  37921. args: [],
  37922. source: "sequence\x0a\x09^ self instructions last",
  37923. referencedClasses: [],
  37924. //>>excludeEnd("ide");
  37925. messageSends: ["last", "instructions"]
  37926. }),
  37927. $globals.IRClosure);
  37928. $core.addClass('IRMethod', $globals.IRClosureInstruction, ['theClass', 'source', 'selector', 'classReferences', 'sendIndexes', 'superSends', 'requiresSmalltalkContext', 'internalVariables'], 'Compiler-IR');
  37929. //>>excludeStart("ide", pragmas.excludeIdeData);
  37930. $globals.IRMethod.comment="I am a method instruction";
  37931. //>>excludeEnd("ide");
  37932. $core.addMethod(
  37933. $core.method({
  37934. selector: "accept:",
  37935. protocol: 'visiting',
  37936. fn: function (aVisitor){
  37937. var self=this;
  37938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37939. return $core.withContext(function($ctx1) {
  37940. //>>excludeEnd("ctx");
  37941. var $1;
  37942. $1=$recv(aVisitor)._visitIRMethod_(self);
  37943. return $1;
  37944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37945. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRMethod)});
  37946. //>>excludeEnd("ctx");
  37947. },
  37948. //>>excludeStart("ide", pragmas.excludeIdeData);
  37949. args: ["aVisitor"],
  37950. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRMethod: self",
  37951. referencedClasses: [],
  37952. //>>excludeEnd("ide");
  37953. messageSends: ["visitIRMethod:"]
  37954. }),
  37955. $globals.IRMethod);
  37956. $core.addMethod(
  37957. $core.method({
  37958. selector: "classReferences",
  37959. protocol: 'accessing',
  37960. fn: function (){
  37961. var self=this;
  37962. var $1;
  37963. $1=self["@classReferences"];
  37964. return $1;
  37965. },
  37966. //>>excludeStart("ide", pragmas.excludeIdeData);
  37967. args: [],
  37968. source: "classReferences\x0a\x09^ classReferences",
  37969. referencedClasses: [],
  37970. //>>excludeEnd("ide");
  37971. messageSends: []
  37972. }),
  37973. $globals.IRMethod);
  37974. $core.addMethod(
  37975. $core.method({
  37976. selector: "classReferences:",
  37977. protocol: 'accessing',
  37978. fn: function (aCollection){
  37979. var self=this;
  37980. self["@classReferences"]=aCollection;
  37981. return self;
  37982. },
  37983. //>>excludeStart("ide", pragmas.excludeIdeData);
  37984. args: ["aCollection"],
  37985. source: "classReferences: aCollection\x0a\x09classReferences := aCollection",
  37986. referencedClasses: [],
  37987. //>>excludeEnd("ide");
  37988. messageSends: []
  37989. }),
  37990. $globals.IRMethod);
  37991. $core.addMethod(
  37992. $core.method({
  37993. selector: "internalVariables",
  37994. protocol: 'accessing',
  37995. fn: function (){
  37996. var self=this;
  37997. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  37998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37999. return $core.withContext(function($ctx1) {
  38000. //>>excludeEnd("ctx");
  38001. var $2,$1,$receiver;
  38002. $2=self["@internalVariables"];
  38003. if(($receiver = $2) == null || $receiver.isNil){
  38004. self["@internalVariables"]=$recv($Set())._new();
  38005. $1=self["@internalVariables"];
  38006. } else {
  38007. $1=$2;
  38008. };
  38009. return $1;
  38010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38011. }, function($ctx1) {$ctx1.fill(self,"internalVariables",{},$globals.IRMethod)});
  38012. //>>excludeEnd("ctx");
  38013. },
  38014. //>>excludeStart("ide", pragmas.excludeIdeData);
  38015. args: [],
  38016. source: "internalVariables\x0a\x09^ internalVariables ifNil: [ internalVariables := Set new ]",
  38017. referencedClasses: ["Set"],
  38018. //>>excludeEnd("ide");
  38019. messageSends: ["ifNil:", "new"]
  38020. }),
  38021. $globals.IRMethod);
  38022. $core.addMethod(
  38023. $core.method({
  38024. selector: "isMethod",
  38025. protocol: 'accessing',
  38026. fn: function (){
  38027. var self=this;
  38028. return true;
  38029. },
  38030. //>>excludeStart("ide", pragmas.excludeIdeData);
  38031. args: [],
  38032. source: "isMethod\x0a\x09^ true",
  38033. referencedClasses: [],
  38034. //>>excludeEnd("ide");
  38035. messageSends: []
  38036. }),
  38037. $globals.IRMethod);
  38038. $core.addMethod(
  38039. $core.method({
  38040. selector: "messageSends",
  38041. protocol: 'accessing',
  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(self._sendIndexes())._keys();
  38049. return $1;
  38050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38051. }, function($ctx1) {$ctx1.fill(self,"messageSends",{},$globals.IRMethod)});
  38052. //>>excludeEnd("ctx");
  38053. },
  38054. //>>excludeStart("ide", pragmas.excludeIdeData);
  38055. args: [],
  38056. source: "messageSends\x0a\x09^ self sendIndexes keys",
  38057. referencedClasses: [],
  38058. //>>excludeEnd("ide");
  38059. messageSends: ["keys", "sendIndexes"]
  38060. }),
  38061. $globals.IRMethod);
  38062. $core.addMethod(
  38063. $core.method({
  38064. selector: "method",
  38065. protocol: 'accessing',
  38066. fn: function (){
  38067. var self=this;
  38068. return self;
  38069. },
  38070. //>>excludeStart("ide", pragmas.excludeIdeData);
  38071. args: [],
  38072. source: "method\x0a\x09^ self",
  38073. referencedClasses: [],
  38074. //>>excludeEnd("ide");
  38075. messageSends: []
  38076. }),
  38077. $globals.IRMethod);
  38078. $core.addMethod(
  38079. $core.method({
  38080. selector: "selector",
  38081. protocol: 'accessing',
  38082. fn: function (){
  38083. var self=this;
  38084. var $1;
  38085. $1=self["@selector"];
  38086. return $1;
  38087. },
  38088. //>>excludeStart("ide", pragmas.excludeIdeData);
  38089. args: [],
  38090. source: "selector\x0a\x09^ selector",
  38091. referencedClasses: [],
  38092. //>>excludeEnd("ide");
  38093. messageSends: []
  38094. }),
  38095. $globals.IRMethod);
  38096. $core.addMethod(
  38097. $core.method({
  38098. selector: "selector:",
  38099. protocol: 'accessing',
  38100. fn: function (aString){
  38101. var self=this;
  38102. self["@selector"]=aString;
  38103. return self;
  38104. },
  38105. //>>excludeStart("ide", pragmas.excludeIdeData);
  38106. args: ["aString"],
  38107. source: "selector: aString\x0a\x09selector := aString",
  38108. referencedClasses: [],
  38109. //>>excludeEnd("ide");
  38110. messageSends: []
  38111. }),
  38112. $globals.IRMethod);
  38113. $core.addMethod(
  38114. $core.method({
  38115. selector: "sendIndexes",
  38116. protocol: 'accessing',
  38117. fn: function (){
  38118. var self=this;
  38119. var $1;
  38120. $1=self["@sendIndexes"];
  38121. return $1;
  38122. },
  38123. //>>excludeStart("ide", pragmas.excludeIdeData);
  38124. args: [],
  38125. source: "sendIndexes\x0a\x09^ sendIndexes",
  38126. referencedClasses: [],
  38127. //>>excludeEnd("ide");
  38128. messageSends: []
  38129. }),
  38130. $globals.IRMethod);
  38131. $core.addMethod(
  38132. $core.method({
  38133. selector: "sendIndexes:",
  38134. protocol: 'accessing',
  38135. fn: function (aDictionary){
  38136. var self=this;
  38137. self["@sendIndexes"]=aDictionary;
  38138. return self;
  38139. },
  38140. //>>excludeStart("ide", pragmas.excludeIdeData);
  38141. args: ["aDictionary"],
  38142. source: "sendIndexes: aDictionary\x0a\x09sendIndexes := aDictionary",
  38143. referencedClasses: [],
  38144. //>>excludeEnd("ide");
  38145. messageSends: []
  38146. }),
  38147. $globals.IRMethod);
  38148. $core.addMethod(
  38149. $core.method({
  38150. selector: "source",
  38151. protocol: 'accessing',
  38152. fn: function (){
  38153. var self=this;
  38154. var $1;
  38155. $1=self["@source"];
  38156. return $1;
  38157. },
  38158. //>>excludeStart("ide", pragmas.excludeIdeData);
  38159. args: [],
  38160. source: "source\x0a\x09^ source",
  38161. referencedClasses: [],
  38162. //>>excludeEnd("ide");
  38163. messageSends: []
  38164. }),
  38165. $globals.IRMethod);
  38166. $core.addMethod(
  38167. $core.method({
  38168. selector: "source:",
  38169. protocol: 'accessing',
  38170. fn: function (aString){
  38171. var self=this;
  38172. self["@source"]=aString;
  38173. return self;
  38174. },
  38175. //>>excludeStart("ide", pragmas.excludeIdeData);
  38176. args: ["aString"],
  38177. source: "source: aString\x0a\x09source := aString",
  38178. referencedClasses: [],
  38179. //>>excludeEnd("ide");
  38180. messageSends: []
  38181. }),
  38182. $globals.IRMethod);
  38183. $core.addMethod(
  38184. $core.method({
  38185. selector: "superSends",
  38186. protocol: 'accessing',
  38187. fn: function (){
  38188. var self=this;
  38189. var $1;
  38190. $1=self["@superSends"];
  38191. return $1;
  38192. },
  38193. //>>excludeStart("ide", pragmas.excludeIdeData);
  38194. args: [],
  38195. source: "superSends\x0a\x09^ superSends",
  38196. referencedClasses: [],
  38197. //>>excludeEnd("ide");
  38198. messageSends: []
  38199. }),
  38200. $globals.IRMethod);
  38201. $core.addMethod(
  38202. $core.method({
  38203. selector: "superSends:",
  38204. protocol: 'accessing',
  38205. fn: function (aCollection){
  38206. var self=this;
  38207. self["@superSends"]=aCollection;
  38208. return self;
  38209. },
  38210. //>>excludeStart("ide", pragmas.excludeIdeData);
  38211. args: ["aCollection"],
  38212. source: "superSends: aCollection\x0a\x09superSends := aCollection",
  38213. referencedClasses: [],
  38214. //>>excludeEnd("ide");
  38215. messageSends: []
  38216. }),
  38217. $globals.IRMethod);
  38218. $core.addMethod(
  38219. $core.method({
  38220. selector: "theClass",
  38221. protocol: 'accessing',
  38222. fn: function (){
  38223. var self=this;
  38224. var $1;
  38225. $1=self["@theClass"];
  38226. return $1;
  38227. },
  38228. //>>excludeStart("ide", pragmas.excludeIdeData);
  38229. args: [],
  38230. source: "theClass\x0a\x09^ theClass",
  38231. referencedClasses: [],
  38232. //>>excludeEnd("ide");
  38233. messageSends: []
  38234. }),
  38235. $globals.IRMethod);
  38236. $core.addMethod(
  38237. $core.method({
  38238. selector: "theClass:",
  38239. protocol: 'accessing',
  38240. fn: function (aClass){
  38241. var self=this;
  38242. self["@theClass"]=aClass;
  38243. return self;
  38244. },
  38245. //>>excludeStart("ide", pragmas.excludeIdeData);
  38246. args: ["aClass"],
  38247. source: "theClass: aClass\x0a\x09theClass := aClass",
  38248. referencedClasses: [],
  38249. //>>excludeEnd("ide");
  38250. messageSends: []
  38251. }),
  38252. $globals.IRMethod);
  38253. $core.addClass('IRReturn', $globals.IRScopedInstruction, [], 'Compiler-IR');
  38254. //>>excludeStart("ide", pragmas.excludeIdeData);
  38255. $globals.IRReturn.comment="I am a local return instruction.";
  38256. //>>excludeEnd("ide");
  38257. $core.addMethod(
  38258. $core.method({
  38259. selector: "accept:",
  38260. protocol: 'visiting',
  38261. fn: function (aVisitor){
  38262. var self=this;
  38263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38264. return $core.withContext(function($ctx1) {
  38265. //>>excludeEnd("ctx");
  38266. var $1;
  38267. $1=$recv(aVisitor)._visitIRReturn_(self);
  38268. return $1;
  38269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38270. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRReturn)});
  38271. //>>excludeEnd("ctx");
  38272. },
  38273. //>>excludeStart("ide", pragmas.excludeIdeData);
  38274. args: ["aVisitor"],
  38275. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRReturn: self",
  38276. referencedClasses: [],
  38277. //>>excludeEnd("ide");
  38278. messageSends: ["visitIRReturn:"]
  38279. }),
  38280. $globals.IRReturn);
  38281. $core.addMethod(
  38282. $core.method({
  38283. selector: "canBeAssigned",
  38284. protocol: 'testing',
  38285. fn: function (){
  38286. var self=this;
  38287. return false;
  38288. },
  38289. //>>excludeStart("ide", pragmas.excludeIdeData);
  38290. args: [],
  38291. source: "canBeAssigned\x0a\x09^ false",
  38292. referencedClasses: [],
  38293. //>>excludeEnd("ide");
  38294. messageSends: []
  38295. }),
  38296. $globals.IRReturn);
  38297. $core.addMethod(
  38298. $core.method({
  38299. selector: "isBlockReturn",
  38300. protocol: 'testing',
  38301. fn: function (){
  38302. var self=this;
  38303. return false;
  38304. },
  38305. //>>excludeStart("ide", pragmas.excludeIdeData);
  38306. args: [],
  38307. source: "isBlockReturn\x0a\x09^ false",
  38308. referencedClasses: [],
  38309. //>>excludeEnd("ide");
  38310. messageSends: []
  38311. }),
  38312. $globals.IRReturn);
  38313. $core.addMethod(
  38314. $core.method({
  38315. selector: "isLocalReturn",
  38316. protocol: 'testing',
  38317. fn: function (){
  38318. var self=this;
  38319. return true;
  38320. },
  38321. //>>excludeStart("ide", pragmas.excludeIdeData);
  38322. args: [],
  38323. source: "isLocalReturn\x0a\x09^ true",
  38324. referencedClasses: [],
  38325. //>>excludeEnd("ide");
  38326. messageSends: []
  38327. }),
  38328. $globals.IRReturn);
  38329. $core.addMethod(
  38330. $core.method({
  38331. selector: "isNonLocalReturn",
  38332. protocol: 'testing',
  38333. fn: function (){
  38334. var self=this;
  38335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38336. return $core.withContext(function($ctx1) {
  38337. //>>excludeEnd("ctx");
  38338. var $1;
  38339. $1=$recv(self._isLocalReturn())._not();
  38340. return $1;
  38341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38342. }, function($ctx1) {$ctx1.fill(self,"isNonLocalReturn",{},$globals.IRReturn)});
  38343. //>>excludeEnd("ctx");
  38344. },
  38345. //>>excludeStart("ide", pragmas.excludeIdeData);
  38346. args: [],
  38347. source: "isNonLocalReturn\x0a\x09^ self isLocalReturn not",
  38348. referencedClasses: [],
  38349. //>>excludeEnd("ide");
  38350. messageSends: ["not", "isLocalReturn"]
  38351. }),
  38352. $globals.IRReturn);
  38353. $core.addMethod(
  38354. $core.method({
  38355. selector: "isReturn",
  38356. protocol: 'testing',
  38357. fn: function (){
  38358. var self=this;
  38359. return true;
  38360. },
  38361. //>>excludeStart("ide", pragmas.excludeIdeData);
  38362. args: [],
  38363. source: "isReturn\x0a\x09^ true",
  38364. referencedClasses: [],
  38365. //>>excludeEnd("ide");
  38366. messageSends: []
  38367. }),
  38368. $globals.IRReturn);
  38369. $core.addMethod(
  38370. $core.method({
  38371. selector: "scope",
  38372. protocol: 'accessing',
  38373. fn: function (){
  38374. var self=this;
  38375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38376. return $core.withContext(function($ctx1) {
  38377. //>>excludeEnd("ctx");
  38378. var $2,$1,$receiver;
  38379. $2=self["@scope"];
  38380. if(($receiver = $2) == null || $receiver.isNil){
  38381. $1=$recv(self._parent())._scope();
  38382. } else {
  38383. $1=$2;
  38384. };
  38385. return $1;
  38386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38387. }, function($ctx1) {$ctx1.fill(self,"scope",{},$globals.IRReturn)});
  38388. //>>excludeEnd("ctx");
  38389. },
  38390. //>>excludeStart("ide", pragmas.excludeIdeData);
  38391. args: [],
  38392. source: "scope\x0a\x09^ scope ifNil: [ self parent scope ]",
  38393. referencedClasses: [],
  38394. //>>excludeEnd("ide");
  38395. messageSends: ["ifNil:", "scope", "parent"]
  38396. }),
  38397. $globals.IRReturn);
  38398. $core.addClass('IRBlockReturn', $globals.IRReturn, [], 'Compiler-IR');
  38399. //>>excludeStart("ide", pragmas.excludeIdeData);
  38400. $globals.IRBlockReturn.comment="Smalltalk blocks return their last statement. I am a implicit block return instruction.";
  38401. //>>excludeEnd("ide");
  38402. $core.addMethod(
  38403. $core.method({
  38404. selector: "accept:",
  38405. protocol: 'visiting',
  38406. fn: function (aVisitor){
  38407. var self=this;
  38408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38409. return $core.withContext(function($ctx1) {
  38410. //>>excludeEnd("ctx");
  38411. var $1;
  38412. $1=$recv(aVisitor)._visitIRBlockReturn_(self);
  38413. return $1;
  38414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38415. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRBlockReturn)});
  38416. //>>excludeEnd("ctx");
  38417. },
  38418. //>>excludeStart("ide", pragmas.excludeIdeData);
  38419. args: ["aVisitor"],
  38420. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRBlockReturn: self",
  38421. referencedClasses: [],
  38422. //>>excludeEnd("ide");
  38423. messageSends: ["visitIRBlockReturn:"]
  38424. }),
  38425. $globals.IRBlockReturn);
  38426. $core.addMethod(
  38427. $core.method({
  38428. selector: "isBlockReturn",
  38429. protocol: 'testing',
  38430. fn: function (){
  38431. var self=this;
  38432. return true;
  38433. },
  38434. //>>excludeStart("ide", pragmas.excludeIdeData);
  38435. args: [],
  38436. source: "isBlockReturn\x0a\x09^ true",
  38437. referencedClasses: [],
  38438. //>>excludeEnd("ide");
  38439. messageSends: []
  38440. }),
  38441. $globals.IRBlockReturn);
  38442. $core.addClass('IRNonLocalReturn', $globals.IRReturn, [], 'Compiler-IR');
  38443. //>>excludeStart("ide", pragmas.excludeIdeData);
  38444. $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.";
  38445. //>>excludeEnd("ide");
  38446. $core.addMethod(
  38447. $core.method({
  38448. selector: "accept:",
  38449. protocol: 'visiting',
  38450. fn: function (aVisitor){
  38451. var self=this;
  38452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38453. return $core.withContext(function($ctx1) {
  38454. //>>excludeEnd("ctx");
  38455. var $1;
  38456. $1=$recv(aVisitor)._visitIRNonLocalReturn_(self);
  38457. return $1;
  38458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38459. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRNonLocalReturn)});
  38460. //>>excludeEnd("ctx");
  38461. },
  38462. //>>excludeStart("ide", pragmas.excludeIdeData);
  38463. args: ["aVisitor"],
  38464. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRNonLocalReturn: self",
  38465. referencedClasses: [],
  38466. //>>excludeEnd("ide");
  38467. messageSends: ["visitIRNonLocalReturn:"]
  38468. }),
  38469. $globals.IRNonLocalReturn);
  38470. $core.addMethod(
  38471. $core.method({
  38472. selector: "isLocalReturn",
  38473. protocol: 'testing',
  38474. fn: function (){
  38475. var self=this;
  38476. return false;
  38477. },
  38478. //>>excludeStart("ide", pragmas.excludeIdeData);
  38479. args: [],
  38480. source: "isLocalReturn\x0a\x09^ false",
  38481. referencedClasses: [],
  38482. //>>excludeEnd("ide");
  38483. messageSends: []
  38484. }),
  38485. $globals.IRNonLocalReturn);
  38486. $core.addClass('IRTempDeclaration', $globals.IRScopedInstruction, ['name'], 'Compiler-IR');
  38487. $core.addMethod(
  38488. $core.method({
  38489. selector: "accept:",
  38490. protocol: 'visiting',
  38491. fn: function (aVisitor){
  38492. var self=this;
  38493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38494. return $core.withContext(function($ctx1) {
  38495. //>>excludeEnd("ctx");
  38496. var $1;
  38497. $1=$recv(aVisitor)._visitIRTempDeclaration_(self);
  38498. return $1;
  38499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38500. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRTempDeclaration)});
  38501. //>>excludeEnd("ctx");
  38502. },
  38503. //>>excludeStart("ide", pragmas.excludeIdeData);
  38504. args: ["aVisitor"],
  38505. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRTempDeclaration: self",
  38506. referencedClasses: [],
  38507. //>>excludeEnd("ide");
  38508. messageSends: ["visitIRTempDeclaration:"]
  38509. }),
  38510. $globals.IRTempDeclaration);
  38511. $core.addMethod(
  38512. $core.method({
  38513. selector: "isTempDeclaration",
  38514. protocol: 'testing',
  38515. fn: function (){
  38516. var self=this;
  38517. return true;
  38518. },
  38519. //>>excludeStart("ide", pragmas.excludeIdeData);
  38520. args: [],
  38521. source: "isTempDeclaration\x0a\x09^ true",
  38522. referencedClasses: [],
  38523. //>>excludeEnd("ide");
  38524. messageSends: []
  38525. }),
  38526. $globals.IRTempDeclaration);
  38527. $core.addMethod(
  38528. $core.method({
  38529. selector: "name",
  38530. protocol: 'accessing',
  38531. fn: function (){
  38532. var self=this;
  38533. var $1;
  38534. $1=self["@name"];
  38535. return $1;
  38536. },
  38537. //>>excludeStart("ide", pragmas.excludeIdeData);
  38538. args: [],
  38539. source: "name\x0a\x09^ name",
  38540. referencedClasses: [],
  38541. //>>excludeEnd("ide");
  38542. messageSends: []
  38543. }),
  38544. $globals.IRTempDeclaration);
  38545. $core.addMethod(
  38546. $core.method({
  38547. selector: "name:",
  38548. protocol: 'accessing',
  38549. fn: function (aString){
  38550. var self=this;
  38551. self["@name"]=aString;
  38552. return self;
  38553. },
  38554. //>>excludeStart("ide", pragmas.excludeIdeData);
  38555. args: ["aString"],
  38556. source: "name: aString\x0a\x09name := aString",
  38557. referencedClasses: [],
  38558. //>>excludeEnd("ide");
  38559. messageSends: []
  38560. }),
  38561. $globals.IRTempDeclaration);
  38562. $core.addClass('IRSend', $globals.IRInstruction, ['selector', 'classSend', 'index'], 'Compiler-IR');
  38563. //>>excludeStart("ide", pragmas.excludeIdeData);
  38564. $globals.IRSend.comment="I am a message send instruction.";
  38565. //>>excludeEnd("ide");
  38566. $core.addMethod(
  38567. $core.method({
  38568. selector: "accept:",
  38569. protocol: 'visiting',
  38570. fn: function (aVisitor){
  38571. var self=this;
  38572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38573. return $core.withContext(function($ctx1) {
  38574. //>>excludeEnd("ctx");
  38575. var $1;
  38576. $1=$recv(aVisitor)._visitIRSend_(self);
  38577. return $1;
  38578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38579. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRSend)});
  38580. //>>excludeEnd("ctx");
  38581. },
  38582. //>>excludeStart("ide", pragmas.excludeIdeData);
  38583. args: ["aVisitor"],
  38584. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRSend: self",
  38585. referencedClasses: [],
  38586. //>>excludeEnd("ide");
  38587. messageSends: ["visitIRSend:"]
  38588. }),
  38589. $globals.IRSend);
  38590. $core.addMethod(
  38591. $core.method({
  38592. selector: "classSend",
  38593. protocol: 'accessing',
  38594. fn: function (){
  38595. var self=this;
  38596. var $1;
  38597. $1=self["@classSend"];
  38598. return $1;
  38599. },
  38600. //>>excludeStart("ide", pragmas.excludeIdeData);
  38601. args: [],
  38602. source: "classSend\x0a\x09^ classSend",
  38603. referencedClasses: [],
  38604. //>>excludeEnd("ide");
  38605. messageSends: []
  38606. }),
  38607. $globals.IRSend);
  38608. $core.addMethod(
  38609. $core.method({
  38610. selector: "classSend:",
  38611. protocol: 'accessing',
  38612. fn: function (aClass){
  38613. var self=this;
  38614. self["@classSend"]=aClass;
  38615. return self;
  38616. },
  38617. //>>excludeStart("ide", pragmas.excludeIdeData);
  38618. args: ["aClass"],
  38619. source: "classSend: aClass\x0a\x09classSend := aClass",
  38620. referencedClasses: [],
  38621. //>>excludeEnd("ide");
  38622. messageSends: []
  38623. }),
  38624. $globals.IRSend);
  38625. $core.addMethod(
  38626. $core.method({
  38627. selector: "index",
  38628. protocol: 'accessing',
  38629. fn: function (){
  38630. var self=this;
  38631. var $1;
  38632. $1=self["@index"];
  38633. return $1;
  38634. },
  38635. //>>excludeStart("ide", pragmas.excludeIdeData);
  38636. args: [],
  38637. source: "index\x0a\x09^ index",
  38638. referencedClasses: [],
  38639. //>>excludeEnd("ide");
  38640. messageSends: []
  38641. }),
  38642. $globals.IRSend);
  38643. $core.addMethod(
  38644. $core.method({
  38645. selector: "index:",
  38646. protocol: 'accessing',
  38647. fn: function (anInteger){
  38648. var self=this;
  38649. self["@index"]=anInteger;
  38650. return self;
  38651. },
  38652. //>>excludeStart("ide", pragmas.excludeIdeData);
  38653. args: ["anInteger"],
  38654. source: "index: anInteger\x0a\x09index := anInteger",
  38655. referencedClasses: [],
  38656. //>>excludeEnd("ide");
  38657. messageSends: []
  38658. }),
  38659. $globals.IRSend);
  38660. $core.addMethod(
  38661. $core.method({
  38662. selector: "isSend",
  38663. protocol: 'testing',
  38664. fn: function (){
  38665. var self=this;
  38666. return true;
  38667. },
  38668. //>>excludeStart("ide", pragmas.excludeIdeData);
  38669. args: [],
  38670. source: "isSend\x0a\x09^ true",
  38671. referencedClasses: [],
  38672. //>>excludeEnd("ide");
  38673. messageSends: []
  38674. }),
  38675. $globals.IRSend);
  38676. $core.addMethod(
  38677. $core.method({
  38678. selector: "selector",
  38679. protocol: 'accessing',
  38680. fn: function (){
  38681. var self=this;
  38682. var $1;
  38683. $1=self["@selector"];
  38684. return $1;
  38685. },
  38686. //>>excludeStart("ide", pragmas.excludeIdeData);
  38687. args: [],
  38688. source: "selector\x0a\x09^ selector",
  38689. referencedClasses: [],
  38690. //>>excludeEnd("ide");
  38691. messageSends: []
  38692. }),
  38693. $globals.IRSend);
  38694. $core.addMethod(
  38695. $core.method({
  38696. selector: "selector:",
  38697. protocol: 'accessing',
  38698. fn: function (aString){
  38699. var self=this;
  38700. self["@selector"]=aString;
  38701. return self;
  38702. },
  38703. //>>excludeStart("ide", pragmas.excludeIdeData);
  38704. args: ["aString"],
  38705. source: "selector: aString\x0a\x09selector := aString",
  38706. referencedClasses: [],
  38707. //>>excludeEnd("ide");
  38708. messageSends: []
  38709. }),
  38710. $globals.IRSend);
  38711. $core.addClass('IRSequence', $globals.IRInstruction, [], 'Compiler-IR');
  38712. $core.addMethod(
  38713. $core.method({
  38714. selector: "accept:",
  38715. protocol: 'visiting',
  38716. fn: function (aVisitor){
  38717. var self=this;
  38718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38719. return $core.withContext(function($ctx1) {
  38720. //>>excludeEnd("ctx");
  38721. var $1;
  38722. $1=$recv(aVisitor)._visitIRSequence_(self);
  38723. return $1;
  38724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38725. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRSequence)});
  38726. //>>excludeEnd("ctx");
  38727. },
  38728. //>>excludeStart("ide", pragmas.excludeIdeData);
  38729. args: ["aVisitor"],
  38730. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRSequence: self",
  38731. referencedClasses: [],
  38732. //>>excludeEnd("ide");
  38733. messageSends: ["visitIRSequence:"]
  38734. }),
  38735. $globals.IRSequence);
  38736. $core.addMethod(
  38737. $core.method({
  38738. selector: "isSequence",
  38739. protocol: 'testing',
  38740. fn: function (){
  38741. var self=this;
  38742. return true;
  38743. },
  38744. //>>excludeStart("ide", pragmas.excludeIdeData);
  38745. args: [],
  38746. source: "isSequence\x0a\x09^ true",
  38747. referencedClasses: [],
  38748. //>>excludeEnd("ide");
  38749. messageSends: []
  38750. }),
  38751. $globals.IRSequence);
  38752. $core.addClass('IRBlockSequence', $globals.IRSequence, [], 'Compiler-IR');
  38753. $core.addMethod(
  38754. $core.method({
  38755. selector: "accept:",
  38756. protocol: 'visiting',
  38757. fn: function (aVisitor){
  38758. var self=this;
  38759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38760. return $core.withContext(function($ctx1) {
  38761. //>>excludeEnd("ctx");
  38762. var $1;
  38763. $1=$recv(aVisitor)._visitIRBlockSequence_(self);
  38764. return $1;
  38765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38766. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRBlockSequence)});
  38767. //>>excludeEnd("ctx");
  38768. },
  38769. //>>excludeStart("ide", pragmas.excludeIdeData);
  38770. args: ["aVisitor"],
  38771. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRBlockSequence: self",
  38772. referencedClasses: [],
  38773. //>>excludeEnd("ide");
  38774. messageSends: ["visitIRBlockSequence:"]
  38775. }),
  38776. $globals.IRBlockSequence);
  38777. $core.addClass('IRValue', $globals.IRInstruction, ['value'], 'Compiler-IR');
  38778. //>>excludeStart("ide", pragmas.excludeIdeData);
  38779. $globals.IRValue.comment="I am the simplest possible instruction. I represent a value.";
  38780. //>>excludeEnd("ide");
  38781. $core.addMethod(
  38782. $core.method({
  38783. selector: "accept:",
  38784. protocol: 'visiting',
  38785. fn: function (aVisitor){
  38786. var self=this;
  38787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38788. return $core.withContext(function($ctx1) {
  38789. //>>excludeEnd("ctx");
  38790. var $1;
  38791. $1=$recv(aVisitor)._visitIRValue_(self);
  38792. return $1;
  38793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38794. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRValue)});
  38795. //>>excludeEnd("ctx");
  38796. },
  38797. //>>excludeStart("ide", pragmas.excludeIdeData);
  38798. args: ["aVisitor"],
  38799. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRValue: self",
  38800. referencedClasses: [],
  38801. //>>excludeEnd("ide");
  38802. messageSends: ["visitIRValue:"]
  38803. }),
  38804. $globals.IRValue);
  38805. $core.addMethod(
  38806. $core.method({
  38807. selector: "needsBoxingAsReceiver",
  38808. protocol: 'testing',
  38809. fn: function (){
  38810. var self=this;
  38811. return false;
  38812. },
  38813. //>>excludeStart("ide", pragmas.excludeIdeData);
  38814. args: [],
  38815. source: "needsBoxingAsReceiver\x0a\x09^ false",
  38816. referencedClasses: [],
  38817. //>>excludeEnd("ide");
  38818. messageSends: []
  38819. }),
  38820. $globals.IRValue);
  38821. $core.addMethod(
  38822. $core.method({
  38823. selector: "value",
  38824. protocol: 'accessing',
  38825. fn: function (){
  38826. var self=this;
  38827. var $1;
  38828. $1=self["@value"];
  38829. return $1;
  38830. },
  38831. //>>excludeStart("ide", pragmas.excludeIdeData);
  38832. args: [],
  38833. source: "value\x0a\x09^ value",
  38834. referencedClasses: [],
  38835. //>>excludeEnd("ide");
  38836. messageSends: []
  38837. }),
  38838. $globals.IRValue);
  38839. $core.addMethod(
  38840. $core.method({
  38841. selector: "value:",
  38842. protocol: 'accessing',
  38843. fn: function (aString){
  38844. var self=this;
  38845. self["@value"]=aString;
  38846. return self;
  38847. },
  38848. //>>excludeStart("ide", pragmas.excludeIdeData);
  38849. args: ["aString"],
  38850. source: "value: aString\x0a\x09value := aString",
  38851. referencedClasses: [],
  38852. //>>excludeEnd("ide");
  38853. messageSends: []
  38854. }),
  38855. $globals.IRValue);
  38856. $core.addClass('IRVariable', $globals.IRInstruction, ['variable'], 'Compiler-IR');
  38857. //>>excludeStart("ide", pragmas.excludeIdeData);
  38858. $globals.IRVariable.comment="I am a variable instruction.";
  38859. //>>excludeEnd("ide");
  38860. $core.addMethod(
  38861. $core.method({
  38862. selector: "accept:",
  38863. protocol: 'visiting',
  38864. fn: function (aVisitor){
  38865. var self=this;
  38866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38867. return $core.withContext(function($ctx1) {
  38868. //>>excludeEnd("ctx");
  38869. var $1;
  38870. $1=$recv(aVisitor)._visitIRVariable_(self);
  38871. return $1;
  38872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38873. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRVariable)});
  38874. //>>excludeEnd("ctx");
  38875. },
  38876. //>>excludeStart("ide", pragmas.excludeIdeData);
  38877. args: ["aVisitor"],
  38878. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRVariable: self",
  38879. referencedClasses: [],
  38880. //>>excludeEnd("ide");
  38881. messageSends: ["visitIRVariable:"]
  38882. }),
  38883. $globals.IRVariable);
  38884. $core.addMethod(
  38885. $core.method({
  38886. selector: "isVariable",
  38887. protocol: 'testing',
  38888. fn: function (){
  38889. var self=this;
  38890. return true;
  38891. },
  38892. //>>excludeStart("ide", pragmas.excludeIdeData);
  38893. args: [],
  38894. source: "isVariable\x0a\x09^ true",
  38895. referencedClasses: [],
  38896. //>>excludeEnd("ide");
  38897. messageSends: []
  38898. }),
  38899. $globals.IRVariable);
  38900. $core.addMethod(
  38901. $core.method({
  38902. selector: "needsBoxingAsReceiver",
  38903. protocol: 'testing',
  38904. fn: function (){
  38905. var self=this;
  38906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38907. return $core.withContext(function($ctx1) {
  38908. //>>excludeEnd("ctx");
  38909. var $1;
  38910. $1=$recv($recv(self._variable())._isPseudoVar())._not();
  38911. return $1;
  38912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38913. }, function($ctx1) {$ctx1.fill(self,"needsBoxingAsReceiver",{},$globals.IRVariable)});
  38914. //>>excludeEnd("ctx");
  38915. },
  38916. //>>excludeStart("ide", pragmas.excludeIdeData);
  38917. args: [],
  38918. source: "needsBoxingAsReceiver\x0a\x09^ self variable isPseudoVar not",
  38919. referencedClasses: [],
  38920. //>>excludeEnd("ide");
  38921. messageSends: ["not", "isPseudoVar", "variable"]
  38922. }),
  38923. $globals.IRVariable);
  38924. $core.addMethod(
  38925. $core.method({
  38926. selector: "variable",
  38927. protocol: 'accessing',
  38928. fn: function (){
  38929. var self=this;
  38930. var $1;
  38931. $1=self["@variable"];
  38932. return $1;
  38933. },
  38934. //>>excludeStart("ide", pragmas.excludeIdeData);
  38935. args: [],
  38936. source: "variable\x0a\x09^ variable",
  38937. referencedClasses: [],
  38938. //>>excludeEnd("ide");
  38939. messageSends: []
  38940. }),
  38941. $globals.IRVariable);
  38942. $core.addMethod(
  38943. $core.method({
  38944. selector: "variable:",
  38945. protocol: 'accessing',
  38946. fn: function (aScopeVariable){
  38947. var self=this;
  38948. self["@variable"]=aScopeVariable;
  38949. return self;
  38950. },
  38951. //>>excludeStart("ide", pragmas.excludeIdeData);
  38952. args: ["aScopeVariable"],
  38953. source: "variable: aScopeVariable\x0a\x09variable := aScopeVariable",
  38954. referencedClasses: [],
  38955. //>>excludeEnd("ide");
  38956. messageSends: []
  38957. }),
  38958. $globals.IRVariable);
  38959. $core.addClass('IRVerbatim', $globals.IRInstruction, ['source'], 'Compiler-IR');
  38960. $core.addMethod(
  38961. $core.method({
  38962. selector: "accept:",
  38963. protocol: 'visiting',
  38964. fn: function (aVisitor){
  38965. var self=this;
  38966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38967. return $core.withContext(function($ctx1) {
  38968. //>>excludeEnd("ctx");
  38969. var $1;
  38970. $1=$recv(aVisitor)._visitIRVerbatim_(self);
  38971. return $1;
  38972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38973. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRVerbatim)});
  38974. //>>excludeEnd("ctx");
  38975. },
  38976. //>>excludeStart("ide", pragmas.excludeIdeData);
  38977. args: ["aVisitor"],
  38978. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRVerbatim: self",
  38979. referencedClasses: [],
  38980. //>>excludeEnd("ide");
  38981. messageSends: ["visitIRVerbatim:"]
  38982. }),
  38983. $globals.IRVerbatim);
  38984. $core.addMethod(
  38985. $core.method({
  38986. selector: "source",
  38987. protocol: 'accessing',
  38988. fn: function (){
  38989. var self=this;
  38990. var $1;
  38991. $1=self["@source"];
  38992. return $1;
  38993. },
  38994. //>>excludeStart("ide", pragmas.excludeIdeData);
  38995. args: [],
  38996. source: "source\x0a\x09^ source",
  38997. referencedClasses: [],
  38998. //>>excludeEnd("ide");
  38999. messageSends: []
  39000. }),
  39001. $globals.IRVerbatim);
  39002. $core.addMethod(
  39003. $core.method({
  39004. selector: "source:",
  39005. protocol: 'accessing',
  39006. fn: function (aString){
  39007. var self=this;
  39008. self["@source"]=aString;
  39009. return self;
  39010. },
  39011. //>>excludeStart("ide", pragmas.excludeIdeData);
  39012. args: ["aString"],
  39013. source: "source: aString\x0a\x09source := aString",
  39014. referencedClasses: [],
  39015. //>>excludeEnd("ide");
  39016. messageSends: []
  39017. }),
  39018. $globals.IRVerbatim);
  39019. $core.addClass('IRVisitor', $globals.Object, [], 'Compiler-IR');
  39020. $core.addMethod(
  39021. $core.method({
  39022. selector: "visit:",
  39023. protocol: 'visiting',
  39024. fn: function (anIRInstruction){
  39025. var self=this;
  39026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39027. return $core.withContext(function($ctx1) {
  39028. //>>excludeEnd("ctx");
  39029. var $1;
  39030. $1=$recv(anIRInstruction)._accept_(self);
  39031. return $1;
  39032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39033. }, function($ctx1) {$ctx1.fill(self,"visit:",{anIRInstruction:anIRInstruction},$globals.IRVisitor)});
  39034. //>>excludeEnd("ctx");
  39035. },
  39036. //>>excludeStart("ide", pragmas.excludeIdeData);
  39037. args: ["anIRInstruction"],
  39038. source: "visit: anIRInstruction\x0a\x09^ anIRInstruction accept: self",
  39039. referencedClasses: [],
  39040. //>>excludeEnd("ide");
  39041. messageSends: ["accept:"]
  39042. }),
  39043. $globals.IRVisitor);
  39044. $core.addMethod(
  39045. $core.method({
  39046. selector: "visitIRAssignment:",
  39047. protocol: 'visiting',
  39048. fn: function (anIRAssignment){
  39049. var self=this;
  39050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39051. return $core.withContext(function($ctx1) {
  39052. //>>excludeEnd("ctx");
  39053. var $1;
  39054. $1=self._visitIRInstruction_(anIRAssignment);
  39055. return $1;
  39056. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39057. }, function($ctx1) {$ctx1.fill(self,"visitIRAssignment:",{anIRAssignment:anIRAssignment},$globals.IRVisitor)});
  39058. //>>excludeEnd("ctx");
  39059. },
  39060. //>>excludeStart("ide", pragmas.excludeIdeData);
  39061. args: ["anIRAssignment"],
  39062. source: "visitIRAssignment: anIRAssignment\x0a\x09^ self visitIRInstruction: anIRAssignment",
  39063. referencedClasses: [],
  39064. //>>excludeEnd("ide");
  39065. messageSends: ["visitIRInstruction:"]
  39066. }),
  39067. $globals.IRVisitor);
  39068. $core.addMethod(
  39069. $core.method({
  39070. selector: "visitIRBlockReturn:",
  39071. protocol: 'visiting',
  39072. fn: function (anIRBlockReturn){
  39073. var self=this;
  39074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39075. return $core.withContext(function($ctx1) {
  39076. //>>excludeEnd("ctx");
  39077. var $1;
  39078. $1=self._visitIRReturn_(anIRBlockReturn);
  39079. return $1;
  39080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39081. }, function($ctx1) {$ctx1.fill(self,"visitIRBlockReturn:",{anIRBlockReturn:anIRBlockReturn},$globals.IRVisitor)});
  39082. //>>excludeEnd("ctx");
  39083. },
  39084. //>>excludeStart("ide", pragmas.excludeIdeData);
  39085. args: ["anIRBlockReturn"],
  39086. source: "visitIRBlockReturn: anIRBlockReturn\x0a\x09^ self visitIRReturn: anIRBlockReturn",
  39087. referencedClasses: [],
  39088. //>>excludeEnd("ide");
  39089. messageSends: ["visitIRReturn:"]
  39090. }),
  39091. $globals.IRVisitor);
  39092. $core.addMethod(
  39093. $core.method({
  39094. selector: "visitIRBlockSequence:",
  39095. protocol: 'visiting',
  39096. fn: function (anIRBlockSequence){
  39097. var self=this;
  39098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39099. return $core.withContext(function($ctx1) {
  39100. //>>excludeEnd("ctx");
  39101. var $1;
  39102. $1=self._visitIRSequence_(anIRBlockSequence);
  39103. return $1;
  39104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39105. }, function($ctx1) {$ctx1.fill(self,"visitIRBlockSequence:",{anIRBlockSequence:anIRBlockSequence},$globals.IRVisitor)});
  39106. //>>excludeEnd("ctx");
  39107. },
  39108. //>>excludeStart("ide", pragmas.excludeIdeData);
  39109. args: ["anIRBlockSequence"],
  39110. source: "visitIRBlockSequence: anIRBlockSequence\x0a\x09^ self visitIRSequence: anIRBlockSequence",
  39111. referencedClasses: [],
  39112. //>>excludeEnd("ide");
  39113. messageSends: ["visitIRSequence:"]
  39114. }),
  39115. $globals.IRVisitor);
  39116. $core.addMethod(
  39117. $core.method({
  39118. selector: "visitIRClosure:",
  39119. protocol: 'visiting',
  39120. fn: function (anIRClosure){
  39121. var self=this;
  39122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39123. return $core.withContext(function($ctx1) {
  39124. //>>excludeEnd("ctx");
  39125. var $1;
  39126. $1=self._visitIRInstruction_(anIRClosure);
  39127. return $1;
  39128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39129. }, function($ctx1) {$ctx1.fill(self,"visitIRClosure:",{anIRClosure:anIRClosure},$globals.IRVisitor)});
  39130. //>>excludeEnd("ctx");
  39131. },
  39132. //>>excludeStart("ide", pragmas.excludeIdeData);
  39133. args: ["anIRClosure"],
  39134. source: "visitIRClosure: anIRClosure\x0a\x09^ self visitIRInstruction: anIRClosure",
  39135. referencedClasses: [],
  39136. //>>excludeEnd("ide");
  39137. messageSends: ["visitIRInstruction:"]
  39138. }),
  39139. $globals.IRVisitor);
  39140. $core.addMethod(
  39141. $core.method({
  39142. selector: "visitIRDynamicArray:",
  39143. protocol: 'visiting',
  39144. fn: function (anIRDynamicArray){
  39145. var self=this;
  39146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39147. return $core.withContext(function($ctx1) {
  39148. //>>excludeEnd("ctx");
  39149. var $1;
  39150. $1=self._visitIRInstruction_(anIRDynamicArray);
  39151. return $1;
  39152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39153. }, function($ctx1) {$ctx1.fill(self,"visitIRDynamicArray:",{anIRDynamicArray:anIRDynamicArray},$globals.IRVisitor)});
  39154. //>>excludeEnd("ctx");
  39155. },
  39156. //>>excludeStart("ide", pragmas.excludeIdeData);
  39157. args: ["anIRDynamicArray"],
  39158. source: "visitIRDynamicArray: anIRDynamicArray\x0a\x09^ self visitIRInstruction: anIRDynamicArray",
  39159. referencedClasses: [],
  39160. //>>excludeEnd("ide");
  39161. messageSends: ["visitIRInstruction:"]
  39162. }),
  39163. $globals.IRVisitor);
  39164. $core.addMethod(
  39165. $core.method({
  39166. selector: "visitIRDynamicDictionary:",
  39167. protocol: 'visiting',
  39168. fn: function (anIRDynamicDictionary){
  39169. var self=this;
  39170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39171. return $core.withContext(function($ctx1) {
  39172. //>>excludeEnd("ctx");
  39173. var $1;
  39174. $1=self._visitIRInstruction_(anIRDynamicDictionary);
  39175. return $1;
  39176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39177. }, function($ctx1) {$ctx1.fill(self,"visitIRDynamicDictionary:",{anIRDynamicDictionary:anIRDynamicDictionary},$globals.IRVisitor)});
  39178. //>>excludeEnd("ctx");
  39179. },
  39180. //>>excludeStart("ide", pragmas.excludeIdeData);
  39181. args: ["anIRDynamicDictionary"],
  39182. source: "visitIRDynamicDictionary: anIRDynamicDictionary\x0a\x09^ self visitIRInstruction: anIRDynamicDictionary",
  39183. referencedClasses: [],
  39184. //>>excludeEnd("ide");
  39185. messageSends: ["visitIRInstruction:"]
  39186. }),
  39187. $globals.IRVisitor);
  39188. $core.addMethod(
  39189. $core.method({
  39190. selector: "visitIRInlinedClosure:",
  39191. protocol: 'visiting',
  39192. fn: function (anIRInlinedClosure){
  39193. var self=this;
  39194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39195. return $core.withContext(function($ctx1) {
  39196. //>>excludeEnd("ctx");
  39197. var $1;
  39198. $1=self._visitIRClosure_(anIRInlinedClosure);
  39199. return $1;
  39200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39201. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedClosure:",{anIRInlinedClosure:anIRInlinedClosure},$globals.IRVisitor)});
  39202. //>>excludeEnd("ctx");
  39203. },
  39204. //>>excludeStart("ide", pragmas.excludeIdeData);
  39205. args: ["anIRInlinedClosure"],
  39206. source: "visitIRInlinedClosure: anIRInlinedClosure\x0a\x09^ self visitIRClosure: anIRInlinedClosure",
  39207. referencedClasses: [],
  39208. //>>excludeEnd("ide");
  39209. messageSends: ["visitIRClosure:"]
  39210. }),
  39211. $globals.IRVisitor);
  39212. $core.addMethod(
  39213. $core.method({
  39214. selector: "visitIRInlinedSequence:",
  39215. protocol: 'visiting',
  39216. fn: function (anIRInlinedSequence){
  39217. var self=this;
  39218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39219. return $core.withContext(function($ctx1) {
  39220. //>>excludeEnd("ctx");
  39221. var $1;
  39222. $1=self._visitIRSequence_(anIRInlinedSequence);
  39223. return $1;
  39224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39225. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedSequence:",{anIRInlinedSequence:anIRInlinedSequence},$globals.IRVisitor)});
  39226. //>>excludeEnd("ctx");
  39227. },
  39228. //>>excludeStart("ide", pragmas.excludeIdeData);
  39229. args: ["anIRInlinedSequence"],
  39230. source: "visitIRInlinedSequence: anIRInlinedSequence\x0a\x09^ self visitIRSequence: anIRInlinedSequence",
  39231. referencedClasses: [],
  39232. //>>excludeEnd("ide");
  39233. messageSends: ["visitIRSequence:"]
  39234. }),
  39235. $globals.IRVisitor);
  39236. $core.addMethod(
  39237. $core.method({
  39238. selector: "visitIRInstruction:",
  39239. protocol: 'visiting',
  39240. fn: function (anIRInstruction){
  39241. var self=this;
  39242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39243. return $core.withContext(function($ctx1) {
  39244. //>>excludeEnd("ctx");
  39245. $recv($recv(anIRInstruction)._instructions())._do_((function(each){
  39246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39247. return $core.withContext(function($ctx2) {
  39248. //>>excludeEnd("ctx");
  39249. return self._visit_(each);
  39250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39251. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  39252. //>>excludeEnd("ctx");
  39253. }));
  39254. return anIRInstruction;
  39255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39256. }, function($ctx1) {$ctx1.fill(self,"visitIRInstruction:",{anIRInstruction:anIRInstruction},$globals.IRVisitor)});
  39257. //>>excludeEnd("ctx");
  39258. },
  39259. //>>excludeStart("ide", pragmas.excludeIdeData);
  39260. args: ["anIRInstruction"],
  39261. source: "visitIRInstruction: anIRInstruction\x0a\x09anIRInstruction instructions do: [ :each | self visit: each ].\x0a\x09^ anIRInstruction",
  39262. referencedClasses: [],
  39263. //>>excludeEnd("ide");
  39264. messageSends: ["do:", "instructions", "visit:"]
  39265. }),
  39266. $globals.IRVisitor);
  39267. $core.addMethod(
  39268. $core.method({
  39269. selector: "visitIRMethod:",
  39270. protocol: 'visiting',
  39271. fn: function (anIRMethod){
  39272. var self=this;
  39273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39274. return $core.withContext(function($ctx1) {
  39275. //>>excludeEnd("ctx");
  39276. var $1;
  39277. $1=self._visitIRInstruction_(anIRMethod);
  39278. return $1;
  39279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39280. }, function($ctx1) {$ctx1.fill(self,"visitIRMethod:",{anIRMethod:anIRMethod},$globals.IRVisitor)});
  39281. //>>excludeEnd("ctx");
  39282. },
  39283. //>>excludeStart("ide", pragmas.excludeIdeData);
  39284. args: ["anIRMethod"],
  39285. source: "visitIRMethod: anIRMethod\x0a\x09^ self visitIRInstruction: anIRMethod",
  39286. referencedClasses: [],
  39287. //>>excludeEnd("ide");
  39288. messageSends: ["visitIRInstruction:"]
  39289. }),
  39290. $globals.IRVisitor);
  39291. $core.addMethod(
  39292. $core.method({
  39293. selector: "visitIRNonLocalReturn:",
  39294. protocol: 'visiting',
  39295. fn: function (anIRNonLocalReturn){
  39296. var self=this;
  39297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39298. return $core.withContext(function($ctx1) {
  39299. //>>excludeEnd("ctx");
  39300. var $1;
  39301. $1=self._visitIRInstruction_(anIRNonLocalReturn);
  39302. return $1;
  39303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39304. }, function($ctx1) {$ctx1.fill(self,"visitIRNonLocalReturn:",{anIRNonLocalReturn:anIRNonLocalReturn},$globals.IRVisitor)});
  39305. //>>excludeEnd("ctx");
  39306. },
  39307. //>>excludeStart("ide", pragmas.excludeIdeData);
  39308. args: ["anIRNonLocalReturn"],
  39309. source: "visitIRNonLocalReturn: anIRNonLocalReturn\x0a\x09^ self visitIRInstruction: anIRNonLocalReturn",
  39310. referencedClasses: [],
  39311. //>>excludeEnd("ide");
  39312. messageSends: ["visitIRInstruction:"]
  39313. }),
  39314. $globals.IRVisitor);
  39315. $core.addMethod(
  39316. $core.method({
  39317. selector: "visitIRNonLocalReturnHandling:",
  39318. protocol: 'visiting',
  39319. fn: function (anIRNonLocalReturnHandling){
  39320. var self=this;
  39321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39322. return $core.withContext(function($ctx1) {
  39323. //>>excludeEnd("ctx");
  39324. var $1;
  39325. $1=self._visitIRInstruction_(anIRNonLocalReturnHandling);
  39326. return $1;
  39327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39328. }, function($ctx1) {$ctx1.fill(self,"visitIRNonLocalReturnHandling:",{anIRNonLocalReturnHandling:anIRNonLocalReturnHandling},$globals.IRVisitor)});
  39329. //>>excludeEnd("ctx");
  39330. },
  39331. //>>excludeStart("ide", pragmas.excludeIdeData);
  39332. args: ["anIRNonLocalReturnHandling"],
  39333. source: "visitIRNonLocalReturnHandling: anIRNonLocalReturnHandling\x0a\x09^ self visitIRInstruction: anIRNonLocalReturnHandling",
  39334. referencedClasses: [],
  39335. //>>excludeEnd("ide");
  39336. messageSends: ["visitIRInstruction:"]
  39337. }),
  39338. $globals.IRVisitor);
  39339. $core.addMethod(
  39340. $core.method({
  39341. selector: "visitIRReturn:",
  39342. protocol: 'visiting',
  39343. fn: function (anIRReturn){
  39344. var self=this;
  39345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39346. return $core.withContext(function($ctx1) {
  39347. //>>excludeEnd("ctx");
  39348. var $1;
  39349. $1=self._visitIRInstruction_(anIRReturn);
  39350. return $1;
  39351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39352. }, function($ctx1) {$ctx1.fill(self,"visitIRReturn:",{anIRReturn:anIRReturn},$globals.IRVisitor)});
  39353. //>>excludeEnd("ctx");
  39354. },
  39355. //>>excludeStart("ide", pragmas.excludeIdeData);
  39356. args: ["anIRReturn"],
  39357. source: "visitIRReturn: anIRReturn\x0a\x09^ self visitIRInstruction: anIRReturn",
  39358. referencedClasses: [],
  39359. //>>excludeEnd("ide");
  39360. messageSends: ["visitIRInstruction:"]
  39361. }),
  39362. $globals.IRVisitor);
  39363. $core.addMethod(
  39364. $core.method({
  39365. selector: "visitIRSend:",
  39366. protocol: 'visiting',
  39367. fn: function (anIRSend){
  39368. var self=this;
  39369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39370. return $core.withContext(function($ctx1) {
  39371. //>>excludeEnd("ctx");
  39372. var $1;
  39373. $1=self._visitIRInstruction_(anIRSend);
  39374. return $1;
  39375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39376. }, function($ctx1) {$ctx1.fill(self,"visitIRSend:",{anIRSend:anIRSend},$globals.IRVisitor)});
  39377. //>>excludeEnd("ctx");
  39378. },
  39379. //>>excludeStart("ide", pragmas.excludeIdeData);
  39380. args: ["anIRSend"],
  39381. source: "visitIRSend: anIRSend\x0a\x09^ self visitIRInstruction: anIRSend",
  39382. referencedClasses: [],
  39383. //>>excludeEnd("ide");
  39384. messageSends: ["visitIRInstruction:"]
  39385. }),
  39386. $globals.IRVisitor);
  39387. $core.addMethod(
  39388. $core.method({
  39389. selector: "visitIRSequence:",
  39390. protocol: 'visiting',
  39391. fn: function (anIRSequence){
  39392. var self=this;
  39393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39394. return $core.withContext(function($ctx1) {
  39395. //>>excludeEnd("ctx");
  39396. var $1;
  39397. $1=self._visitIRInstruction_(anIRSequence);
  39398. return $1;
  39399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39400. }, function($ctx1) {$ctx1.fill(self,"visitIRSequence:",{anIRSequence:anIRSequence},$globals.IRVisitor)});
  39401. //>>excludeEnd("ctx");
  39402. },
  39403. //>>excludeStart("ide", pragmas.excludeIdeData);
  39404. args: ["anIRSequence"],
  39405. source: "visitIRSequence: anIRSequence\x0a\x09^ self visitIRInstruction: anIRSequence",
  39406. referencedClasses: [],
  39407. //>>excludeEnd("ide");
  39408. messageSends: ["visitIRInstruction:"]
  39409. }),
  39410. $globals.IRVisitor);
  39411. $core.addMethod(
  39412. $core.method({
  39413. selector: "visitIRTempDeclaration:",
  39414. protocol: 'visiting',
  39415. fn: function (anIRTempDeclaration){
  39416. var self=this;
  39417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39418. return $core.withContext(function($ctx1) {
  39419. //>>excludeEnd("ctx");
  39420. var $1;
  39421. $1=self._visitIRInstruction_(anIRTempDeclaration);
  39422. return $1;
  39423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39424. }, function($ctx1) {$ctx1.fill(self,"visitIRTempDeclaration:",{anIRTempDeclaration:anIRTempDeclaration},$globals.IRVisitor)});
  39425. //>>excludeEnd("ctx");
  39426. },
  39427. //>>excludeStart("ide", pragmas.excludeIdeData);
  39428. args: ["anIRTempDeclaration"],
  39429. source: "visitIRTempDeclaration: anIRTempDeclaration\x0a\x09^ self visitIRInstruction: anIRTempDeclaration",
  39430. referencedClasses: [],
  39431. //>>excludeEnd("ide");
  39432. messageSends: ["visitIRInstruction:"]
  39433. }),
  39434. $globals.IRVisitor);
  39435. $core.addMethod(
  39436. $core.method({
  39437. selector: "visitIRValue:",
  39438. protocol: 'visiting',
  39439. fn: function (anIRValue){
  39440. var self=this;
  39441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39442. return $core.withContext(function($ctx1) {
  39443. //>>excludeEnd("ctx");
  39444. var $1;
  39445. $1=self._visitIRInstruction_(anIRValue);
  39446. return $1;
  39447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39448. }, function($ctx1) {$ctx1.fill(self,"visitIRValue:",{anIRValue:anIRValue},$globals.IRVisitor)});
  39449. //>>excludeEnd("ctx");
  39450. },
  39451. //>>excludeStart("ide", pragmas.excludeIdeData);
  39452. args: ["anIRValue"],
  39453. source: "visitIRValue: anIRValue\x0a\x09^ self visitIRInstruction: anIRValue",
  39454. referencedClasses: [],
  39455. //>>excludeEnd("ide");
  39456. messageSends: ["visitIRInstruction:"]
  39457. }),
  39458. $globals.IRVisitor);
  39459. $core.addMethod(
  39460. $core.method({
  39461. selector: "visitIRVariable:",
  39462. protocol: 'visiting',
  39463. fn: function (anIRVariable){
  39464. var self=this;
  39465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39466. return $core.withContext(function($ctx1) {
  39467. //>>excludeEnd("ctx");
  39468. var $1;
  39469. $1=self._visitIRInstruction_(anIRVariable);
  39470. return $1;
  39471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39472. }, function($ctx1) {$ctx1.fill(self,"visitIRVariable:",{anIRVariable:anIRVariable},$globals.IRVisitor)});
  39473. //>>excludeEnd("ctx");
  39474. },
  39475. //>>excludeStart("ide", pragmas.excludeIdeData);
  39476. args: ["anIRVariable"],
  39477. source: "visitIRVariable: anIRVariable\x0a\x09^ self visitIRInstruction: anIRVariable",
  39478. referencedClasses: [],
  39479. //>>excludeEnd("ide");
  39480. messageSends: ["visitIRInstruction:"]
  39481. }),
  39482. $globals.IRVisitor);
  39483. $core.addMethod(
  39484. $core.method({
  39485. selector: "visitIRVerbatim:",
  39486. protocol: 'visiting',
  39487. fn: function (anIRVerbatim){
  39488. var self=this;
  39489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39490. return $core.withContext(function($ctx1) {
  39491. //>>excludeEnd("ctx");
  39492. var $1;
  39493. $1=self._visitIRInstruction_(anIRVerbatim);
  39494. return $1;
  39495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39496. }, function($ctx1) {$ctx1.fill(self,"visitIRVerbatim:",{anIRVerbatim:anIRVerbatim},$globals.IRVisitor)});
  39497. //>>excludeEnd("ctx");
  39498. },
  39499. //>>excludeStart("ide", pragmas.excludeIdeData);
  39500. args: ["anIRVerbatim"],
  39501. source: "visitIRVerbatim: anIRVerbatim\x0a\x09^ self visitIRInstruction: anIRVerbatim",
  39502. referencedClasses: [],
  39503. //>>excludeEnd("ide");
  39504. messageSends: ["visitIRInstruction:"]
  39505. }),
  39506. $globals.IRVisitor);
  39507. $core.addClass('IRJSTranslator', $globals.IRVisitor, ['stream', 'currentClass'], 'Compiler-IR');
  39508. $core.addMethod(
  39509. $core.method({
  39510. selector: "contents",
  39511. protocol: 'accessing',
  39512. fn: function (){
  39513. var self=this;
  39514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39515. return $core.withContext(function($ctx1) {
  39516. //>>excludeEnd("ctx");
  39517. var $1;
  39518. $1=$recv(self._stream())._contents();
  39519. return $1;
  39520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39521. }, function($ctx1) {$ctx1.fill(self,"contents",{},$globals.IRJSTranslator)});
  39522. //>>excludeEnd("ctx");
  39523. },
  39524. //>>excludeStart("ide", pragmas.excludeIdeData);
  39525. args: [],
  39526. source: "contents\x0a\x09^ self stream contents",
  39527. referencedClasses: [],
  39528. //>>excludeEnd("ide");
  39529. messageSends: ["contents", "stream"]
  39530. }),
  39531. $globals.IRJSTranslator);
  39532. $core.addMethod(
  39533. $core.method({
  39534. selector: "currentClass",
  39535. protocol: 'accessing',
  39536. fn: function (){
  39537. var self=this;
  39538. var $1;
  39539. $1=self["@currentClass"];
  39540. return $1;
  39541. },
  39542. //>>excludeStart("ide", pragmas.excludeIdeData);
  39543. args: [],
  39544. source: "currentClass\x0a\x09^ currentClass",
  39545. referencedClasses: [],
  39546. //>>excludeEnd("ide");
  39547. messageSends: []
  39548. }),
  39549. $globals.IRJSTranslator);
  39550. $core.addMethod(
  39551. $core.method({
  39552. selector: "currentClass:",
  39553. protocol: 'accessing',
  39554. fn: function (aClass){
  39555. var self=this;
  39556. self["@currentClass"]=aClass;
  39557. return self;
  39558. },
  39559. //>>excludeStart("ide", pragmas.excludeIdeData);
  39560. args: ["aClass"],
  39561. source: "currentClass: aClass\x0a\x09currentClass := aClass",
  39562. referencedClasses: [],
  39563. //>>excludeEnd("ide");
  39564. messageSends: []
  39565. }),
  39566. $globals.IRJSTranslator);
  39567. $core.addMethod(
  39568. $core.method({
  39569. selector: "initialize",
  39570. protocol: 'initialization',
  39571. fn: function (){
  39572. var self=this;
  39573. function $JSStream(){return $globals.JSStream||(typeof JSStream=="undefined"?nil:JSStream)}
  39574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39575. return $core.withContext(function($ctx1) {
  39576. //>>excludeEnd("ctx");
  39577. (
  39578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39579. $ctx1.supercall = true,
  39580. //>>excludeEnd("ctx");
  39581. $globals.IRJSTranslator.superclass.fn.prototype._initialize.apply($recv(self), []));
  39582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39583. $ctx1.supercall = false;
  39584. //>>excludeEnd("ctx");;
  39585. self["@stream"]=$recv($JSStream())._new();
  39586. return self;
  39587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39588. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.IRJSTranslator)});
  39589. //>>excludeEnd("ctx");
  39590. },
  39591. //>>excludeStart("ide", pragmas.excludeIdeData);
  39592. args: [],
  39593. source: "initialize\x0a\x09super initialize.\x0a\x09stream := JSStream new.",
  39594. referencedClasses: ["JSStream"],
  39595. //>>excludeEnd("ide");
  39596. messageSends: ["initialize", "new"]
  39597. }),
  39598. $globals.IRJSTranslator);
  39599. $core.addMethod(
  39600. $core.method({
  39601. selector: "stream",
  39602. protocol: 'accessing',
  39603. fn: function (){
  39604. var self=this;
  39605. var $1;
  39606. $1=self["@stream"];
  39607. return $1;
  39608. },
  39609. //>>excludeStart("ide", pragmas.excludeIdeData);
  39610. args: [],
  39611. source: "stream\x0a\x09^ stream",
  39612. referencedClasses: [],
  39613. //>>excludeEnd("ide");
  39614. messageSends: []
  39615. }),
  39616. $globals.IRJSTranslator);
  39617. $core.addMethod(
  39618. $core.method({
  39619. selector: "stream:",
  39620. protocol: 'accessing',
  39621. fn: function (aStream){
  39622. var self=this;
  39623. self["@stream"]=aStream;
  39624. return self;
  39625. },
  39626. //>>excludeStart("ide", pragmas.excludeIdeData);
  39627. args: ["aStream"],
  39628. source: "stream: aStream\x0a\x09stream := aStream",
  39629. referencedClasses: [],
  39630. //>>excludeEnd("ide");
  39631. messageSends: []
  39632. }),
  39633. $globals.IRJSTranslator);
  39634. $core.addMethod(
  39635. $core.method({
  39636. selector: "visitIRAssignment:",
  39637. protocol: 'visiting',
  39638. fn: function (anIRAssignment){
  39639. var self=this;
  39640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39641. return $core.withContext(function($ctx1) {
  39642. //>>excludeEnd("ctx");
  39643. var $2,$1;
  39644. $2=$recv(anIRAssignment)._instructions();
  39645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39646. $ctx1.sendIdx["instructions"]=1;
  39647. //>>excludeEnd("ctx");
  39648. $1=$recv($2)._first();
  39649. self._visit_($1);
  39650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39651. $ctx1.sendIdx["visit:"]=1;
  39652. //>>excludeEnd("ctx");
  39653. $recv(self._stream())._nextPutAssignment();
  39654. self._visit_($recv($recv(anIRAssignment)._instructions())._last());
  39655. return self;
  39656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39657. }, function($ctx1) {$ctx1.fill(self,"visitIRAssignment:",{anIRAssignment:anIRAssignment},$globals.IRJSTranslator)});
  39658. //>>excludeEnd("ctx");
  39659. },
  39660. //>>excludeStart("ide", pragmas.excludeIdeData);
  39661. args: ["anIRAssignment"],
  39662. source: "visitIRAssignment: anIRAssignment\x0a\x09self visit: anIRAssignment instructions first.\x0a\x09self stream nextPutAssignment.\x0a\x09self visit: anIRAssignment instructions last.",
  39663. referencedClasses: [],
  39664. //>>excludeEnd("ide");
  39665. messageSends: ["visit:", "first", "instructions", "nextPutAssignment", "stream", "last"]
  39666. }),
  39667. $globals.IRJSTranslator);
  39668. $core.addMethod(
  39669. $core.method({
  39670. selector: "visitIRClosure:",
  39671. protocol: 'visiting',
  39672. fn: function (anIRClosure){
  39673. var self=this;
  39674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39675. return $core.withContext(function($ctx1) {
  39676. //>>excludeEnd("ctx");
  39677. var $1,$2;
  39678. $1=self._stream();
  39679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39680. $ctx1.sendIdx["stream"]=1;
  39681. //>>excludeEnd("ctx");
  39682. $recv($1)._nextPutClosureWith_arguments_((function(){
  39683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39684. return $core.withContext(function($ctx2) {
  39685. //>>excludeEnd("ctx");
  39686. $2=self._stream();
  39687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39688. $ctx2.sendIdx["stream"]=2;
  39689. //>>excludeEnd("ctx");
  39690. $recv($2)._nextPutVars_($recv($recv(anIRClosure)._tempDeclarations())._collect_((function(each){
  39691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39692. return $core.withContext(function($ctx3) {
  39693. //>>excludeEnd("ctx");
  39694. return $recv($recv(each)._name())._asVariableName();
  39695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39696. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  39697. //>>excludeEnd("ctx");
  39698. })));
  39699. return $recv(self._stream())._nextPutBlockContextFor_during_(anIRClosure,(function(){
  39700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39701. return $core.withContext(function($ctx3) {
  39702. //>>excludeEnd("ctx");
  39703. return (
  39704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39705. $ctx3.supercall = true,
  39706. //>>excludeEnd("ctx");
  39707. $globals.IRJSTranslator.superclass.fn.prototype._visitIRClosure_.apply($recv(self), [anIRClosure]));
  39708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39709. $ctx3.supercall = false;
  39710. //>>excludeEnd("ctx");;
  39711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39712. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  39713. //>>excludeEnd("ctx");
  39714. }));
  39715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39716. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  39717. //>>excludeEnd("ctx");
  39718. }),$recv(anIRClosure)._arguments());
  39719. return self;
  39720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39721. }, function($ctx1) {$ctx1.fill(self,"visitIRClosure:",{anIRClosure:anIRClosure},$globals.IRJSTranslator)});
  39722. //>>excludeEnd("ctx");
  39723. },
  39724. //>>excludeStart("ide", pragmas.excludeIdeData);
  39725. args: ["anIRClosure"],
  39726. 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",
  39727. referencedClasses: [],
  39728. //>>excludeEnd("ide");
  39729. messageSends: ["nextPutClosureWith:arguments:", "stream", "nextPutVars:", "collect:", "tempDeclarations", "asVariableName", "name", "nextPutBlockContextFor:during:", "visitIRClosure:", "arguments"]
  39730. }),
  39731. $globals.IRJSTranslator);
  39732. $core.addMethod(
  39733. $core.method({
  39734. selector: "visitIRDynamicArray:",
  39735. protocol: 'visiting',
  39736. fn: function (anIRDynamicArray){
  39737. var self=this;
  39738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39739. return $core.withContext(function($ctx1) {
  39740. //>>excludeEnd("ctx");
  39741. var $1;
  39742. $1=self._stream();
  39743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39744. $ctx1.sendIdx["stream"]=1;
  39745. //>>excludeEnd("ctx");
  39746. $recv($1)._nextPutAll_("[");
  39747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39748. $ctx1.sendIdx["nextPutAll:"]=1;
  39749. //>>excludeEnd("ctx");
  39750. $recv($recv(anIRDynamicArray)._instructions())._do_separatedBy_((function(each){
  39751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39752. return $core.withContext(function($ctx2) {
  39753. //>>excludeEnd("ctx");
  39754. return self._visit_(each);
  39755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39756. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  39757. //>>excludeEnd("ctx");
  39758. }),(function(){
  39759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39760. return $core.withContext(function($ctx2) {
  39761. //>>excludeEnd("ctx");
  39762. return $recv(self._stream())._nextPutAll_(",");
  39763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39764. $ctx2.sendIdx["nextPutAll:"]=2;
  39765. //>>excludeEnd("ctx");
  39766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39767. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  39768. //>>excludeEnd("ctx");
  39769. }));
  39770. $recv(self["@stream"])._nextPutAll_("]");
  39771. return self;
  39772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39773. }, function($ctx1) {$ctx1.fill(self,"visitIRDynamicArray:",{anIRDynamicArray:anIRDynamicArray},$globals.IRJSTranslator)});
  39774. //>>excludeEnd("ctx");
  39775. },
  39776. //>>excludeStart("ide", pragmas.excludeIdeData);
  39777. args: ["anIRDynamicArray"],
  39778. 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: ']'",
  39779. referencedClasses: [],
  39780. //>>excludeEnd("ide");
  39781. messageSends: ["nextPutAll:", "stream", "do:separatedBy:", "instructions", "visit:"]
  39782. }),
  39783. $globals.IRJSTranslator);
  39784. $core.addMethod(
  39785. $core.method({
  39786. selector: "visitIRDynamicDictionary:",
  39787. protocol: 'visiting',
  39788. fn: function (anIRDynamicDictionary){
  39789. var self=this;
  39790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39791. return $core.withContext(function($ctx1) {
  39792. //>>excludeEnd("ctx");
  39793. var $1,$2;
  39794. $1=self._stream();
  39795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39796. $ctx1.sendIdx["stream"]=1;
  39797. //>>excludeEnd("ctx");
  39798. $recv($1)._nextPutAll_("$globals.HashedCollection._newFromPairs_([");
  39799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39800. $ctx1.sendIdx["nextPutAll:"]=1;
  39801. //>>excludeEnd("ctx");
  39802. $recv($recv(anIRDynamicDictionary)._instructions())._do_separatedBy_((function(each){
  39803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39804. return $core.withContext(function($ctx2) {
  39805. //>>excludeEnd("ctx");
  39806. return self._visit_(each);
  39807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39808. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  39809. //>>excludeEnd("ctx");
  39810. }),(function(){
  39811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39812. return $core.withContext(function($ctx2) {
  39813. //>>excludeEnd("ctx");
  39814. $2=self._stream();
  39815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39816. $ctx2.sendIdx["stream"]=2;
  39817. //>>excludeEnd("ctx");
  39818. return $recv($2)._nextPutAll_(",");
  39819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39820. $ctx2.sendIdx["nextPutAll:"]=2;
  39821. //>>excludeEnd("ctx");
  39822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39823. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  39824. //>>excludeEnd("ctx");
  39825. }));
  39826. $recv(self._stream())._nextPutAll_("])");
  39827. return self;
  39828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39829. }, function($ctx1) {$ctx1.fill(self,"visitIRDynamicDictionary:",{anIRDynamicDictionary:anIRDynamicDictionary},$globals.IRJSTranslator)});
  39830. //>>excludeEnd("ctx");
  39831. },
  39832. //>>excludeStart("ide", pragmas.excludeIdeData);
  39833. args: ["anIRDynamicDictionary"],
  39834. 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: '])'",
  39835. referencedClasses: [],
  39836. //>>excludeEnd("ide");
  39837. messageSends: ["nextPutAll:", "stream", "do:separatedBy:", "instructions", "visit:"]
  39838. }),
  39839. $globals.IRJSTranslator);
  39840. $core.addMethod(
  39841. $core.method({
  39842. selector: "visitIRMethod:",
  39843. protocol: 'visiting',
  39844. fn: function (anIRMethod){
  39845. var self=this;
  39846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39847. return $core.withContext(function($ctx1) {
  39848. //>>excludeEnd("ctx");
  39849. var $1,$2,$3,$4,$5,$6,$8,$7,$9,$10;
  39850. $1=self._stream();
  39851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39852. $ctx1.sendIdx["stream"]=1;
  39853. //>>excludeEnd("ctx");
  39854. $recv($1)._nextPutMethodDeclaration_with_(anIRMethod,(function(){
  39855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39856. return $core.withContext(function($ctx2) {
  39857. //>>excludeEnd("ctx");
  39858. $2=self._stream();
  39859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39860. $ctx2.sendIdx["stream"]=2;
  39861. //>>excludeEnd("ctx");
  39862. return $recv($2)._nextPutFunctionWith_arguments_((function(){
  39863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39864. return $core.withContext(function($ctx3) {
  39865. //>>excludeEnd("ctx");
  39866. $3=self._stream();
  39867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39868. $ctx3.sendIdx["stream"]=3;
  39869. //>>excludeEnd("ctx");
  39870. $4=$recv($recv(anIRMethod)._tempDeclarations())._collect_((function(each){
  39871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39872. return $core.withContext(function($ctx4) {
  39873. //>>excludeEnd("ctx");
  39874. return $recv($recv(each)._name())._asVariableName();
  39875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39876. }, function($ctx4) {$ctx4.fillBlock({each:each},$ctx3,3)});
  39877. //>>excludeEnd("ctx");
  39878. }));
  39879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39880. $ctx3.sendIdx["collect:"]=1;
  39881. //>>excludeEnd("ctx");
  39882. $recv($3)._nextPutVars_($4);
  39883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39884. $ctx3.sendIdx["nextPutVars:"]=1;
  39885. //>>excludeEnd("ctx");
  39886. $recv($recv(anIRMethod)._classReferences())._do_((function(each){
  39887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39888. return $core.withContext(function($ctx4) {
  39889. //>>excludeEnd("ctx");
  39890. $5=self._stream();
  39891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39892. $ctx4.sendIdx["stream"]=4;
  39893. //>>excludeEnd("ctx");
  39894. return $recv($5)._nextPutClassRefFunction_(each);
  39895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39896. }, function($ctx4) {$ctx4.fillBlock({each:each},$ctx3,4)});
  39897. //>>excludeEnd("ctx");
  39898. }));
  39899. $6=self._stream();
  39900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39901. $ctx3.sendIdx["stream"]=5;
  39902. //>>excludeEnd("ctx");
  39903. return $recv($6)._nextPutContextFor_during_(anIRMethod,(function(){
  39904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39905. return $core.withContext(function($ctx4) {
  39906. //>>excludeEnd("ctx");
  39907. $8=$recv(anIRMethod)._internalVariables();
  39908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39909. $ctx4.sendIdx["internalVariables"]=1;
  39910. //>>excludeEnd("ctx");
  39911. $7=$recv($8)._notEmpty();
  39912. if($core.assert($7)){
  39913. $9=self._stream();
  39914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39915. $ctx4.sendIdx["stream"]=6;
  39916. //>>excludeEnd("ctx");
  39917. $recv($9)._nextPutVars_($recv($recv($recv(anIRMethod)._internalVariables())._asSet())._collect_((function(each){
  39918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39919. return $core.withContext(function($ctx5) {
  39920. //>>excludeEnd("ctx");
  39921. return $recv($recv(each)._variable())._alias();
  39922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39923. }, function($ctx5) {$ctx5.fillBlock({each:each},$ctx4,7)});
  39924. //>>excludeEnd("ctx");
  39925. })));
  39926. };
  39927. $10=$recv($recv(anIRMethod)._scope())._hasNonLocalReturn();
  39928. if($core.assert($10)){
  39929. return $recv(self._stream())._nextPutNonLocalReturnHandlingWith_((function(){
  39930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39931. return $core.withContext(function($ctx5) {
  39932. //>>excludeEnd("ctx");
  39933. return (
  39934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39935. $ctx5.supercall = true,
  39936. //>>excludeEnd("ctx");
  39937. $globals.IRJSTranslator.superclass.fn.prototype._visitIRMethod_.apply($recv(self), [anIRMethod]));
  39938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39939. $ctx5.supercall = false;
  39940. //>>excludeEnd("ctx");;
  39941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39942. $ctx5.sendIdx["visitIRMethod:"]=1;
  39943. //>>excludeEnd("ctx");
  39944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39945. }, function($ctx5) {$ctx5.fillBlock({},$ctx4,9)});
  39946. //>>excludeEnd("ctx");
  39947. }));
  39948. } else {
  39949. return (
  39950. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39951. $ctx4.supercall = true,
  39952. //>>excludeEnd("ctx");
  39953. $globals.IRJSTranslator.superclass.fn.prototype._visitIRMethod_.apply($recv(self), [anIRMethod]));
  39954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39955. $ctx4.supercall = false;
  39956. //>>excludeEnd("ctx");;
  39957. };
  39958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39959. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,5)});
  39960. //>>excludeEnd("ctx");
  39961. }));
  39962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39963. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  39964. //>>excludeEnd("ctx");
  39965. }),$recv(anIRMethod)._arguments());
  39966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39967. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  39968. //>>excludeEnd("ctx");
  39969. }));
  39970. return self;
  39971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39972. }, function($ctx1) {$ctx1.fill(self,"visitIRMethod:",{anIRMethod:anIRMethod},$globals.IRJSTranslator)});
  39973. //>>excludeEnd("ctx");
  39974. },
  39975. //>>excludeStart("ide", pragmas.excludeIdeData);
  39976. args: ["anIRMethod"],
  39977. 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 ]",
  39978. referencedClasses: [],
  39979. //>>excludeEnd("ide");
  39980. 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"]
  39981. }),
  39982. $globals.IRJSTranslator);
  39983. $core.addMethod(
  39984. $core.method({
  39985. selector: "visitIRNonLocalReturn:",
  39986. protocol: 'visiting',
  39987. fn: function (anIRNonLocalReturn){
  39988. var self=this;
  39989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39990. return $core.withContext(function($ctx1) {
  39991. //>>excludeEnd("ctx");
  39992. $recv(self._stream())._nextPutNonLocalReturnWith_((function(){
  39993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39994. return $core.withContext(function($ctx2) {
  39995. //>>excludeEnd("ctx");
  39996. return (
  39997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39998. $ctx2.supercall = true,
  39999. //>>excludeEnd("ctx");
  40000. $globals.IRJSTranslator.superclass.fn.prototype._visitIRNonLocalReturn_.apply($recv(self), [anIRNonLocalReturn]));
  40001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40002. $ctx2.supercall = false;
  40003. //>>excludeEnd("ctx");;
  40004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40005. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  40006. //>>excludeEnd("ctx");
  40007. }));
  40008. return self;
  40009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40010. }, function($ctx1) {$ctx1.fill(self,"visitIRNonLocalReturn:",{anIRNonLocalReturn:anIRNonLocalReturn},$globals.IRJSTranslator)});
  40011. //>>excludeEnd("ctx");
  40012. },
  40013. //>>excludeStart("ide", pragmas.excludeIdeData);
  40014. args: ["anIRNonLocalReturn"],
  40015. source: "visitIRNonLocalReturn: anIRNonLocalReturn\x0a\x09self stream nextPutNonLocalReturnWith: [\x0a\x09\x09super visitIRNonLocalReturn: anIRNonLocalReturn ]",
  40016. referencedClasses: [],
  40017. //>>excludeEnd("ide");
  40018. messageSends: ["nextPutNonLocalReturnWith:", "stream", "visitIRNonLocalReturn:"]
  40019. }),
  40020. $globals.IRJSTranslator);
  40021. $core.addMethod(
  40022. $core.method({
  40023. selector: "visitIRReturn:",
  40024. protocol: 'visiting',
  40025. fn: function (anIRReturn){
  40026. var self=this;
  40027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40028. return $core.withContext(function($ctx1) {
  40029. //>>excludeEnd("ctx");
  40030. $recv(self._stream())._nextPutReturnWith_((function(){
  40031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40032. return $core.withContext(function($ctx2) {
  40033. //>>excludeEnd("ctx");
  40034. return (
  40035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40036. $ctx2.supercall = true,
  40037. //>>excludeEnd("ctx");
  40038. $globals.IRJSTranslator.superclass.fn.prototype._visitIRReturn_.apply($recv(self), [anIRReturn]));
  40039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40040. $ctx2.supercall = false;
  40041. //>>excludeEnd("ctx");;
  40042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40043. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  40044. //>>excludeEnd("ctx");
  40045. }));
  40046. return self;
  40047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40048. }, function($ctx1) {$ctx1.fill(self,"visitIRReturn:",{anIRReturn:anIRReturn},$globals.IRJSTranslator)});
  40049. //>>excludeEnd("ctx");
  40050. },
  40051. //>>excludeStart("ide", pragmas.excludeIdeData);
  40052. args: ["anIRReturn"],
  40053. source: "visitIRReturn: anIRReturn\x0a\x09self stream nextPutReturnWith: [\x0a\x09\x09super visitIRReturn: anIRReturn ]",
  40054. referencedClasses: [],
  40055. //>>excludeEnd("ide");
  40056. messageSends: ["nextPutReturnWith:", "stream", "visitIRReturn:"]
  40057. }),
  40058. $globals.IRJSTranslator);
  40059. $core.addMethod(
  40060. $core.method({
  40061. selector: "visitIRSend:",
  40062. protocol: 'visiting',
  40063. fn: function (anIRSend){
  40064. var self=this;
  40065. var sends;
  40066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40067. return $core.withContext(function($ctx1) {
  40068. //>>excludeEnd("ctx");
  40069. var $1,$2,$receiver;
  40070. sends=$recv($recv($recv($recv(anIRSend)._method())._sendIndexes())._at_($recv(anIRSend)._selector()))._size();
  40071. $1=$recv(anIRSend)._classSend();
  40072. if(($receiver = $1) == null || $receiver.isNil){
  40073. self._visitSend_(anIRSend);
  40074. } else {
  40075. self._visitSuperSend_(anIRSend);
  40076. };
  40077. $2=$recv($recv(sends).__gt((1)))._and_((function(){
  40078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40079. return $core.withContext(function($ctx2) {
  40080. //>>excludeEnd("ctx");
  40081. return $recv($recv(anIRSend)._index()).__lt(sends);
  40082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40083. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  40084. //>>excludeEnd("ctx");
  40085. }));
  40086. if($core.assert($2)){
  40087. $recv(self._stream())._nextPutSendIndexFor_(anIRSend);
  40088. };
  40089. return self;
  40090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40091. }, function($ctx1) {$ctx1.fill(self,"visitIRSend:",{anIRSend:anIRSend,sends:sends},$globals.IRJSTranslator)});
  40092. //>>excludeEnd("ctx");
  40093. },
  40094. //>>excludeStart("ide", pragmas.excludeIdeData);
  40095. args: ["anIRSend"],
  40096. 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 ]",
  40097. referencedClasses: [],
  40098. //>>excludeEnd("ide");
  40099. messageSends: ["size", "at:", "sendIndexes", "method", "selector", "ifNil:ifNotNil:", "classSend", "visitSend:", "visitSuperSend:", "ifTrue:", "and:", ">", "<", "index", "nextPutSendIndexFor:", "stream"]
  40100. }),
  40101. $globals.IRJSTranslator);
  40102. $core.addMethod(
  40103. $core.method({
  40104. selector: "visitIRSequence:",
  40105. protocol: 'visiting',
  40106. fn: function (anIRSequence){
  40107. var self=this;
  40108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40109. return $core.withContext(function($ctx1) {
  40110. //>>excludeEnd("ctx");
  40111. var $1;
  40112. $1=self._stream();
  40113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40114. $ctx1.sendIdx["stream"]=1;
  40115. //>>excludeEnd("ctx");
  40116. $recv($1)._nextPutSequenceWith_((function(){
  40117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40118. return $core.withContext(function($ctx2) {
  40119. //>>excludeEnd("ctx");
  40120. return $recv($recv(anIRSequence)._instructions())._do_((function(each){
  40121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40122. return $core.withContext(function($ctx3) {
  40123. //>>excludeEnd("ctx");
  40124. return $recv(self._stream())._nextPutStatementWith_(self._visit_(each));
  40125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40126. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  40127. //>>excludeEnd("ctx");
  40128. }));
  40129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40130. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  40131. //>>excludeEnd("ctx");
  40132. }));
  40133. return self;
  40134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40135. }, function($ctx1) {$ctx1.fill(self,"visitIRSequence:",{anIRSequence:anIRSequence},$globals.IRJSTranslator)});
  40136. //>>excludeEnd("ctx");
  40137. },
  40138. //>>excludeStart("ide", pragmas.excludeIdeData);
  40139. args: ["anIRSequence"],
  40140. source: "visitIRSequence: anIRSequence\x0a\x09self stream nextPutSequenceWith: [\x0a\x09\x09anIRSequence instructions do: [ :each |\x0a\x09\x09\x09self stream nextPutStatementWith: (self visit: each) ] ]",
  40141. referencedClasses: [],
  40142. //>>excludeEnd("ide");
  40143. messageSends: ["nextPutSequenceWith:", "stream", "do:", "instructions", "nextPutStatementWith:", "visit:"]
  40144. }),
  40145. $globals.IRJSTranslator);
  40146. $core.addMethod(
  40147. $core.method({
  40148. selector: "visitIRTempDeclaration:",
  40149. protocol: 'visiting',
  40150. fn: function (anIRTempDeclaration){
  40151. var self=this;
  40152. return self;
  40153. },
  40154. //>>excludeStart("ide", pragmas.excludeIdeData);
  40155. args: ["anIRTempDeclaration"],
  40156. source: "visitIRTempDeclaration: anIRTempDeclaration\x0a\x09\x22self stream\x0a\x09\x09nextPutAll: 'var ', anIRTempDeclaration name asVariableName, ';';\x0a\x09\x09lf\x22",
  40157. referencedClasses: [],
  40158. //>>excludeEnd("ide");
  40159. messageSends: []
  40160. }),
  40161. $globals.IRJSTranslator);
  40162. $core.addMethod(
  40163. $core.method({
  40164. selector: "visitIRValue:",
  40165. protocol: 'visiting',
  40166. fn: function (anIRValue){
  40167. var self=this;
  40168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40169. return $core.withContext(function($ctx1) {
  40170. //>>excludeEnd("ctx");
  40171. $recv(self._stream())._nextPutAll_($recv($recv(anIRValue)._value())._asJavascript());
  40172. return self;
  40173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40174. }, function($ctx1) {$ctx1.fill(self,"visitIRValue:",{anIRValue:anIRValue},$globals.IRJSTranslator)});
  40175. //>>excludeEnd("ctx");
  40176. },
  40177. //>>excludeStart("ide", pragmas.excludeIdeData);
  40178. args: ["anIRValue"],
  40179. source: "visitIRValue: anIRValue\x0a\x09self stream nextPutAll: anIRValue value asJavascript",
  40180. referencedClasses: [],
  40181. //>>excludeEnd("ide");
  40182. messageSends: ["nextPutAll:", "stream", "asJavascript", "value"]
  40183. }),
  40184. $globals.IRJSTranslator);
  40185. $core.addMethod(
  40186. $core.method({
  40187. selector: "visitIRVariable:",
  40188. protocol: 'visiting',
  40189. fn: function (anIRVariable){
  40190. var self=this;
  40191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40192. return $core.withContext(function($ctx1) {
  40193. //>>excludeEnd("ctx");
  40194. var $3,$2,$1,$4;
  40195. $3=$recv(anIRVariable)._variable();
  40196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40197. $ctx1.sendIdx["variable"]=1;
  40198. //>>excludeEnd("ctx");
  40199. $2=$recv($3)._name();
  40200. $1=$recv($2).__eq("thisContext");
  40201. if($core.assert($1)){
  40202. $4=self._stream();
  40203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40204. $ctx1.sendIdx["stream"]=1;
  40205. //>>excludeEnd("ctx");
  40206. $recv($4)._nextPutAll_("$core.getThisContext()");
  40207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40208. $ctx1.sendIdx["nextPutAll:"]=1;
  40209. //>>excludeEnd("ctx");
  40210. } else {
  40211. $recv(self._stream())._nextPutAll_($recv($recv(anIRVariable)._variable())._alias());
  40212. };
  40213. return self;
  40214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40215. }, function($ctx1) {$ctx1.fill(self,"visitIRVariable:",{anIRVariable:anIRVariable},$globals.IRJSTranslator)});
  40216. //>>excludeEnd("ctx");
  40217. },
  40218. //>>excludeStart("ide", pragmas.excludeIdeData);
  40219. args: ["anIRVariable"],
  40220. 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 ]",
  40221. referencedClasses: [],
  40222. //>>excludeEnd("ide");
  40223. messageSends: ["ifTrue:ifFalse:", "=", "name", "variable", "nextPutAll:", "stream", "alias"]
  40224. }),
  40225. $globals.IRJSTranslator);
  40226. $core.addMethod(
  40227. $core.method({
  40228. selector: "visitIRVerbatim:",
  40229. protocol: 'visiting',
  40230. fn: function (anIRVerbatim){
  40231. var self=this;
  40232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40233. return $core.withContext(function($ctx1) {
  40234. //>>excludeEnd("ctx");
  40235. var $1;
  40236. $1=self._stream();
  40237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40238. $ctx1.sendIdx["stream"]=1;
  40239. //>>excludeEnd("ctx");
  40240. $recv($1)._nextPutStatementWith_((function(){
  40241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40242. return $core.withContext(function($ctx2) {
  40243. //>>excludeEnd("ctx");
  40244. return $recv(self._stream())._nextPutAll_($recv(anIRVerbatim)._source());
  40245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40246. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  40247. //>>excludeEnd("ctx");
  40248. }));
  40249. return self;
  40250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40251. }, function($ctx1) {$ctx1.fill(self,"visitIRVerbatim:",{anIRVerbatim:anIRVerbatim},$globals.IRJSTranslator)});
  40252. //>>excludeEnd("ctx");
  40253. },
  40254. //>>excludeStart("ide", pragmas.excludeIdeData);
  40255. args: ["anIRVerbatim"],
  40256. source: "visitIRVerbatim: anIRVerbatim\x0a\x09self stream nextPutStatementWith: [\x0a\x09\x09self stream nextPutAll: anIRVerbatim source ]",
  40257. referencedClasses: [],
  40258. //>>excludeEnd("ide");
  40259. messageSends: ["nextPutStatementWith:", "stream", "nextPutAll:", "source"]
  40260. }),
  40261. $globals.IRJSTranslator);
  40262. $core.addMethod(
  40263. $core.method({
  40264. selector: "visitReceiver:",
  40265. protocol: 'visiting',
  40266. fn: function (anIRInstruction){
  40267. var self=this;
  40268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40269. return $core.withContext(function($ctx1) {
  40270. //>>excludeEnd("ctx");
  40271. var $1,$2,$3;
  40272. $1=$recv(anIRInstruction)._needsBoxingAsReceiver();
  40273. if(!$core.assert($1)){
  40274. $2=self._visit_(anIRInstruction);
  40275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40276. $ctx1.sendIdx["visit:"]=1;
  40277. //>>excludeEnd("ctx");
  40278. return $2;
  40279. };
  40280. $3=self._stream();
  40281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40282. $ctx1.sendIdx["stream"]=1;
  40283. //>>excludeEnd("ctx");
  40284. $recv($3)._nextPutAll_("$recv(");
  40285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40286. $ctx1.sendIdx["nextPutAll:"]=1;
  40287. //>>excludeEnd("ctx");
  40288. self._visit_(anIRInstruction);
  40289. $recv(self._stream())._nextPutAll_(")");
  40290. return self;
  40291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40292. }, function($ctx1) {$ctx1.fill(self,"visitReceiver:",{anIRInstruction:anIRInstruction},$globals.IRJSTranslator)});
  40293. //>>excludeEnd("ctx");
  40294. },
  40295. //>>excludeStart("ide", pragmas.excludeIdeData);
  40296. args: ["anIRInstruction"],
  40297. 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: ')'",
  40298. referencedClasses: [],
  40299. //>>excludeEnd("ide");
  40300. messageSends: ["ifFalse:", "needsBoxingAsReceiver", "visit:", "nextPutAll:", "stream"]
  40301. }),
  40302. $globals.IRJSTranslator);
  40303. $core.addMethod(
  40304. $core.method({
  40305. selector: "visitSend:",
  40306. protocol: 'visiting',
  40307. fn: function (anIRSend){
  40308. var self=this;
  40309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40310. return $core.withContext(function($ctx1) {
  40311. //>>excludeEnd("ctx");
  40312. var $2,$1,$3,$4,$5;
  40313. $2=$recv(anIRSend)._instructions();
  40314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40315. $ctx1.sendIdx["instructions"]=1;
  40316. //>>excludeEnd("ctx");
  40317. $1=$recv($2)._first();
  40318. self._visitReceiver_($1);
  40319. $3=self._stream();
  40320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40321. $ctx1.sendIdx["stream"]=1;
  40322. //>>excludeEnd("ctx");
  40323. $4=$recv(".".__comma($recv($recv(anIRSend)._selector())._asJavaScriptMethodName())).__comma("(");
  40324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40325. $ctx1.sendIdx[","]=1;
  40326. //>>excludeEnd("ctx");
  40327. $recv($3)._nextPutAll_($4);
  40328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40329. $ctx1.sendIdx["nextPutAll:"]=1;
  40330. //>>excludeEnd("ctx");
  40331. $recv($recv($recv(anIRSend)._instructions())._allButFirst())._do_separatedBy_((function(each){
  40332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40333. return $core.withContext(function($ctx2) {
  40334. //>>excludeEnd("ctx");
  40335. return self._visit_(each);
  40336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40337. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  40338. //>>excludeEnd("ctx");
  40339. }),(function(){
  40340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40341. return $core.withContext(function($ctx2) {
  40342. //>>excludeEnd("ctx");
  40343. $5=self._stream();
  40344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40345. $ctx2.sendIdx["stream"]=2;
  40346. //>>excludeEnd("ctx");
  40347. return $recv($5)._nextPutAll_(",");
  40348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40349. $ctx2.sendIdx["nextPutAll:"]=2;
  40350. //>>excludeEnd("ctx");
  40351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40352. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  40353. //>>excludeEnd("ctx");
  40354. }));
  40355. $recv(self._stream())._nextPutAll_(")");
  40356. return self;
  40357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40358. }, function($ctx1) {$ctx1.fill(self,"visitSend:",{anIRSend:anIRSend},$globals.IRJSTranslator)});
  40359. //>>excludeEnd("ctx");
  40360. },
  40361. //>>excludeStart("ide", pragmas.excludeIdeData);
  40362. args: ["anIRSend"],
  40363. 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: ')'",
  40364. referencedClasses: [],
  40365. //>>excludeEnd("ide");
  40366. messageSends: ["visitReceiver:", "first", "instructions", "nextPutAll:", "stream", ",", "asJavaScriptMethodName", "selector", "do:separatedBy:", "allButFirst", "visit:"]
  40367. }),
  40368. $globals.IRJSTranslator);
  40369. $core.addMethod(
  40370. $core.method({
  40371. selector: "visitSuperSend:",
  40372. protocol: 'visiting',
  40373. fn: function (anIRSend){
  40374. var self=this;
  40375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40376. return $core.withContext(function($ctx1) {
  40377. //>>excludeEnd("ctx");
  40378. var $1,$2,$5,$4,$3,$6,$7,$8,$10,$9,$11,$12,$13,$14;
  40379. $1=self._stream();
  40380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40381. $ctx1.sendIdx["stream"]=1;
  40382. //>>excludeEnd("ctx");
  40383. $recv($1)._nextPutAll_("(");
  40384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40385. $ctx1.sendIdx["nextPutAll:"]=1;
  40386. //>>excludeEnd("ctx");
  40387. $recv($1)._lf();
  40388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40389. $ctx1.sendIdx["lf"]=1;
  40390. //>>excludeEnd("ctx");
  40391. $recv($1)._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  40392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40393. $ctx1.sendIdx["nextPutAll:"]=2;
  40394. //>>excludeEnd("ctx");
  40395. $recv($1)._lf();
  40396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40397. $ctx1.sendIdx["lf"]=2;
  40398. //>>excludeEnd("ctx");
  40399. $2=$1;
  40400. $5=$recv(anIRSend)._scope();
  40401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40402. $ctx1.sendIdx["scope"]=1;
  40403. //>>excludeEnd("ctx");
  40404. $4=$recv($5)._alias();
  40405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40406. $ctx1.sendIdx["alias"]=1;
  40407. //>>excludeEnd("ctx");
  40408. $3=$recv($4).__comma(".supercall = true, ");
  40409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40410. $ctx1.sendIdx[","]=1;
  40411. //>>excludeEnd("ctx");
  40412. $recv($2)._nextPutAll_($3);
  40413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40414. $ctx1.sendIdx["nextPutAll:"]=3;
  40415. //>>excludeEnd("ctx");
  40416. $recv($1)._lf();
  40417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40418. $ctx1.sendIdx["lf"]=3;
  40419. //>>excludeEnd("ctx");
  40420. $recv($1)._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  40421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40422. $ctx1.sendIdx["nextPutAll:"]=4;
  40423. //>>excludeEnd("ctx");
  40424. $recv($1)._lf();
  40425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40426. $ctx1.sendIdx["lf"]=4;
  40427. //>>excludeEnd("ctx");
  40428. $recv($1)._nextPutAll_($recv(self._currentClass())._asJavascript());
  40429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40430. $ctx1.sendIdx["nextPutAll:"]=5;
  40431. //>>excludeEnd("ctx");
  40432. $recv($1)._nextPutAll_(".superclass.fn.prototype.");
  40433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40434. $ctx1.sendIdx["nextPutAll:"]=6;
  40435. //>>excludeEnd("ctx");
  40436. $6=$1;
  40437. $7=$recv($recv($recv(anIRSend)._selector())._asJavaScriptMethodName()).__comma(".apply(");
  40438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40439. $ctx1.sendIdx[","]=2;
  40440. //>>excludeEnd("ctx");
  40441. $recv($6)._nextPutAll_($7);
  40442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40443. $ctx1.sendIdx["nextPutAll:"]=7;
  40444. //>>excludeEnd("ctx");
  40445. $8=$recv($1)._nextPutAll_("$recv(");
  40446. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40447. $ctx1.sendIdx["nextPutAll:"]=8;
  40448. //>>excludeEnd("ctx");
  40449. $10=$recv(anIRSend)._instructions();
  40450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40451. $ctx1.sendIdx["instructions"]=1;
  40452. //>>excludeEnd("ctx");
  40453. $9=$recv($10)._first();
  40454. self._visit_($9);
  40455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40456. $ctx1.sendIdx["visit:"]=1;
  40457. //>>excludeEnd("ctx");
  40458. $11=self._stream();
  40459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40460. $ctx1.sendIdx["stream"]=2;
  40461. //>>excludeEnd("ctx");
  40462. $recv($11)._nextPutAll_("), [");
  40463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40464. $ctx1.sendIdx["nextPutAll:"]=9;
  40465. //>>excludeEnd("ctx");
  40466. $recv($recv($recv(anIRSend)._instructions())._allButFirst())._do_separatedBy_((function(each){
  40467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40468. return $core.withContext(function($ctx2) {
  40469. //>>excludeEnd("ctx");
  40470. return self._visit_(each);
  40471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40472. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  40473. //>>excludeEnd("ctx");
  40474. }),(function(){
  40475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40476. return $core.withContext(function($ctx2) {
  40477. //>>excludeEnd("ctx");
  40478. $12=self._stream();
  40479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40480. $ctx2.sendIdx["stream"]=3;
  40481. //>>excludeEnd("ctx");
  40482. return $recv($12)._nextPutAll_(",");
  40483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40484. $ctx2.sendIdx["nextPutAll:"]=10;
  40485. //>>excludeEnd("ctx");
  40486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40487. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  40488. //>>excludeEnd("ctx");
  40489. }));
  40490. $13=self._stream();
  40491. $recv($13)._nextPutAll_("]));");
  40492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40493. $ctx1.sendIdx["nextPutAll:"]=11;
  40494. //>>excludeEnd("ctx");
  40495. $recv($13)._lf();
  40496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40497. $ctx1.sendIdx["lf"]=5;
  40498. //>>excludeEnd("ctx");
  40499. $recv($13)._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  40500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40501. $ctx1.sendIdx["nextPutAll:"]=12;
  40502. //>>excludeEnd("ctx");
  40503. $recv($13)._lf();
  40504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40505. $ctx1.sendIdx["lf"]=6;
  40506. //>>excludeEnd("ctx");
  40507. $recv($13)._nextPutAll_($recv($recv($recv(anIRSend)._scope())._alias()).__comma(".supercall = false;"));
  40508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40509. $ctx1.sendIdx["nextPutAll:"]=13;
  40510. //>>excludeEnd("ctx");
  40511. $recv($13)._lf();
  40512. $14=$recv($13)._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  40513. return self;
  40514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40515. }, function($ctx1) {$ctx1.fill(self,"visitSuperSend:",{anIRSend:anIRSend},$globals.IRJSTranslator)});
  40516. //>>excludeEnd("ctx");
  40517. },
  40518. //>>excludeStart("ide", pragmas.excludeIdeData);
  40519. args: ["anIRSend"],
  40520. 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);'",
  40521. referencedClasses: [],
  40522. //>>excludeEnd("ide");
  40523. messageSends: ["nextPutAll:", "stream", "lf", ",", "alias", "scope", "asJavascript", "currentClass", "asJavaScriptMethodName", "selector", "visit:", "first", "instructions", "do:separatedBy:", "allButFirst"]
  40524. }),
  40525. $globals.IRJSTranslator);
  40526. $core.addClass('JSStream', $globals.Object, ['stream'], 'Compiler-IR');
  40527. $core.addMethod(
  40528. $core.method({
  40529. selector: "contents",
  40530. protocol: 'accessing',
  40531. fn: function (){
  40532. var self=this;
  40533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40534. return $core.withContext(function($ctx1) {
  40535. //>>excludeEnd("ctx");
  40536. var $1;
  40537. $1=$recv(self["@stream"])._contents();
  40538. return $1;
  40539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40540. }, function($ctx1) {$ctx1.fill(self,"contents",{},$globals.JSStream)});
  40541. //>>excludeEnd("ctx");
  40542. },
  40543. //>>excludeStart("ide", pragmas.excludeIdeData);
  40544. args: [],
  40545. source: "contents\x0a\x09^ stream contents",
  40546. referencedClasses: [],
  40547. //>>excludeEnd("ide");
  40548. messageSends: ["contents"]
  40549. }),
  40550. $globals.JSStream);
  40551. $core.addMethod(
  40552. $core.method({
  40553. selector: "initialize",
  40554. protocol: 'initialization',
  40555. fn: function (){
  40556. var self=this;
  40557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40558. return $core.withContext(function($ctx1) {
  40559. //>>excludeEnd("ctx");
  40560. (
  40561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40562. $ctx1.supercall = true,
  40563. //>>excludeEnd("ctx");
  40564. $globals.JSStream.superclass.fn.prototype._initialize.apply($recv(self), []));
  40565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40566. $ctx1.supercall = false;
  40567. //>>excludeEnd("ctx");;
  40568. self["@stream"]=""._writeStream();
  40569. return self;
  40570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40571. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.JSStream)});
  40572. //>>excludeEnd("ctx");
  40573. },
  40574. //>>excludeStart("ide", pragmas.excludeIdeData);
  40575. args: [],
  40576. source: "initialize\x0a\x09super initialize.\x0a\x09stream := '' writeStream.",
  40577. referencedClasses: [],
  40578. //>>excludeEnd("ide");
  40579. messageSends: ["initialize", "writeStream"]
  40580. }),
  40581. $globals.JSStream);
  40582. $core.addMethod(
  40583. $core.method({
  40584. selector: "lf",
  40585. protocol: 'streaming',
  40586. fn: function (){
  40587. var self=this;
  40588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40589. return $core.withContext(function($ctx1) {
  40590. //>>excludeEnd("ctx");
  40591. $recv(self["@stream"])._lf();
  40592. return self;
  40593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40594. }, function($ctx1) {$ctx1.fill(self,"lf",{},$globals.JSStream)});
  40595. //>>excludeEnd("ctx");
  40596. },
  40597. //>>excludeStart("ide", pragmas.excludeIdeData);
  40598. args: [],
  40599. source: "lf\x0a\x09stream lf",
  40600. referencedClasses: [],
  40601. //>>excludeEnd("ide");
  40602. messageSends: ["lf"]
  40603. }),
  40604. $globals.JSStream);
  40605. $core.addMethod(
  40606. $core.method({
  40607. selector: "nextPut:",
  40608. protocol: 'streaming',
  40609. fn: function (aString){
  40610. var self=this;
  40611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40612. return $core.withContext(function($ctx1) {
  40613. //>>excludeEnd("ctx");
  40614. $recv(self["@stream"])._nextPut_(aString);
  40615. return self;
  40616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40617. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{aString:aString},$globals.JSStream)});
  40618. //>>excludeEnd("ctx");
  40619. },
  40620. //>>excludeStart("ide", pragmas.excludeIdeData);
  40621. args: ["aString"],
  40622. source: "nextPut: aString\x0a\x09stream nextPut: aString",
  40623. referencedClasses: [],
  40624. //>>excludeEnd("ide");
  40625. messageSends: ["nextPut:"]
  40626. }),
  40627. $globals.JSStream);
  40628. $core.addMethod(
  40629. $core.method({
  40630. selector: "nextPutAll:",
  40631. protocol: 'streaming',
  40632. fn: function (aString){
  40633. var self=this;
  40634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40635. return $core.withContext(function($ctx1) {
  40636. //>>excludeEnd("ctx");
  40637. $recv(self["@stream"])._nextPutAll_(aString);
  40638. return self;
  40639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40640. }, function($ctx1) {$ctx1.fill(self,"nextPutAll:",{aString:aString},$globals.JSStream)});
  40641. //>>excludeEnd("ctx");
  40642. },
  40643. //>>excludeStart("ide", pragmas.excludeIdeData);
  40644. args: ["aString"],
  40645. source: "nextPutAll: aString\x0a\x09stream nextPutAll: aString",
  40646. referencedClasses: [],
  40647. //>>excludeEnd("ide");
  40648. messageSends: ["nextPutAll:"]
  40649. }),
  40650. $globals.JSStream);
  40651. $core.addMethod(
  40652. $core.method({
  40653. selector: "nextPutAssignment",
  40654. protocol: 'streaming',
  40655. fn: function (){
  40656. var self=this;
  40657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40658. return $core.withContext(function($ctx1) {
  40659. //>>excludeEnd("ctx");
  40660. $recv(self["@stream"])._nextPutAll_("=");
  40661. return self;
  40662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40663. }, function($ctx1) {$ctx1.fill(self,"nextPutAssignment",{},$globals.JSStream)});
  40664. //>>excludeEnd("ctx");
  40665. },
  40666. //>>excludeStart("ide", pragmas.excludeIdeData);
  40667. args: [],
  40668. source: "nextPutAssignment\x0a\x09stream nextPutAll: '='",
  40669. referencedClasses: [],
  40670. //>>excludeEnd("ide");
  40671. messageSends: ["nextPutAll:"]
  40672. }),
  40673. $globals.JSStream);
  40674. $core.addMethod(
  40675. $core.method({
  40676. selector: "nextPutBlockContextFor:during:",
  40677. protocol: 'streaming',
  40678. fn: function (anIRClosure,aBlock){
  40679. var self=this;
  40680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40681. return $core.withContext(function($ctx1) {
  40682. //>>excludeEnd("ctx");
  40683. 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;
  40684. $1=$recv(anIRClosure)._requiresSmalltalkContext();
  40685. if(!$core.assert($1)){
  40686. $2=$recv(aBlock)._value();
  40687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40688. $ctx1.sendIdx["value"]=1;
  40689. //>>excludeEnd("ctx");
  40690. return $2;
  40691. };
  40692. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  40693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40694. $ctx1.sendIdx["nextPutAll:"]=1;
  40695. //>>excludeEnd("ctx");
  40696. self._lf();
  40697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40698. $ctx1.sendIdx["lf"]=1;
  40699. //>>excludeEnd("ctx");
  40700. $6=$recv(anIRClosure)._scope();
  40701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40702. $ctx1.sendIdx["scope"]=1;
  40703. //>>excludeEnd("ctx");
  40704. $5=$recv($6)._alias();
  40705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40706. $ctx1.sendIdx["alias"]=1;
  40707. //>>excludeEnd("ctx");
  40708. $4="return $core.withContext(function(".__comma($5);
  40709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40710. $ctx1.sendIdx[","]=2;
  40711. //>>excludeEnd("ctx");
  40712. $3=$recv($4).__comma(") {");
  40713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40714. $ctx1.sendIdx[","]=1;
  40715. //>>excludeEnd("ctx");
  40716. self._nextPutAll_($3);
  40717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40718. $ctx1.sendIdx["nextPutAll:"]=2;
  40719. //>>excludeEnd("ctx");
  40720. self._lf();
  40721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40722. $ctx1.sendIdx["lf"]=2;
  40723. //>>excludeEnd("ctx");
  40724. self._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  40725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40726. $ctx1.sendIdx["nextPutAll:"]=3;
  40727. //>>excludeEnd("ctx");
  40728. $7=self._lf();
  40729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40730. $ctx1.sendIdx["lf"]=3;
  40731. //>>excludeEnd("ctx");
  40732. $recv(aBlock)._value();
  40733. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  40734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40735. $ctx1.sendIdx["nextPutAll:"]=4;
  40736. //>>excludeEnd("ctx");
  40737. self._lf();
  40738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40739. $ctx1.sendIdx["lf"]=4;
  40740. //>>excludeEnd("ctx");
  40741. $11=$recv(anIRClosure)._scope();
  40742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40743. $ctx1.sendIdx["scope"]=2;
  40744. //>>excludeEnd("ctx");
  40745. $10=$recv($11)._alias();
  40746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40747. $ctx1.sendIdx["alias"]=2;
  40748. //>>excludeEnd("ctx");
  40749. $9="}, function(".__comma($10);
  40750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40751. $ctx1.sendIdx[","]=4;
  40752. //>>excludeEnd("ctx");
  40753. $8=$recv($9).__comma(") {");
  40754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40755. $ctx1.sendIdx[","]=3;
  40756. //>>excludeEnd("ctx");
  40757. self._nextPutAll_($8);
  40758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40759. $ctx1.sendIdx["nextPutAll:"]=5;
  40760. //>>excludeEnd("ctx");
  40761. $15=$recv(anIRClosure)._scope();
  40762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40763. $ctx1.sendIdx["scope"]=3;
  40764. //>>excludeEnd("ctx");
  40765. $14=$recv($15)._alias();
  40766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40767. $ctx1.sendIdx["alias"]=3;
  40768. //>>excludeEnd("ctx");
  40769. $13=$recv($14).__comma(".fillBlock({");
  40770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40771. $ctx1.sendIdx[","]=5;
  40772. //>>excludeEnd("ctx");
  40773. $12=self._nextPutAll_($13);
  40774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40775. $ctx1.sendIdx["nextPutAll:"]=6;
  40776. //>>excludeEnd("ctx");
  40777. $recv($recv(anIRClosure)._locals())._do_separatedBy_((function(each){
  40778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40779. return $core.withContext(function($ctx2) {
  40780. //>>excludeEnd("ctx");
  40781. $16=$recv(each)._asVariableName();
  40782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40783. $ctx2.sendIdx["asVariableName"]=1;
  40784. //>>excludeEnd("ctx");
  40785. self._nextPutAll_($16);
  40786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40787. $ctx2.sendIdx["nextPutAll:"]=7;
  40788. //>>excludeEnd("ctx");
  40789. self._nextPutAll_(":");
  40790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40791. $ctx2.sendIdx["nextPutAll:"]=8;
  40792. //>>excludeEnd("ctx");
  40793. $17=self._nextPutAll_($recv(each)._asVariableName());
  40794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40795. $ctx2.sendIdx["nextPutAll:"]=9;
  40796. //>>excludeEnd("ctx");
  40797. return $17;
  40798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40799. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  40800. //>>excludeEnd("ctx");
  40801. }),(function(){
  40802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40803. return $core.withContext(function($ctx2) {
  40804. //>>excludeEnd("ctx");
  40805. return self._nextPutAll_(",");
  40806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40807. $ctx2.sendIdx["nextPutAll:"]=10;
  40808. //>>excludeEnd("ctx");
  40809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40810. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  40811. //>>excludeEnd("ctx");
  40812. }));
  40813. self._nextPutAll_("},");
  40814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40815. $ctx1.sendIdx["nextPutAll:"]=11;
  40816. //>>excludeEnd("ctx");
  40817. $23=$recv(anIRClosure)._scope();
  40818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40819. $ctx1.sendIdx["scope"]=4;
  40820. //>>excludeEnd("ctx");
  40821. $22=$recv($23)._outerScope();
  40822. $21=$recv($22)._alias();
  40823. $20=$recv($21).__comma(",");
  40824. $19=$recv($20).__comma($recv($recv($recv(anIRClosure)._scope())._blockIndex())._asString());
  40825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40826. $ctx1.sendIdx[","]=7;
  40827. //>>excludeEnd("ctx");
  40828. $18=$recv($19).__comma(")});");
  40829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40830. $ctx1.sendIdx[","]=6;
  40831. //>>excludeEnd("ctx");
  40832. self._nextPutAll_($18);
  40833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40834. $ctx1.sendIdx["nextPutAll:"]=12;
  40835. //>>excludeEnd("ctx");
  40836. self._lf();
  40837. $24=self._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  40838. return self;
  40839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40840. }, function($ctx1) {$ctx1.fill(self,"nextPutBlockContextFor:during:",{anIRClosure:anIRClosure,aBlock:aBlock},$globals.JSStream)});
  40841. //>>excludeEnd("ctx");
  40842. },
  40843. //>>excludeStart("ide", pragmas.excludeIdeData);
  40844. args: ["anIRClosure", "aBlock"],
  40845. 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);'",
  40846. referencedClasses: [],
  40847. //>>excludeEnd("ide");
  40848. messageSends: ["ifFalse:", "requiresSmalltalkContext", "value", "nextPutAll:", "lf", ",", "alias", "scope", "do:separatedBy:", "locals", "asVariableName", "outerScope", "asString", "blockIndex"]
  40849. }),
  40850. $globals.JSStream);
  40851. $core.addMethod(
  40852. $core.method({
  40853. selector: "nextPutClassRefFunction:",
  40854. protocol: 'streaming',
  40855. fn: function (aString){
  40856. var self=this;
  40857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40858. return $core.withContext(function($ctx1) {
  40859. //>>excludeEnd("ctx");
  40860. var $1,$2;
  40861. $1=self["@stream"];
  40862. $recv($1)._nextPutAll_("function $");
  40863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40864. $ctx1.sendIdx["nextPutAll:"]=1;
  40865. //>>excludeEnd("ctx");
  40866. $recv($1)._nextPutAll_(aString);
  40867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40868. $ctx1.sendIdx["nextPutAll:"]=2;
  40869. //>>excludeEnd("ctx");
  40870. $recv($1)._nextPutAll_("(){return $globals.");
  40871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40872. $ctx1.sendIdx["nextPutAll:"]=3;
  40873. //>>excludeEnd("ctx");
  40874. $recv($1)._nextPutAll_(aString);
  40875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40876. $ctx1.sendIdx["nextPutAll:"]=4;
  40877. //>>excludeEnd("ctx");
  40878. $recv($1)._nextPutAll_("||(typeof ");
  40879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40880. $ctx1.sendIdx["nextPutAll:"]=5;
  40881. //>>excludeEnd("ctx");
  40882. $recv($1)._nextPutAll_(aString);
  40883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40884. $ctx1.sendIdx["nextPutAll:"]=6;
  40885. //>>excludeEnd("ctx");
  40886. $recv($1)._nextPutAll_("==\x22undefined\x22?nil:");
  40887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40888. $ctx1.sendIdx["nextPutAll:"]=7;
  40889. //>>excludeEnd("ctx");
  40890. $recv($1)._nextPutAll_(aString);
  40891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40892. $ctx1.sendIdx["nextPutAll:"]=8;
  40893. //>>excludeEnd("ctx");
  40894. $recv($1)._nextPutAll_(")}");
  40895. $2=$recv($1)._lf();
  40896. return self;
  40897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40898. }, function($ctx1) {$ctx1.fill(self,"nextPutClassRefFunction:",{aString:aString},$globals.JSStream)});
  40899. //>>excludeEnd("ctx");
  40900. },
  40901. //>>excludeStart("ide", pragmas.excludeIdeData);
  40902. args: ["aString"],
  40903. 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",
  40904. referencedClasses: [],
  40905. //>>excludeEnd("ide");
  40906. messageSends: ["nextPutAll:", "lf"]
  40907. }),
  40908. $globals.JSStream);
  40909. $core.addMethod(
  40910. $core.method({
  40911. selector: "nextPutClosureWith:arguments:",
  40912. protocol: 'streaming',
  40913. fn: function (aBlock,anArray){
  40914. var self=this;
  40915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40916. return $core.withContext(function($ctx1) {
  40917. //>>excludeEnd("ctx");
  40918. var $1,$2,$3,$4;
  40919. $recv(self["@stream"])._nextPutAll_("(function(");
  40920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40921. $ctx1.sendIdx["nextPutAll:"]=1;
  40922. //>>excludeEnd("ctx");
  40923. $recv(anArray)._do_separatedBy_((function(each){
  40924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40925. return $core.withContext(function($ctx2) {
  40926. //>>excludeEnd("ctx");
  40927. return $recv(self["@stream"])._nextPutAll_($recv(each)._asVariableName());
  40928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40929. $ctx2.sendIdx["nextPutAll:"]=2;
  40930. //>>excludeEnd("ctx");
  40931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40932. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  40933. //>>excludeEnd("ctx");
  40934. }),(function(){
  40935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40936. return $core.withContext(function($ctx2) {
  40937. //>>excludeEnd("ctx");
  40938. return $recv(self["@stream"])._nextPut_(",");
  40939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40940. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  40941. //>>excludeEnd("ctx");
  40942. }));
  40943. $1=self["@stream"];
  40944. $recv($1)._nextPutAll_("){");
  40945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40946. $ctx1.sendIdx["nextPutAll:"]=3;
  40947. //>>excludeEnd("ctx");
  40948. $2=$recv($1)._lf();
  40949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40950. $ctx1.sendIdx["lf"]=1;
  40951. //>>excludeEnd("ctx");
  40952. $recv(aBlock)._value();
  40953. $3=self["@stream"];
  40954. $recv($3)._lf();
  40955. $4=$recv($3)._nextPutAll_("})");
  40956. return self;
  40957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40958. }, function($ctx1) {$ctx1.fill(self,"nextPutClosureWith:arguments:",{aBlock:aBlock,anArray:anArray},$globals.JSStream)});
  40959. //>>excludeEnd("ctx");
  40960. },
  40961. //>>excludeStart("ide", pragmas.excludeIdeData);
  40962. args: ["aBlock", "anArray"],
  40963. 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: '})'",
  40964. referencedClasses: [],
  40965. //>>excludeEnd("ide");
  40966. messageSends: ["nextPutAll:", "do:separatedBy:", "asVariableName", "nextPut:", "lf", "value"]
  40967. }),
  40968. $globals.JSStream);
  40969. $core.addMethod(
  40970. $core.method({
  40971. selector: "nextPutContextFor:during:",
  40972. protocol: 'streaming',
  40973. fn: function (aMethod,aBlock){
  40974. var self=this;
  40975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40976. return $core.withContext(function($ctx1) {
  40977. //>>excludeEnd("ctx");
  40978. var $1,$2,$6,$5,$4,$3,$7,$12,$11,$10,$9,$8,$16,$15,$14,$13,$17,$18,$19;
  40979. $1=$recv(aMethod)._requiresSmalltalkContext();
  40980. if(!$core.assert($1)){
  40981. $2=$recv(aBlock)._value();
  40982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40983. $ctx1.sendIdx["value"]=1;
  40984. //>>excludeEnd("ctx");
  40985. return $2;
  40986. };
  40987. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  40988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40989. $ctx1.sendIdx["nextPutAll:"]=1;
  40990. //>>excludeEnd("ctx");
  40991. self._lf();
  40992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40993. $ctx1.sendIdx["lf"]=1;
  40994. //>>excludeEnd("ctx");
  40995. $6=$recv(aMethod)._scope();
  40996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40997. $ctx1.sendIdx["scope"]=1;
  40998. //>>excludeEnd("ctx");
  40999. $5=$recv($6)._alias();
  41000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41001. $ctx1.sendIdx["alias"]=1;
  41002. //>>excludeEnd("ctx");
  41003. $4="return $core.withContext(function(".__comma($5);
  41004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41005. $ctx1.sendIdx[","]=2;
  41006. //>>excludeEnd("ctx");
  41007. $3=$recv($4).__comma(") {");
  41008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41009. $ctx1.sendIdx[","]=1;
  41010. //>>excludeEnd("ctx");
  41011. self._nextPutAll_($3);
  41012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41013. $ctx1.sendIdx["nextPutAll:"]=2;
  41014. //>>excludeEnd("ctx");
  41015. self._lf();
  41016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41017. $ctx1.sendIdx["lf"]=2;
  41018. //>>excludeEnd("ctx");
  41019. self._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  41020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41021. $ctx1.sendIdx["nextPutAll:"]=3;
  41022. //>>excludeEnd("ctx");
  41023. $7=self._lf();
  41024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41025. $ctx1.sendIdx["lf"]=3;
  41026. //>>excludeEnd("ctx");
  41027. $recv(aBlock)._value();
  41028. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  41029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41030. $ctx1.sendIdx["nextPutAll:"]=4;
  41031. //>>excludeEnd("ctx");
  41032. self._lf();
  41033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41034. $ctx1.sendIdx["lf"]=4;
  41035. //>>excludeEnd("ctx");
  41036. $12=$recv(aMethod)._scope();
  41037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41038. $ctx1.sendIdx["scope"]=2;
  41039. //>>excludeEnd("ctx");
  41040. $11=$recv($12)._alias();
  41041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41042. $ctx1.sendIdx["alias"]=2;
  41043. //>>excludeEnd("ctx");
  41044. $10="}, function(".__comma($11);
  41045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41046. $ctx1.sendIdx[","]=5;
  41047. //>>excludeEnd("ctx");
  41048. $9=$recv($10).__comma(") {");
  41049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41050. $ctx1.sendIdx[","]=4;
  41051. //>>excludeEnd("ctx");
  41052. $8=$recv($9).__comma($recv($recv(aMethod)._scope())._alias());
  41053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41054. $ctx1.sendIdx[","]=3;
  41055. //>>excludeEnd("ctx");
  41056. self._nextPutAll_($8);
  41057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41058. $ctx1.sendIdx["nextPutAll:"]=5;
  41059. //>>excludeEnd("ctx");
  41060. $16=$recv($recv(aMethod)._selector())._asJavascript();
  41061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41062. $ctx1.sendIdx["asJavascript"]=1;
  41063. //>>excludeEnd("ctx");
  41064. $15=".fill(self,".__comma($16);
  41065. $14=$recv($15).__comma(",{");
  41066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41067. $ctx1.sendIdx[","]=6;
  41068. //>>excludeEnd("ctx");
  41069. $13=self._nextPutAll_($14);
  41070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41071. $ctx1.sendIdx["nextPutAll:"]=6;
  41072. //>>excludeEnd("ctx");
  41073. $recv($recv(aMethod)._locals())._do_separatedBy_((function(each){
  41074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41075. return $core.withContext(function($ctx2) {
  41076. //>>excludeEnd("ctx");
  41077. $17=$recv(each)._asVariableName();
  41078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41079. $ctx2.sendIdx["asVariableName"]=1;
  41080. //>>excludeEnd("ctx");
  41081. self._nextPutAll_($17);
  41082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41083. $ctx2.sendIdx["nextPutAll:"]=7;
  41084. //>>excludeEnd("ctx");
  41085. self._nextPutAll_(":");
  41086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41087. $ctx2.sendIdx["nextPutAll:"]=8;
  41088. //>>excludeEnd("ctx");
  41089. $18=self._nextPutAll_($recv(each)._asVariableName());
  41090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41091. $ctx2.sendIdx["nextPutAll:"]=9;
  41092. //>>excludeEnd("ctx");
  41093. return $18;
  41094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41095. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  41096. //>>excludeEnd("ctx");
  41097. }),(function(){
  41098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41099. return $core.withContext(function($ctx2) {
  41100. //>>excludeEnd("ctx");
  41101. return self._nextPutAll_(",");
  41102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41103. $ctx2.sendIdx["nextPutAll:"]=10;
  41104. //>>excludeEnd("ctx");
  41105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41106. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  41107. //>>excludeEnd("ctx");
  41108. }));
  41109. self._nextPutAll_("},");
  41110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41111. $ctx1.sendIdx["nextPutAll:"]=11;
  41112. //>>excludeEnd("ctx");
  41113. self._nextPutAll_($recv($recv(aMethod)._theClass())._asJavascript());
  41114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41115. $ctx1.sendIdx["nextPutAll:"]=12;
  41116. //>>excludeEnd("ctx");
  41117. self._nextPutAll_(")});");
  41118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41119. $ctx1.sendIdx["nextPutAll:"]=13;
  41120. //>>excludeEnd("ctx");
  41121. self._lf();
  41122. $19=self._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  41123. return self;
  41124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41125. }, function($ctx1) {$ctx1.fill(self,"nextPutContextFor:during:",{aMethod:aMethod,aBlock:aBlock},$globals.JSStream)});
  41126. //>>excludeEnd("ctx");
  41127. },
  41128. //>>excludeStart("ide", pragmas.excludeIdeData);
  41129. args: ["aMethod", "aBlock"],
  41130. 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);'",
  41131. referencedClasses: [],
  41132. //>>excludeEnd("ide");
  41133. messageSends: ["ifFalse:", "requiresSmalltalkContext", "value", "nextPutAll:", "lf", ",", "alias", "scope", "asJavascript", "selector", "do:separatedBy:", "locals", "asVariableName", "theClass"]
  41134. }),
  41135. $globals.JSStream);
  41136. $core.addMethod(
  41137. $core.method({
  41138. selector: "nextPutFunctionWith:arguments:",
  41139. protocol: 'streaming',
  41140. fn: function (aBlock,anArray){
  41141. var self=this;
  41142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41143. return $core.withContext(function($ctx1) {
  41144. //>>excludeEnd("ctx");
  41145. var $1,$2,$3,$4,$5,$6;
  41146. $recv(self["@stream"])._nextPutAll_("fn: function(");
  41147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41148. $ctx1.sendIdx["nextPutAll:"]=1;
  41149. //>>excludeEnd("ctx");
  41150. $recv(anArray)._do_separatedBy_((function(each){
  41151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41152. return $core.withContext(function($ctx2) {
  41153. //>>excludeEnd("ctx");
  41154. return $recv(self["@stream"])._nextPutAll_($recv(each)._asVariableName());
  41155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41156. $ctx2.sendIdx["nextPutAll:"]=2;
  41157. //>>excludeEnd("ctx");
  41158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41159. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  41160. //>>excludeEnd("ctx");
  41161. }),(function(){
  41162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41163. return $core.withContext(function($ctx2) {
  41164. //>>excludeEnd("ctx");
  41165. return $recv(self["@stream"])._nextPut_(",");
  41166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41167. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  41168. //>>excludeEnd("ctx");
  41169. }));
  41170. $1=self["@stream"];
  41171. $recv($1)._nextPutAll_("){");
  41172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41173. $ctx1.sendIdx["nextPutAll:"]=3;
  41174. //>>excludeEnd("ctx");
  41175. $2=$recv($1)._lf();
  41176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41177. $ctx1.sendIdx["lf"]=1;
  41178. //>>excludeEnd("ctx");
  41179. $3=self["@stream"];
  41180. $recv($3)._nextPutAll_("var self=this;");
  41181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41182. $ctx1.sendIdx["nextPutAll:"]=4;
  41183. //>>excludeEnd("ctx");
  41184. $4=$recv($3)._lf();
  41185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41186. $ctx1.sendIdx["lf"]=2;
  41187. //>>excludeEnd("ctx");
  41188. $recv(aBlock)._value();
  41189. $5=self["@stream"];
  41190. $recv($5)._lf();
  41191. $6=$recv($5)._nextPutAll_("}");
  41192. return self;
  41193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41194. }, function($ctx1) {$ctx1.fill(self,"nextPutFunctionWith:arguments:",{aBlock:aBlock,anArray:anArray},$globals.JSStream)});
  41195. //>>excludeEnd("ctx");
  41196. },
  41197. //>>excludeStart("ide", pragmas.excludeIdeData);
  41198. args: ["aBlock", "anArray"],
  41199. 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: '}'",
  41200. referencedClasses: [],
  41201. //>>excludeEnd("ide");
  41202. messageSends: ["nextPutAll:", "do:separatedBy:", "asVariableName", "nextPut:", "lf", "value"]
  41203. }),
  41204. $globals.JSStream);
  41205. $core.addMethod(
  41206. $core.method({
  41207. selector: "nextPutIf:with:",
  41208. protocol: 'streaming',
  41209. fn: function (aBlock,anotherBlock){
  41210. var self=this;
  41211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41212. return $core.withContext(function($ctx1) {
  41213. //>>excludeEnd("ctx");
  41214. var $1,$2;
  41215. $recv(self["@stream"])._nextPutAll_("if(");
  41216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41217. $ctx1.sendIdx["nextPutAll:"]=1;
  41218. //>>excludeEnd("ctx");
  41219. $recv(aBlock)._value();
  41220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41221. $ctx1.sendIdx["value"]=1;
  41222. //>>excludeEnd("ctx");
  41223. $1=self["@stream"];
  41224. $recv($1)._nextPutAll_("){");
  41225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41226. $ctx1.sendIdx["nextPutAll:"]=2;
  41227. //>>excludeEnd("ctx");
  41228. $2=$recv($1)._lf();
  41229. $recv(anotherBlock)._value();
  41230. $recv(self["@stream"])._nextPutAll_("}");
  41231. return self;
  41232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41233. }, function($ctx1) {$ctx1.fill(self,"nextPutIf:with:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.JSStream)});
  41234. //>>excludeEnd("ctx");
  41235. },
  41236. //>>excludeStart("ide", pragmas.excludeIdeData);
  41237. args: ["aBlock", "anotherBlock"],
  41238. source: "nextPutIf: aBlock with: anotherBlock\x0a\x09stream nextPutAll: 'if('.\x0a\x09aBlock value.\x0a\x09stream nextPutAll: '){'; lf.\x0a\x09anotherBlock value.\x0a\x09stream nextPutAll: '}'",
  41239. referencedClasses: [],
  41240. //>>excludeEnd("ide");
  41241. messageSends: ["nextPutAll:", "value", "lf"]
  41242. }),
  41243. $globals.JSStream);
  41244. $core.addMethod(
  41245. $core.method({
  41246. selector: "nextPutIfElse:with:with:",
  41247. protocol: 'streaming',
  41248. fn: function (aBlock,ifBlock,elseBlock){
  41249. var self=this;
  41250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41251. return $core.withContext(function($ctx1) {
  41252. //>>excludeEnd("ctx");
  41253. var $1,$2,$3,$4;
  41254. $recv(self["@stream"])._nextPutAll_("if(");
  41255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41256. $ctx1.sendIdx["nextPutAll:"]=1;
  41257. //>>excludeEnd("ctx");
  41258. $recv(aBlock)._value();
  41259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41260. $ctx1.sendIdx["value"]=1;
  41261. //>>excludeEnd("ctx");
  41262. $1=self["@stream"];
  41263. $recv($1)._nextPutAll_("){");
  41264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41265. $ctx1.sendIdx["nextPutAll:"]=2;
  41266. //>>excludeEnd("ctx");
  41267. $2=$recv($1)._lf();
  41268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41269. $ctx1.sendIdx["lf"]=1;
  41270. //>>excludeEnd("ctx");
  41271. $recv(ifBlock)._value();
  41272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41273. $ctx1.sendIdx["value"]=2;
  41274. //>>excludeEnd("ctx");
  41275. $3=self["@stream"];
  41276. $recv($3)._nextPutAll_("} else {");
  41277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41278. $ctx1.sendIdx["nextPutAll:"]=3;
  41279. //>>excludeEnd("ctx");
  41280. $4=$recv($3)._lf();
  41281. $recv(elseBlock)._value();
  41282. $recv(self["@stream"])._nextPutAll_("}");
  41283. return self;
  41284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41285. }, function($ctx1) {$ctx1.fill(self,"nextPutIfElse:with:with:",{aBlock:aBlock,ifBlock:ifBlock,elseBlock:elseBlock},$globals.JSStream)});
  41286. //>>excludeEnd("ctx");
  41287. },
  41288. //>>excludeStart("ide", pragmas.excludeIdeData);
  41289. args: ["aBlock", "ifBlock", "elseBlock"],
  41290. 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: '}'",
  41291. referencedClasses: [],
  41292. //>>excludeEnd("ide");
  41293. messageSends: ["nextPutAll:", "value", "lf"]
  41294. }),
  41295. $globals.JSStream);
  41296. $core.addMethod(
  41297. $core.method({
  41298. selector: "nextPutMethodDeclaration:with:",
  41299. protocol: 'streaming',
  41300. fn: function (aMethod,aBlock){
  41301. var self=this;
  41302. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  41303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41304. return $core.withContext(function($ctx1) {
  41305. //>>excludeEnd("ctx");
  41306. 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;
  41307. $1=self["@stream"];
  41308. $recv($1)._nextPutAll_("$core.method({");
  41309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41310. $ctx1.sendIdx["nextPutAll:"]=1;
  41311. //>>excludeEnd("ctx");
  41312. $recv($1)._lf();
  41313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41314. $ctx1.sendIdx["lf"]=1;
  41315. //>>excludeEnd("ctx");
  41316. $2=$1;
  41317. $5=$recv($recv(aMethod)._selector())._asJavascript();
  41318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41319. $ctx1.sendIdx["asJavascript"]=1;
  41320. //>>excludeEnd("ctx");
  41321. $4="selector: ".__comma($5);
  41322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41323. $ctx1.sendIdx[","]=2;
  41324. //>>excludeEnd("ctx");
  41325. $3=$recv($4).__comma(",");
  41326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41327. $ctx1.sendIdx[","]=1;
  41328. //>>excludeEnd("ctx");
  41329. $recv($2)._nextPutAll_($3);
  41330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41331. $ctx1.sendIdx["nextPutAll:"]=2;
  41332. //>>excludeEnd("ctx");
  41333. $recv($1)._lf();
  41334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41335. $ctx1.sendIdx["lf"]=2;
  41336. //>>excludeEnd("ctx");
  41337. $6=$1;
  41338. $9=$recv($recv(aMethod)._source())._asJavascript();
  41339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41340. $ctx1.sendIdx["asJavascript"]=2;
  41341. //>>excludeEnd("ctx");
  41342. $8="source: ".__comma($9);
  41343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41344. $ctx1.sendIdx[","]=4;
  41345. //>>excludeEnd("ctx");
  41346. $7=$recv($8).__comma(",");
  41347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41348. $ctx1.sendIdx[","]=3;
  41349. //>>excludeEnd("ctx");
  41350. $recv($6)._nextPutAll_($7);
  41351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41352. $ctx1.sendIdx["nextPutAll:"]=3;
  41353. //>>excludeEnd("ctx");
  41354. $10=$recv($1)._lf();
  41355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41356. $ctx1.sendIdx["lf"]=3;
  41357. //>>excludeEnd("ctx");
  41358. $recv(aBlock)._value();
  41359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41360. $ctx1.sendIdx["value"]=1;
  41361. //>>excludeEnd("ctx");
  41362. $11=self["@stream"];
  41363. $12=$11;
  41364. $15=$recv($String())._lf();
  41365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41366. $ctx1.sendIdx["lf"]=4;
  41367. //>>excludeEnd("ctx");
  41368. $14=",".__comma($15);
  41369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41370. $ctx1.sendIdx[","]=6;
  41371. //>>excludeEnd("ctx");
  41372. $13=$recv($14).__comma("messageSends: ");
  41373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41374. $ctx1.sendIdx[","]=5;
  41375. //>>excludeEnd("ctx");
  41376. $recv($12)._nextPutAll_($13);
  41377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41378. $ctx1.sendIdx["nextPutAll:"]=4;
  41379. //>>excludeEnd("ctx");
  41380. $16=$11;
  41381. $19=$recv($recv(aMethod)._messageSends())._asArray();
  41382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41383. $ctx1.sendIdx["asArray"]=1;
  41384. //>>excludeEnd("ctx");
  41385. $18=$recv($19)._asJavascript();
  41386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41387. $ctx1.sendIdx["asJavascript"]=3;
  41388. //>>excludeEnd("ctx");
  41389. $17=$recv($18).__comma(",");
  41390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41391. $ctx1.sendIdx[","]=7;
  41392. //>>excludeEnd("ctx");
  41393. $recv($16)._nextPutAll_($17);
  41394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41395. $ctx1.sendIdx["nextPutAll:"]=5;
  41396. //>>excludeEnd("ctx");
  41397. $recv($11)._lf();
  41398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41399. $ctx1.sendIdx["lf"]=5;
  41400. //>>excludeEnd("ctx");
  41401. $20=$11;
  41402. $23=$recv($recv($recv($recv(aMethod)._arguments())._collect_((function(each){
  41403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41404. return $core.withContext(function($ctx2) {
  41405. //>>excludeEnd("ctx");
  41406. return $recv(each)._value();
  41407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41408. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  41409. //>>excludeEnd("ctx");
  41410. })))._asArray())._asJavascript();
  41411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41412. $ctx1.sendIdx["asJavascript"]=4;
  41413. //>>excludeEnd("ctx");
  41414. $22="args: ".__comma($23);
  41415. $21=$recv($22).__comma(",");
  41416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41417. $ctx1.sendIdx[","]=8;
  41418. //>>excludeEnd("ctx");
  41419. $recv($20)._nextPutAll_($21);
  41420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41421. $ctx1.sendIdx["nextPutAll:"]=6;
  41422. //>>excludeEnd("ctx");
  41423. $recv($11)._lf();
  41424. $24=$recv($11)._nextPutAll_("referencedClasses: [");
  41425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41426. $ctx1.sendIdx["nextPutAll:"]=7;
  41427. //>>excludeEnd("ctx");
  41428. $recv($recv(aMethod)._classReferences())._do_separatedBy_((function(each){
  41429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41430. return $core.withContext(function($ctx2) {
  41431. //>>excludeEnd("ctx");
  41432. return $recv(self["@stream"])._nextPutAll_($recv(each)._asJavascript());
  41433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41434. $ctx2.sendIdx["nextPutAll:"]=8;
  41435. //>>excludeEnd("ctx");
  41436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41437. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  41438. //>>excludeEnd("ctx");
  41439. }),(function(){
  41440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41441. return $core.withContext(function($ctx2) {
  41442. //>>excludeEnd("ctx");
  41443. return $recv(self["@stream"])._nextPutAll_(",");
  41444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41445. $ctx2.sendIdx["nextPutAll:"]=9;
  41446. //>>excludeEnd("ctx");
  41447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41448. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  41449. //>>excludeEnd("ctx");
  41450. }));
  41451. $25=self["@stream"];
  41452. $recv($25)._nextPutAll_("]");
  41453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41454. $ctx1.sendIdx["nextPutAll:"]=10;
  41455. //>>excludeEnd("ctx");
  41456. $26=$recv($25)._nextPutAll_("})");
  41457. return self;
  41458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41459. }, function($ctx1) {$ctx1.fill(self,"nextPutMethodDeclaration:with:",{aMethod:aMethod,aBlock:aBlock},$globals.JSStream)});
  41460. //>>excludeEnd("ctx");
  41461. },
  41462. //>>excludeStart("ide", pragmas.excludeIdeData);
  41463. args: ["aMethod", "aBlock"],
  41464. 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: '})'",
  41465. referencedClasses: ["String"],
  41466. //>>excludeEnd("ide");
  41467. messageSends: ["nextPutAll:", "lf", ",", "asJavascript", "selector", "source", "value", "asArray", "messageSends", "collect:", "arguments", "do:separatedBy:", "classReferences"]
  41468. }),
  41469. $globals.JSStream);
  41470. $core.addMethod(
  41471. $core.method({
  41472. selector: "nextPutNonLocalReturnHandlingWith:",
  41473. protocol: 'streaming',
  41474. fn: function (aBlock){
  41475. var self=this;
  41476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41477. return $core.withContext(function($ctx1) {
  41478. //>>excludeEnd("ctx");
  41479. var $1,$2,$3,$4;
  41480. $1=self["@stream"];
  41481. $recv($1)._nextPutAll_("var $early={};");
  41482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41483. $ctx1.sendIdx["nextPutAll:"]=1;
  41484. //>>excludeEnd("ctx");
  41485. $recv($1)._lf();
  41486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41487. $ctx1.sendIdx["lf"]=1;
  41488. //>>excludeEnd("ctx");
  41489. $recv($1)._nextPutAll_("try {");
  41490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41491. $ctx1.sendIdx["nextPutAll:"]=2;
  41492. //>>excludeEnd("ctx");
  41493. $2=$recv($1)._lf();
  41494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41495. $ctx1.sendIdx["lf"]=2;
  41496. //>>excludeEnd("ctx");
  41497. $recv(aBlock)._value();
  41498. $3=self["@stream"];
  41499. $recv($3)._nextPutAll_("}");
  41500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41501. $ctx1.sendIdx["nextPutAll:"]=3;
  41502. //>>excludeEnd("ctx");
  41503. $recv($3)._lf();
  41504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41505. $ctx1.sendIdx["lf"]=3;
  41506. //>>excludeEnd("ctx");
  41507. $recv($3)._nextPutAll_("catch(e) {if(e===$early)return e[0]; throw e}");
  41508. $4=$recv($3)._lf();
  41509. return self;
  41510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41511. }, function($ctx1) {$ctx1.fill(self,"nextPutNonLocalReturnHandlingWith:",{aBlock:aBlock},$globals.JSStream)});
  41512. //>>excludeEnd("ctx");
  41513. },
  41514. //>>excludeStart("ide", pragmas.excludeIdeData);
  41515. args: ["aBlock"],
  41516. 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",
  41517. referencedClasses: [],
  41518. //>>excludeEnd("ide");
  41519. messageSends: ["nextPutAll:", "lf", "value"]
  41520. }),
  41521. $globals.JSStream);
  41522. $core.addMethod(
  41523. $core.method({
  41524. selector: "nextPutNonLocalReturnWith:",
  41525. protocol: 'streaming',
  41526. fn: function (aBlock){
  41527. var self=this;
  41528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41529. return $core.withContext(function($ctx1) {
  41530. //>>excludeEnd("ctx");
  41531. $recv(self["@stream"])._nextPutAll_("throw $early=[");
  41532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41533. $ctx1.sendIdx["nextPutAll:"]=1;
  41534. //>>excludeEnd("ctx");
  41535. $recv(aBlock)._value();
  41536. $recv(self["@stream"])._nextPutAll_("]");
  41537. return self;
  41538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41539. }, function($ctx1) {$ctx1.fill(self,"nextPutNonLocalReturnWith:",{aBlock:aBlock},$globals.JSStream)});
  41540. //>>excludeEnd("ctx");
  41541. },
  41542. //>>excludeStart("ide", pragmas.excludeIdeData);
  41543. args: ["aBlock"],
  41544. source: "nextPutNonLocalReturnWith: aBlock\x0a\x09stream nextPutAll: 'throw $early=['.\x0a\x09aBlock value.\x0a\x09stream nextPutAll: ']'",
  41545. referencedClasses: [],
  41546. //>>excludeEnd("ide");
  41547. messageSends: ["nextPutAll:", "value"]
  41548. }),
  41549. $globals.JSStream);
  41550. $core.addMethod(
  41551. $core.method({
  41552. selector: "nextPutReturn",
  41553. protocol: 'streaming',
  41554. fn: function (){
  41555. var self=this;
  41556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41557. return $core.withContext(function($ctx1) {
  41558. //>>excludeEnd("ctx");
  41559. $recv(self["@stream"])._nextPutAll_("return ");
  41560. return self;
  41561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41562. }, function($ctx1) {$ctx1.fill(self,"nextPutReturn",{},$globals.JSStream)});
  41563. //>>excludeEnd("ctx");
  41564. },
  41565. //>>excludeStart("ide", pragmas.excludeIdeData);
  41566. args: [],
  41567. source: "nextPutReturn\x0a\x09stream nextPutAll: 'return '",
  41568. referencedClasses: [],
  41569. //>>excludeEnd("ide");
  41570. messageSends: ["nextPutAll:"]
  41571. }),
  41572. $globals.JSStream);
  41573. $core.addMethod(
  41574. $core.method({
  41575. selector: "nextPutReturnWith:",
  41576. protocol: 'streaming',
  41577. fn: function (aBlock){
  41578. var self=this;
  41579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41580. return $core.withContext(function($ctx1) {
  41581. //>>excludeEnd("ctx");
  41582. self._nextPutReturn();
  41583. $recv(aBlock)._value();
  41584. return self;
  41585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41586. }, function($ctx1) {$ctx1.fill(self,"nextPutReturnWith:",{aBlock:aBlock},$globals.JSStream)});
  41587. //>>excludeEnd("ctx");
  41588. },
  41589. //>>excludeStart("ide", pragmas.excludeIdeData);
  41590. args: ["aBlock"],
  41591. source: "nextPutReturnWith: aBlock\x0a\x09self nextPutReturn.\x0a\x09aBlock value",
  41592. referencedClasses: [],
  41593. //>>excludeEnd("ide");
  41594. messageSends: ["nextPutReturn", "value"]
  41595. }),
  41596. $globals.JSStream);
  41597. $core.addMethod(
  41598. $core.method({
  41599. selector: "nextPutSendIndexFor:",
  41600. protocol: 'streaming',
  41601. fn: function (anIRSend){
  41602. var self=this;
  41603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41604. return $core.withContext(function($ctx1) {
  41605. //>>excludeEnd("ctx");
  41606. var $1;
  41607. self._nextPutAll_(";");
  41608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41609. $ctx1.sendIdx["nextPutAll:"]=1;
  41610. //>>excludeEnd("ctx");
  41611. self._lf();
  41612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41613. $ctx1.sendIdx["lf"]=1;
  41614. //>>excludeEnd("ctx");
  41615. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  41616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41617. $ctx1.sendIdx["nextPutAll:"]=2;
  41618. //>>excludeEnd("ctx");
  41619. self._lf();
  41620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41621. $ctx1.sendIdx["lf"]=2;
  41622. //>>excludeEnd("ctx");
  41623. self._nextPutAll_($recv($recv(anIRSend)._scope())._alias());
  41624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41625. $ctx1.sendIdx["nextPutAll:"]=3;
  41626. //>>excludeEnd("ctx");
  41627. self._nextPutAll_(".sendIdx[");
  41628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41629. $ctx1.sendIdx["nextPutAll:"]=4;
  41630. //>>excludeEnd("ctx");
  41631. self._nextPutAll_($recv($recv(anIRSend)._selector())._asJavascript());
  41632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41633. $ctx1.sendIdx["nextPutAll:"]=5;
  41634. //>>excludeEnd("ctx");
  41635. self._nextPutAll_("]=");
  41636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41637. $ctx1.sendIdx["nextPutAll:"]=6;
  41638. //>>excludeEnd("ctx");
  41639. self._nextPutAll_($recv($recv(anIRSend)._index())._asString());
  41640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41641. $ctx1.sendIdx["nextPutAll:"]=7;
  41642. //>>excludeEnd("ctx");
  41643. self._nextPutAll_(";");
  41644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41645. $ctx1.sendIdx["nextPutAll:"]=8;
  41646. //>>excludeEnd("ctx");
  41647. self._lf();
  41648. $1=self._nextPutAll_("//>>excludeEnd(\x22ctx\x22)");
  41649. return self;
  41650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41651. }, function($ctx1) {$ctx1.fill(self,"nextPutSendIndexFor:",{anIRSend:anIRSend},$globals.JSStream)});
  41652. //>>excludeEnd("ctx");
  41653. },
  41654. //>>excludeStart("ide", pragmas.excludeIdeData);
  41655. args: ["anIRSend"],
  41656. 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)'",
  41657. referencedClasses: [],
  41658. //>>excludeEnd("ide");
  41659. messageSends: ["nextPutAll:", "lf", "alias", "scope", "asJavascript", "selector", "asString", "index"]
  41660. }),
  41661. $globals.JSStream);
  41662. $core.addMethod(
  41663. $core.method({
  41664. selector: "nextPutSequenceWith:",
  41665. protocol: 'streaming',
  41666. fn: function (aBlock){
  41667. var self=this;
  41668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41669. return $core.withContext(function($ctx1) {
  41670. //>>excludeEnd("ctx");
  41671. $recv(aBlock)._value();
  41672. return self;
  41673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41674. }, function($ctx1) {$ctx1.fill(self,"nextPutSequenceWith:",{aBlock:aBlock},$globals.JSStream)});
  41675. //>>excludeEnd("ctx");
  41676. },
  41677. //>>excludeStart("ide", pragmas.excludeIdeData);
  41678. args: ["aBlock"],
  41679. 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",
  41680. referencedClasses: [],
  41681. //>>excludeEnd("ide");
  41682. messageSends: ["value"]
  41683. }),
  41684. $globals.JSStream);
  41685. $core.addMethod(
  41686. $core.method({
  41687. selector: "nextPutStatementWith:",
  41688. protocol: 'streaming',
  41689. fn: function (aBlock){
  41690. var self=this;
  41691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41692. return $core.withContext(function($ctx1) {
  41693. //>>excludeEnd("ctx");
  41694. var $1,$2;
  41695. $recv(aBlock)._value();
  41696. $1=self["@stream"];
  41697. $recv($1)._nextPutAll_(";");
  41698. $2=$recv($1)._lf();
  41699. return self;
  41700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41701. }, function($ctx1) {$ctx1.fill(self,"nextPutStatementWith:",{aBlock:aBlock},$globals.JSStream)});
  41702. //>>excludeEnd("ctx");
  41703. },
  41704. //>>excludeStart("ide", pragmas.excludeIdeData);
  41705. args: ["aBlock"],
  41706. source: "nextPutStatementWith: aBlock\x0a\x09aBlock value.\x0a\x09stream nextPutAll: ';'; lf",
  41707. referencedClasses: [],
  41708. //>>excludeEnd("ide");
  41709. messageSends: ["value", "nextPutAll:", "lf"]
  41710. }),
  41711. $globals.JSStream);
  41712. $core.addMethod(
  41713. $core.method({
  41714. selector: "nextPutVars:",
  41715. protocol: 'streaming',
  41716. fn: function (aCollection){
  41717. var self=this;
  41718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41719. return $core.withContext(function($ctx1) {
  41720. //>>excludeEnd("ctx");
  41721. var $1,$2;
  41722. var $early={};
  41723. try {
  41724. $recv(aCollection)._ifEmpty_((function(){
  41725. throw $early=[self];
  41726. }));
  41727. $recv(self["@stream"])._nextPutAll_("var ");
  41728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41729. $ctx1.sendIdx["nextPutAll:"]=1;
  41730. //>>excludeEnd("ctx");
  41731. $recv(aCollection)._do_separatedBy_((function(each){
  41732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41733. return $core.withContext(function($ctx2) {
  41734. //>>excludeEnd("ctx");
  41735. return $recv(self["@stream"])._nextPutAll_(each);
  41736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41737. $ctx2.sendIdx["nextPutAll:"]=2;
  41738. //>>excludeEnd("ctx");
  41739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41740. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  41741. //>>excludeEnd("ctx");
  41742. }),(function(){
  41743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41744. return $core.withContext(function($ctx2) {
  41745. //>>excludeEnd("ctx");
  41746. return $recv(self["@stream"])._nextPutAll_(",");
  41747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41748. $ctx2.sendIdx["nextPutAll:"]=3;
  41749. //>>excludeEnd("ctx");
  41750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41751. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  41752. //>>excludeEnd("ctx");
  41753. }));
  41754. $1=self["@stream"];
  41755. $recv($1)._nextPutAll_(";");
  41756. $2=$recv($1)._lf();
  41757. return self;
  41758. }
  41759. catch(e) {if(e===$early)return e[0]; throw e}
  41760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41761. }, function($ctx1) {$ctx1.fill(self,"nextPutVars:",{aCollection:aCollection},$globals.JSStream)});
  41762. //>>excludeEnd("ctx");
  41763. },
  41764. //>>excludeStart("ide", pragmas.excludeIdeData);
  41765. args: ["aCollection"],
  41766. 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",
  41767. referencedClasses: [],
  41768. //>>excludeEnd("ide");
  41769. messageSends: ["ifEmpty:", "nextPutAll:", "do:separatedBy:", "lf"]
  41770. }),
  41771. $globals.JSStream);
  41772. $core.addMethod(
  41773. $core.method({
  41774. selector: "appendToInstruction:",
  41775. protocol: '*Compiler-IR',
  41776. fn: function (anIRInstruction){
  41777. var self=this;
  41778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41779. return $core.withContext(function($ctx1) {
  41780. //>>excludeEnd("ctx");
  41781. $recv(anIRInstruction)._appendBlock_(self);
  41782. return self;
  41783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41784. }, function($ctx1) {$ctx1.fill(self,"appendToInstruction:",{anIRInstruction:anIRInstruction},$globals.BlockClosure)});
  41785. //>>excludeEnd("ctx");
  41786. },
  41787. //>>excludeStart("ide", pragmas.excludeIdeData);
  41788. args: ["anIRInstruction"],
  41789. source: "appendToInstruction: anIRInstruction\x0a\x09anIRInstruction appendBlock: self",
  41790. referencedClasses: [],
  41791. //>>excludeEnd("ide");
  41792. messageSends: ["appendBlock:"]
  41793. }),
  41794. $globals.BlockClosure);
  41795. });
  41796. define("amber_core/Compiler-Inlining", ["amber/boot", "amber_core/Compiler-IR", "amber_core/Kernel-Objects", "amber_core/Compiler-Core"], function($boot){
  41797. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  41798. $core.addPackage('Compiler-Inlining');
  41799. $core.packages["Compiler-Inlining"].innerEval = function (expr) { return eval(expr); };
  41800. $core.packages["Compiler-Inlining"].transport = {"type":"amd","amdNamespace":"amber_core"};
  41801. $core.addClass('IRInlinedAssignment', $globals.IRAssignment, [], 'Compiler-Inlining');
  41802. //>>excludeStart("ide", pragmas.excludeIdeData);
  41803. $globals.IRInlinedAssignment.comment="I represent an inlined assignment instruction.";
  41804. //>>excludeEnd("ide");
  41805. $core.addMethod(
  41806. $core.method({
  41807. selector: "accept:",
  41808. protocol: 'visiting',
  41809. fn: function (aVisitor){
  41810. var self=this;
  41811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41812. return $core.withContext(function($ctx1) {
  41813. //>>excludeEnd("ctx");
  41814. var $1;
  41815. $1=$recv(aVisitor)._visitIRInlinedAssignment_(self);
  41816. return $1;
  41817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41818. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedAssignment)});
  41819. //>>excludeEnd("ctx");
  41820. },
  41821. //>>excludeStart("ide", pragmas.excludeIdeData);
  41822. args: ["aVisitor"],
  41823. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRInlinedAssignment: self",
  41824. referencedClasses: [],
  41825. //>>excludeEnd("ide");
  41826. messageSends: ["visitIRInlinedAssignment:"]
  41827. }),
  41828. $globals.IRInlinedAssignment);
  41829. $core.addMethod(
  41830. $core.method({
  41831. selector: "isInlined",
  41832. protocol: 'testing',
  41833. fn: function (){
  41834. var self=this;
  41835. return true;
  41836. },
  41837. //>>excludeStart("ide", pragmas.excludeIdeData);
  41838. args: [],
  41839. source: "isInlined\x0a\x09^ true",
  41840. referencedClasses: [],
  41841. //>>excludeEnd("ide");
  41842. messageSends: []
  41843. }),
  41844. $globals.IRInlinedAssignment);
  41845. $core.addClass('IRInlinedClosure', $globals.IRClosure, [], 'Compiler-Inlining');
  41846. //>>excludeStart("ide", pragmas.excludeIdeData);
  41847. $globals.IRInlinedClosure.comment="I represent an inlined closure instruction.";
  41848. //>>excludeEnd("ide");
  41849. $core.addMethod(
  41850. $core.method({
  41851. selector: "accept:",
  41852. protocol: 'visiting',
  41853. fn: function (aVisitor){
  41854. var self=this;
  41855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41856. return $core.withContext(function($ctx1) {
  41857. //>>excludeEnd("ctx");
  41858. $recv(aVisitor)._visitIRInlinedClosure_(self);
  41859. return self;
  41860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41861. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedClosure)});
  41862. //>>excludeEnd("ctx");
  41863. },
  41864. //>>excludeStart("ide", pragmas.excludeIdeData);
  41865. args: ["aVisitor"],
  41866. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedClosure: self",
  41867. referencedClasses: [],
  41868. //>>excludeEnd("ide");
  41869. messageSends: ["visitIRInlinedClosure:"]
  41870. }),
  41871. $globals.IRInlinedClosure);
  41872. $core.addMethod(
  41873. $core.method({
  41874. selector: "isInlined",
  41875. protocol: 'testing',
  41876. fn: function (){
  41877. var self=this;
  41878. return true;
  41879. },
  41880. //>>excludeStart("ide", pragmas.excludeIdeData);
  41881. args: [],
  41882. source: "isInlined\x0a\x09^ true",
  41883. referencedClasses: [],
  41884. //>>excludeEnd("ide");
  41885. messageSends: []
  41886. }),
  41887. $globals.IRInlinedClosure);
  41888. $core.addClass('IRInlinedReturn', $globals.IRReturn, [], 'Compiler-Inlining');
  41889. //>>excludeStart("ide", pragmas.excludeIdeData);
  41890. $globals.IRInlinedReturn.comment="I represent an inlined local return instruction.";
  41891. //>>excludeEnd("ide");
  41892. $core.addMethod(
  41893. $core.method({
  41894. selector: "accept:",
  41895. protocol: 'visiting',
  41896. fn: function (aVisitor){
  41897. var self=this;
  41898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41899. return $core.withContext(function($ctx1) {
  41900. //>>excludeEnd("ctx");
  41901. var $1;
  41902. $1=$recv(aVisitor)._visitIRInlinedReturn_(self);
  41903. return $1;
  41904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41905. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedReturn)});
  41906. //>>excludeEnd("ctx");
  41907. },
  41908. //>>excludeStart("ide", pragmas.excludeIdeData);
  41909. args: ["aVisitor"],
  41910. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRInlinedReturn: self",
  41911. referencedClasses: [],
  41912. //>>excludeEnd("ide");
  41913. messageSends: ["visitIRInlinedReturn:"]
  41914. }),
  41915. $globals.IRInlinedReturn);
  41916. $core.addMethod(
  41917. $core.method({
  41918. selector: "isInlined",
  41919. protocol: 'testing',
  41920. fn: function (){
  41921. var self=this;
  41922. return true;
  41923. },
  41924. //>>excludeStart("ide", pragmas.excludeIdeData);
  41925. args: [],
  41926. source: "isInlined\x0a\x09^ true",
  41927. referencedClasses: [],
  41928. //>>excludeEnd("ide");
  41929. messageSends: []
  41930. }),
  41931. $globals.IRInlinedReturn);
  41932. $core.addClass('IRInlinedSend', $globals.IRSend, [], 'Compiler-Inlining');
  41933. //>>excludeStart("ide", pragmas.excludeIdeData);
  41934. $globals.IRInlinedSend.comment="I am the abstract super class of inlined message send instructions.";
  41935. //>>excludeEnd("ide");
  41936. $core.addMethod(
  41937. $core.method({
  41938. selector: "accept:",
  41939. protocol: 'visiting',
  41940. fn: function (aVisitor){
  41941. var self=this;
  41942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41943. return $core.withContext(function($ctx1) {
  41944. //>>excludeEnd("ctx");
  41945. $recv(aVisitor)._visitInlinedSend_(self);
  41946. return self;
  41947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41948. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedSend)});
  41949. //>>excludeEnd("ctx");
  41950. },
  41951. //>>excludeStart("ide", pragmas.excludeIdeData);
  41952. args: ["aVisitor"],
  41953. source: "accept: aVisitor\x0a\x09aVisitor visitInlinedSend: self",
  41954. referencedClasses: [],
  41955. //>>excludeEnd("ide");
  41956. messageSends: ["visitInlinedSend:"]
  41957. }),
  41958. $globals.IRInlinedSend);
  41959. $core.addMethod(
  41960. $core.method({
  41961. selector: "internalVariables",
  41962. protocol: 'accessing',
  41963. fn: function (){
  41964. var self=this;
  41965. var $1;
  41966. $1=[];
  41967. return $1;
  41968. },
  41969. //>>excludeStart("ide", pragmas.excludeIdeData);
  41970. args: [],
  41971. source: "internalVariables\x0a\x09\x22Answer a collection of internal variables required \x0a\x09to perform the inlining\x22\x0a\x09\x0a\x09^ #()",
  41972. referencedClasses: [],
  41973. //>>excludeEnd("ide");
  41974. messageSends: []
  41975. }),
  41976. $globals.IRInlinedSend);
  41977. $core.addMethod(
  41978. $core.method({
  41979. selector: "isInlined",
  41980. protocol: 'testing',
  41981. fn: function (){
  41982. var self=this;
  41983. return true;
  41984. },
  41985. //>>excludeStart("ide", pragmas.excludeIdeData);
  41986. args: [],
  41987. source: "isInlined\x0a\x09^ true",
  41988. referencedClasses: [],
  41989. //>>excludeEnd("ide");
  41990. messageSends: []
  41991. }),
  41992. $globals.IRInlinedSend);
  41993. $core.addClass('IRInlinedIfFalse', $globals.IRInlinedSend, [], 'Compiler-Inlining');
  41994. //>>excludeStart("ide", pragmas.excludeIdeData);
  41995. $globals.IRInlinedIfFalse.comment="I represent an inlined `#ifFalse:` message send instruction.";
  41996. //>>excludeEnd("ide");
  41997. $core.addMethod(
  41998. $core.method({
  41999. selector: "accept:",
  42000. protocol: 'visiting',
  42001. fn: function (aVisitor){
  42002. var self=this;
  42003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42004. return $core.withContext(function($ctx1) {
  42005. //>>excludeEnd("ctx");
  42006. $recv(aVisitor)._visitIRInlinedIfFalse_(self);
  42007. return self;
  42008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42009. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedIfFalse)});
  42010. //>>excludeEnd("ctx");
  42011. },
  42012. //>>excludeStart("ide", pragmas.excludeIdeData);
  42013. args: ["aVisitor"],
  42014. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfFalse: self",
  42015. referencedClasses: [],
  42016. //>>excludeEnd("ide");
  42017. messageSends: ["visitIRInlinedIfFalse:"]
  42018. }),
  42019. $globals.IRInlinedIfFalse);
  42020. $core.addClass('IRInlinedIfNilIfNotNil', $globals.IRInlinedSend, [], 'Compiler-Inlining');
  42021. //>>excludeStart("ide", pragmas.excludeIdeData);
  42022. $globals.IRInlinedIfNilIfNotNil.comment="I represent an inlined `#ifNil:ifNotNil:` message send instruction.";
  42023. //>>excludeEnd("ide");
  42024. $core.addMethod(
  42025. $core.method({
  42026. selector: "accept:",
  42027. protocol: 'visiting',
  42028. fn: function (aVisitor){
  42029. var self=this;
  42030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42031. return $core.withContext(function($ctx1) {
  42032. //>>excludeEnd("ctx");
  42033. $recv(aVisitor)._visitIRInlinedIfNilIfNotNil_(self);
  42034. return self;
  42035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42036. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedIfNilIfNotNil)});
  42037. //>>excludeEnd("ctx");
  42038. },
  42039. //>>excludeStart("ide", pragmas.excludeIdeData);
  42040. args: ["aVisitor"],
  42041. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfNilIfNotNil: self",
  42042. referencedClasses: [],
  42043. //>>excludeEnd("ide");
  42044. messageSends: ["visitIRInlinedIfNilIfNotNil:"]
  42045. }),
  42046. $globals.IRInlinedIfNilIfNotNil);
  42047. $core.addMethod(
  42048. $core.method({
  42049. selector: "internalVariables",
  42050. protocol: 'accessing',
  42051. fn: function (){
  42052. var self=this;
  42053. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  42054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42055. return $core.withContext(function($ctx1) {
  42056. //>>excludeEnd("ctx");
  42057. var $1;
  42058. $1=$recv($Array())._with_(self._receiverInternalVariable());
  42059. return $1;
  42060. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42061. }, function($ctx1) {$ctx1.fill(self,"internalVariables",{},$globals.IRInlinedIfNilIfNotNil)});
  42062. //>>excludeEnd("ctx");
  42063. },
  42064. //>>excludeStart("ide", pragmas.excludeIdeData);
  42065. args: [],
  42066. source: "internalVariables\x0a\x09^ Array with: self receiverInternalVariable",
  42067. referencedClasses: ["Array"],
  42068. //>>excludeEnd("ide");
  42069. messageSends: ["with:", "receiverInternalVariable"]
  42070. }),
  42071. $globals.IRInlinedIfNilIfNotNil);
  42072. $core.addMethod(
  42073. $core.method({
  42074. selector: "receiverInternalVariable",
  42075. protocol: 'accessing',
  42076. fn: function (){
  42077. var self=this;
  42078. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  42079. function $AliasVar(){return $globals.AliasVar||(typeof AliasVar=="undefined"?nil:AliasVar)}
  42080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42081. return $core.withContext(function($ctx1) {
  42082. //>>excludeEnd("ctx");
  42083. var $2,$3,$1;
  42084. $2=$recv($IRVariable())._new();
  42085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42086. $ctx1.sendIdx["new"]=1;
  42087. //>>excludeEnd("ctx");
  42088. $recv($2)._variable_($recv($recv($AliasVar())._new())._name_(self._receiverInternalVariableName()));
  42089. $3=$recv($2)._yourself();
  42090. $1=$3;
  42091. return $1;
  42092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42093. }, function($ctx1) {$ctx1.fill(self,"receiverInternalVariable",{},$globals.IRInlinedIfNilIfNotNil)});
  42094. //>>excludeEnd("ctx");
  42095. },
  42096. //>>excludeStart("ide", pragmas.excludeIdeData);
  42097. args: [],
  42098. source: "receiverInternalVariable\x0a\x09^ IRVariable new\x0a\x09\x09variable: (AliasVar new name: self receiverInternalVariableName);\x0a\x09\x09yourself.",
  42099. referencedClasses: ["IRVariable", "AliasVar"],
  42100. //>>excludeEnd("ide");
  42101. messageSends: ["variable:", "new", "name:", "receiverInternalVariableName", "yourself"]
  42102. }),
  42103. $globals.IRInlinedIfNilIfNotNil);
  42104. $core.addMethod(
  42105. $core.method({
  42106. selector: "receiverInternalVariableName",
  42107. protocol: 'accessing',
  42108. fn: function (){
  42109. var self=this;
  42110. return "$receiver";
  42111. },
  42112. //>>excludeStart("ide", pragmas.excludeIdeData);
  42113. args: [],
  42114. source: "receiverInternalVariableName\x0a\x09^ '$receiver'",
  42115. referencedClasses: [],
  42116. //>>excludeEnd("ide");
  42117. messageSends: []
  42118. }),
  42119. $globals.IRInlinedIfNilIfNotNil);
  42120. $core.addClass('IRInlinedIfTrue', $globals.IRInlinedSend, [], 'Compiler-Inlining');
  42121. //>>excludeStart("ide", pragmas.excludeIdeData);
  42122. $globals.IRInlinedIfTrue.comment="I represent an inlined `#ifTrue:` message send instruction.";
  42123. //>>excludeEnd("ide");
  42124. $core.addMethod(
  42125. $core.method({
  42126. selector: "accept:",
  42127. protocol: 'visiting',
  42128. fn: function (aVisitor){
  42129. var self=this;
  42130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42131. return $core.withContext(function($ctx1) {
  42132. //>>excludeEnd("ctx");
  42133. $recv(aVisitor)._visitIRInlinedIfTrue_(self);
  42134. return self;
  42135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42136. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedIfTrue)});
  42137. //>>excludeEnd("ctx");
  42138. },
  42139. //>>excludeStart("ide", pragmas.excludeIdeData);
  42140. args: ["aVisitor"],
  42141. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfTrue: self",
  42142. referencedClasses: [],
  42143. //>>excludeEnd("ide");
  42144. messageSends: ["visitIRInlinedIfTrue:"]
  42145. }),
  42146. $globals.IRInlinedIfTrue);
  42147. $core.addClass('IRInlinedIfTrueIfFalse', $globals.IRInlinedSend, [], 'Compiler-Inlining');
  42148. //>>excludeStart("ide", pragmas.excludeIdeData);
  42149. $globals.IRInlinedIfTrueIfFalse.comment="I represent an inlined `#ifTrue:ifFalse:` message send instruction.";
  42150. //>>excludeEnd("ide");
  42151. $core.addMethod(
  42152. $core.method({
  42153. selector: "accept:",
  42154. protocol: 'visiting',
  42155. fn: function (aVisitor){
  42156. var self=this;
  42157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42158. return $core.withContext(function($ctx1) {
  42159. //>>excludeEnd("ctx");
  42160. $recv(aVisitor)._visitIRInlinedIfTrueIfFalse_(self);
  42161. return self;
  42162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42163. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedIfTrueIfFalse)});
  42164. //>>excludeEnd("ctx");
  42165. },
  42166. //>>excludeStart("ide", pragmas.excludeIdeData);
  42167. args: ["aVisitor"],
  42168. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfTrueIfFalse: self",
  42169. referencedClasses: [],
  42170. //>>excludeEnd("ide");
  42171. messageSends: ["visitIRInlinedIfTrueIfFalse:"]
  42172. }),
  42173. $globals.IRInlinedIfTrueIfFalse);
  42174. $core.addClass('IRInlinedSequence', $globals.IRBlockSequence, [], 'Compiler-Inlining');
  42175. //>>excludeStart("ide", pragmas.excludeIdeData);
  42176. $globals.IRInlinedSequence.comment="I represent a (block) sequence inside an inlined closure instruction (instance of `IRInlinedClosure`).";
  42177. //>>excludeEnd("ide");
  42178. $core.addMethod(
  42179. $core.method({
  42180. selector: "accept:",
  42181. protocol: 'visiting',
  42182. fn: function (aVisitor){
  42183. var self=this;
  42184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42185. return $core.withContext(function($ctx1) {
  42186. //>>excludeEnd("ctx");
  42187. $recv(aVisitor)._visitIRInlinedSequence_(self);
  42188. return self;
  42189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42190. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedSequence)});
  42191. //>>excludeEnd("ctx");
  42192. },
  42193. //>>excludeStart("ide", pragmas.excludeIdeData);
  42194. args: ["aVisitor"],
  42195. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedSequence: self",
  42196. referencedClasses: [],
  42197. //>>excludeEnd("ide");
  42198. messageSends: ["visitIRInlinedSequence:"]
  42199. }),
  42200. $globals.IRInlinedSequence);
  42201. $core.addMethod(
  42202. $core.method({
  42203. selector: "isInlined",
  42204. protocol: 'testing',
  42205. fn: function (){
  42206. var self=this;
  42207. return true;
  42208. },
  42209. //>>excludeStart("ide", pragmas.excludeIdeData);
  42210. args: [],
  42211. source: "isInlined\x0a\x09^ true",
  42212. referencedClasses: [],
  42213. //>>excludeEnd("ide");
  42214. messageSends: []
  42215. }),
  42216. $globals.IRInlinedSequence);
  42217. $core.addClass('IRInliner', $globals.IRVisitor, [], 'Compiler-Inlining');
  42218. //>>excludeStart("ide", pragmas.excludeIdeData);
  42219. $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`";
  42220. //>>excludeEnd("ide");
  42221. $core.addMethod(
  42222. $core.method({
  42223. selector: "assignmentInliner",
  42224. protocol: 'factory',
  42225. fn: function (){
  42226. var self=this;
  42227. function $IRAssignmentInliner(){return $globals.IRAssignmentInliner||(typeof IRAssignmentInliner=="undefined"?nil:IRAssignmentInliner)}
  42228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42229. return $core.withContext(function($ctx1) {
  42230. //>>excludeEnd("ctx");
  42231. var $2,$3,$1;
  42232. $2=$recv($IRAssignmentInliner())._new();
  42233. $recv($2)._translator_(self);
  42234. $3=$recv($2)._yourself();
  42235. $1=$3;
  42236. return $1;
  42237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42238. }, function($ctx1) {$ctx1.fill(self,"assignmentInliner",{},$globals.IRInliner)});
  42239. //>>excludeEnd("ctx");
  42240. },
  42241. //>>excludeStart("ide", pragmas.excludeIdeData);
  42242. args: [],
  42243. source: "assignmentInliner\x0a\x09^ IRAssignmentInliner new\x0a\x09\x09translator: self;\x0a\x09\x09yourself",
  42244. referencedClasses: ["IRAssignmentInliner"],
  42245. //>>excludeEnd("ide");
  42246. messageSends: ["translator:", "new", "yourself"]
  42247. }),
  42248. $globals.IRInliner);
  42249. $core.addMethod(
  42250. $core.method({
  42251. selector: "returnInliner",
  42252. protocol: 'factory',
  42253. fn: function (){
  42254. var self=this;
  42255. function $IRReturnInliner(){return $globals.IRReturnInliner||(typeof IRReturnInliner=="undefined"?nil:IRReturnInliner)}
  42256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42257. return $core.withContext(function($ctx1) {
  42258. //>>excludeEnd("ctx");
  42259. var $2,$3,$1;
  42260. $2=$recv($IRReturnInliner())._new();
  42261. $recv($2)._translator_(self);
  42262. $3=$recv($2)._yourself();
  42263. $1=$3;
  42264. return $1;
  42265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42266. }, function($ctx1) {$ctx1.fill(self,"returnInliner",{},$globals.IRInliner)});
  42267. //>>excludeEnd("ctx");
  42268. },
  42269. //>>excludeStart("ide", pragmas.excludeIdeData);
  42270. args: [],
  42271. source: "returnInliner\x0a\x09^ IRReturnInliner new\x0a\x09\x09translator: self;\x0a\x09\x09yourself",
  42272. referencedClasses: ["IRReturnInliner"],
  42273. //>>excludeEnd("ide");
  42274. messageSends: ["translator:", "new", "yourself"]
  42275. }),
  42276. $globals.IRInliner);
  42277. $core.addMethod(
  42278. $core.method({
  42279. selector: "sendInliner",
  42280. protocol: 'factory',
  42281. fn: function (){
  42282. var self=this;
  42283. function $IRSendInliner(){return $globals.IRSendInliner||(typeof IRSendInliner=="undefined"?nil:IRSendInliner)}
  42284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42285. return $core.withContext(function($ctx1) {
  42286. //>>excludeEnd("ctx");
  42287. var $2,$3,$1;
  42288. $2=$recv($IRSendInliner())._new();
  42289. $recv($2)._translator_(self);
  42290. $3=$recv($2)._yourself();
  42291. $1=$3;
  42292. return $1;
  42293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42294. }, function($ctx1) {$ctx1.fill(self,"sendInliner",{},$globals.IRInliner)});
  42295. //>>excludeEnd("ctx");
  42296. },
  42297. //>>excludeStart("ide", pragmas.excludeIdeData);
  42298. args: [],
  42299. source: "sendInliner\x0a\x09^ IRSendInliner new\x0a\x09\x09translator: self;\x0a\x09\x09yourself",
  42300. referencedClasses: ["IRSendInliner"],
  42301. //>>excludeEnd("ide");
  42302. messageSends: ["translator:", "new", "yourself"]
  42303. }),
  42304. $globals.IRInliner);
  42305. $core.addMethod(
  42306. $core.method({
  42307. selector: "shouldInlineAssignment:",
  42308. protocol: 'testing',
  42309. fn: function (anIRAssignment){
  42310. var self=this;
  42311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42312. return $core.withContext(function($ctx1) {
  42313. //>>excludeEnd("ctx");
  42314. var $4,$3,$2,$1;
  42315. $1=$recv($recv($recv(anIRAssignment)._isInlined())._not())._and_((function(){
  42316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42317. return $core.withContext(function($ctx2) {
  42318. //>>excludeEnd("ctx");
  42319. $4=$recv(anIRAssignment)._instructions();
  42320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42321. $ctx2.sendIdx["instructions"]=1;
  42322. //>>excludeEnd("ctx");
  42323. $3=$recv($4)._last();
  42324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42325. $ctx2.sendIdx["last"]=1;
  42326. //>>excludeEnd("ctx");
  42327. $2=$recv($3)._isSend();
  42328. return $recv($2)._and_((function(){
  42329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42330. return $core.withContext(function($ctx3) {
  42331. //>>excludeEnd("ctx");
  42332. return self._shouldInlineSend_($recv($recv(anIRAssignment)._instructions())._last());
  42333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42334. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  42335. //>>excludeEnd("ctx");
  42336. }));
  42337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42338. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42339. //>>excludeEnd("ctx");
  42340. }));
  42341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42342. $ctx1.sendIdx["and:"]=1;
  42343. //>>excludeEnd("ctx");
  42344. return $1;
  42345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42346. }, function($ctx1) {$ctx1.fill(self,"shouldInlineAssignment:",{anIRAssignment:anIRAssignment},$globals.IRInliner)});
  42347. //>>excludeEnd("ctx");
  42348. },
  42349. //>>excludeStart("ide", pragmas.excludeIdeData);
  42350. args: ["anIRAssignment"],
  42351. source: "shouldInlineAssignment: anIRAssignment\x0a\x09^ anIRAssignment isInlined not and: [\x0a\x09\x09anIRAssignment instructions last isSend and: [\x0a\x09\x09\x09self shouldInlineSend: (anIRAssignment instructions last) ]]",
  42352. referencedClasses: [],
  42353. //>>excludeEnd("ide");
  42354. messageSends: ["and:", "not", "isInlined", "isSend", "last", "instructions", "shouldInlineSend:"]
  42355. }),
  42356. $globals.IRInliner);
  42357. $core.addMethod(
  42358. $core.method({
  42359. selector: "shouldInlineReturn:",
  42360. protocol: 'testing',
  42361. fn: function (anIRReturn){
  42362. var self=this;
  42363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42364. return $core.withContext(function($ctx1) {
  42365. //>>excludeEnd("ctx");
  42366. var $4,$3,$2,$1;
  42367. $1=$recv($recv($recv(anIRReturn)._isInlined())._not())._and_((function(){
  42368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42369. return $core.withContext(function($ctx2) {
  42370. //>>excludeEnd("ctx");
  42371. $4=$recv(anIRReturn)._instructions();
  42372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42373. $ctx2.sendIdx["instructions"]=1;
  42374. //>>excludeEnd("ctx");
  42375. $3=$recv($4)._first();
  42376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42377. $ctx2.sendIdx["first"]=1;
  42378. //>>excludeEnd("ctx");
  42379. $2=$recv($3)._isSend();
  42380. return $recv($2)._and_((function(){
  42381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42382. return $core.withContext(function($ctx3) {
  42383. //>>excludeEnd("ctx");
  42384. return self._shouldInlineSend_($recv($recv(anIRReturn)._instructions())._first());
  42385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42386. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  42387. //>>excludeEnd("ctx");
  42388. }));
  42389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42390. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42391. //>>excludeEnd("ctx");
  42392. }));
  42393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42394. $ctx1.sendIdx["and:"]=1;
  42395. //>>excludeEnd("ctx");
  42396. return $1;
  42397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42398. }, function($ctx1) {$ctx1.fill(self,"shouldInlineReturn:",{anIRReturn:anIRReturn},$globals.IRInliner)});
  42399. //>>excludeEnd("ctx");
  42400. },
  42401. //>>excludeStart("ide", pragmas.excludeIdeData);
  42402. args: ["anIRReturn"],
  42403. source: "shouldInlineReturn: anIRReturn\x0a\x09^ anIRReturn isInlined not and: [\x0a\x09\x09anIRReturn instructions first isSend and: [\x0a\x09\x09\x09self shouldInlineSend: (anIRReturn instructions first) ]]",
  42404. referencedClasses: [],
  42405. //>>excludeEnd("ide");
  42406. messageSends: ["and:", "not", "isInlined", "isSend", "first", "instructions", "shouldInlineSend:"]
  42407. }),
  42408. $globals.IRInliner);
  42409. $core.addMethod(
  42410. $core.method({
  42411. selector: "shouldInlineSend:",
  42412. protocol: 'testing',
  42413. fn: function (anIRSend){
  42414. var self=this;
  42415. function $IRSendInliner(){return $globals.IRSendInliner||(typeof IRSendInliner=="undefined"?nil:IRSendInliner)}
  42416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42417. return $core.withContext(function($ctx1) {
  42418. //>>excludeEnd("ctx");
  42419. var $1;
  42420. $1=$recv($recv($recv(anIRSend)._isInlined())._not())._and_((function(){
  42421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42422. return $core.withContext(function($ctx2) {
  42423. //>>excludeEnd("ctx");
  42424. return $recv($IRSendInliner())._shouldInline_(anIRSend);
  42425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42426. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42427. //>>excludeEnd("ctx");
  42428. }));
  42429. return $1;
  42430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42431. }, function($ctx1) {$ctx1.fill(self,"shouldInlineSend:",{anIRSend:anIRSend},$globals.IRInliner)});
  42432. //>>excludeEnd("ctx");
  42433. },
  42434. //>>excludeStart("ide", pragmas.excludeIdeData);
  42435. args: ["anIRSend"],
  42436. source: "shouldInlineSend: anIRSend\x0a\x09^ anIRSend isInlined not and: [\x0a\x09\x09IRSendInliner shouldInline: anIRSend ]",
  42437. referencedClasses: ["IRSendInliner"],
  42438. //>>excludeEnd("ide");
  42439. messageSends: ["and:", "not", "isInlined", "shouldInline:"]
  42440. }),
  42441. $globals.IRInliner);
  42442. $core.addMethod(
  42443. $core.method({
  42444. selector: "transformNonLocalReturn:",
  42445. protocol: 'visiting',
  42446. fn: function (anIRNonLocalReturn){
  42447. var self=this;
  42448. var localReturn;
  42449. function $IRReturn(){return $globals.IRReturn||(typeof IRReturn=="undefined"?nil:IRReturn)}
  42450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42451. return $core.withContext(function($ctx1) {
  42452. //>>excludeEnd("ctx");
  42453. var $2,$1,$4,$3,$5,$6,$7,$8,$9;
  42454. $2=$recv(anIRNonLocalReturn)._scope();
  42455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42456. $ctx1.sendIdx["scope"]=1;
  42457. //>>excludeEnd("ctx");
  42458. $1=$recv($2)._canInlineNonLocalReturns();
  42459. if($core.assert($1)){
  42460. $4=$recv(anIRNonLocalReturn)._scope();
  42461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42462. $ctx1.sendIdx["scope"]=2;
  42463. //>>excludeEnd("ctx");
  42464. $3=$recv($4)._methodScope();
  42465. $5=$recv(anIRNonLocalReturn)._scope();
  42466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42467. $ctx1.sendIdx["scope"]=3;
  42468. //>>excludeEnd("ctx");
  42469. $recv($3)._removeNonLocalReturn_($5);
  42470. $6=$recv($IRReturn())._new();
  42471. $recv($6)._scope_($recv(anIRNonLocalReturn)._scope());
  42472. $7=$recv($6)._yourself();
  42473. localReturn=$7;
  42474. localReturn;
  42475. $recv($recv(anIRNonLocalReturn)._instructions())._do_((function(each){
  42476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42477. return $core.withContext(function($ctx2) {
  42478. //>>excludeEnd("ctx");
  42479. return $recv(localReturn)._add_(each);
  42480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42481. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  42482. //>>excludeEnd("ctx");
  42483. }));
  42484. $recv(anIRNonLocalReturn)._replaceWith_(localReturn);
  42485. $8=localReturn;
  42486. return $8;
  42487. };
  42488. $9=(
  42489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42490. $ctx1.supercall = true,
  42491. //>>excludeEnd("ctx");
  42492. $globals.IRInliner.superclass.fn.prototype._visitIRNonLocalReturn_.apply($recv(self), [anIRNonLocalReturn]));
  42493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42494. $ctx1.supercall = false;
  42495. //>>excludeEnd("ctx");;
  42496. return $9;
  42497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42498. }, function($ctx1) {$ctx1.fill(self,"transformNonLocalReturn:",{anIRNonLocalReturn:anIRNonLocalReturn,localReturn:localReturn},$globals.IRInliner)});
  42499. //>>excludeEnd("ctx");
  42500. },
  42501. //>>excludeStart("ide", pragmas.excludeIdeData);
  42502. args: ["anIRNonLocalReturn"],
  42503. 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",
  42504. referencedClasses: ["IRReturn"],
  42505. //>>excludeEnd("ide");
  42506. messageSends: ["ifTrue:", "canInlineNonLocalReturns", "scope", "removeNonLocalReturn:", "methodScope", "scope:", "new", "yourself", "do:", "instructions", "add:", "replaceWith:", "visitIRNonLocalReturn:"]
  42507. }),
  42508. $globals.IRInliner);
  42509. $core.addMethod(
  42510. $core.method({
  42511. selector: "visitIRAssignment:",
  42512. protocol: 'visiting',
  42513. fn: function (anIRAssignment){
  42514. var self=this;
  42515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42516. return $core.withContext(function($ctx1) {
  42517. //>>excludeEnd("ctx");
  42518. var $2,$1;
  42519. $2=self._shouldInlineAssignment_(anIRAssignment);
  42520. if($core.assert($2)){
  42521. $1=$recv(self._assignmentInliner())._inlineAssignment_(anIRAssignment);
  42522. } else {
  42523. $1=(
  42524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42525. $ctx1.supercall = true,
  42526. //>>excludeEnd("ctx");
  42527. $globals.IRInliner.superclass.fn.prototype._visitIRAssignment_.apply($recv(self), [anIRAssignment]));
  42528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42529. $ctx1.supercall = false;
  42530. //>>excludeEnd("ctx");;
  42531. };
  42532. return $1;
  42533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42534. }, function($ctx1) {$ctx1.fill(self,"visitIRAssignment:",{anIRAssignment:anIRAssignment},$globals.IRInliner)});
  42535. //>>excludeEnd("ctx");
  42536. },
  42537. //>>excludeStart("ide", pragmas.excludeIdeData);
  42538. args: ["anIRAssignment"],
  42539. source: "visitIRAssignment: anIRAssignment\x0a\x09^ (self shouldInlineAssignment: anIRAssignment)\x0a\x09\x09ifTrue: [ self assignmentInliner inlineAssignment: anIRAssignment ]\x0a\x09\x09ifFalse: [ super visitIRAssignment: anIRAssignment ]",
  42540. referencedClasses: [],
  42541. //>>excludeEnd("ide");
  42542. messageSends: ["ifTrue:ifFalse:", "shouldInlineAssignment:", "inlineAssignment:", "assignmentInliner", "visitIRAssignment:"]
  42543. }),
  42544. $globals.IRInliner);
  42545. $core.addMethod(
  42546. $core.method({
  42547. selector: "visitIRNonLocalReturn:",
  42548. protocol: 'visiting',
  42549. fn: function (anIRNonLocalReturn){
  42550. var self=this;
  42551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42552. return $core.withContext(function($ctx1) {
  42553. //>>excludeEnd("ctx");
  42554. var $1;
  42555. $1=self._transformNonLocalReturn_(anIRNonLocalReturn);
  42556. return $1;
  42557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42558. }, function($ctx1) {$ctx1.fill(self,"visitIRNonLocalReturn:",{anIRNonLocalReturn:anIRNonLocalReturn},$globals.IRInliner)});
  42559. //>>excludeEnd("ctx");
  42560. },
  42561. //>>excludeStart("ide", pragmas.excludeIdeData);
  42562. args: ["anIRNonLocalReturn"],
  42563. source: "visitIRNonLocalReturn: anIRNonLocalReturn\x0a\x09^ self transformNonLocalReturn: anIRNonLocalReturn",
  42564. referencedClasses: [],
  42565. //>>excludeEnd("ide");
  42566. messageSends: ["transformNonLocalReturn:"]
  42567. }),
  42568. $globals.IRInliner);
  42569. $core.addMethod(
  42570. $core.method({
  42571. selector: "visitIRReturn:",
  42572. protocol: 'visiting',
  42573. fn: function (anIRReturn){
  42574. var self=this;
  42575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42576. return $core.withContext(function($ctx1) {
  42577. //>>excludeEnd("ctx");
  42578. var $2,$1;
  42579. $2=self._shouldInlineReturn_(anIRReturn);
  42580. if($core.assert($2)){
  42581. $1=$recv(self._returnInliner())._inlineReturn_(anIRReturn);
  42582. } else {
  42583. $1=(
  42584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42585. $ctx1.supercall = true,
  42586. //>>excludeEnd("ctx");
  42587. $globals.IRInliner.superclass.fn.prototype._visitIRReturn_.apply($recv(self), [anIRReturn]));
  42588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42589. $ctx1.supercall = false;
  42590. //>>excludeEnd("ctx");;
  42591. };
  42592. return $1;
  42593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42594. }, function($ctx1) {$ctx1.fill(self,"visitIRReturn:",{anIRReturn:anIRReturn},$globals.IRInliner)});
  42595. //>>excludeEnd("ctx");
  42596. },
  42597. //>>excludeStart("ide", pragmas.excludeIdeData);
  42598. args: ["anIRReturn"],
  42599. source: "visitIRReturn: anIRReturn\x0a\x09^ (self shouldInlineReturn: anIRReturn)\x0a\x09\x09ifTrue: [ self returnInliner inlineReturn: anIRReturn ]\x0a\x09\x09ifFalse: [ super visitIRReturn: anIRReturn ]",
  42600. referencedClasses: [],
  42601. //>>excludeEnd("ide");
  42602. messageSends: ["ifTrue:ifFalse:", "shouldInlineReturn:", "inlineReturn:", "returnInliner", "visitIRReturn:"]
  42603. }),
  42604. $globals.IRInliner);
  42605. $core.addMethod(
  42606. $core.method({
  42607. selector: "visitIRSend:",
  42608. protocol: 'visiting',
  42609. fn: function (anIRSend){
  42610. var self=this;
  42611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42612. return $core.withContext(function($ctx1) {
  42613. //>>excludeEnd("ctx");
  42614. var $2,$1;
  42615. $2=self._shouldInlineSend_(anIRSend);
  42616. if($core.assert($2)){
  42617. $1=$recv(self._sendInliner())._inlineSend_(anIRSend);
  42618. } else {
  42619. $1=(
  42620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42621. $ctx1.supercall = true,
  42622. //>>excludeEnd("ctx");
  42623. $globals.IRInliner.superclass.fn.prototype._visitIRSend_.apply($recv(self), [anIRSend]));
  42624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42625. $ctx1.supercall = false;
  42626. //>>excludeEnd("ctx");;
  42627. };
  42628. return $1;
  42629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42630. }, function($ctx1) {$ctx1.fill(self,"visitIRSend:",{anIRSend:anIRSend},$globals.IRInliner)});
  42631. //>>excludeEnd("ctx");
  42632. },
  42633. //>>excludeStart("ide", pragmas.excludeIdeData);
  42634. args: ["anIRSend"],
  42635. source: "visitIRSend: anIRSend\x0a\x09^ (self shouldInlineSend: anIRSend)\x0a\x09\x09ifTrue: [ self sendInliner inlineSend: anIRSend ]\x0a\x09\x09ifFalse: [ super visitIRSend: anIRSend ]",
  42636. referencedClasses: [],
  42637. //>>excludeEnd("ide");
  42638. messageSends: ["ifTrue:ifFalse:", "shouldInlineSend:", "inlineSend:", "sendInliner", "visitIRSend:"]
  42639. }),
  42640. $globals.IRInliner);
  42641. $core.addClass('IRInliningJSTranslator', $globals.IRJSTranslator, [], 'Compiler-Inlining');
  42642. //>>excludeStart("ide", pragmas.excludeIdeData);
  42643. $globals.IRInliningJSTranslator.comment="I am a specialized JavaScript translator able to write inlined IR instructions to JavaScript stream (`JSStream` instance).";
  42644. //>>excludeEnd("ide");
  42645. $core.addMethod(
  42646. $core.method({
  42647. selector: "visitIRInlinedAssignment:",
  42648. protocol: 'visiting',
  42649. fn: function (anIRInlinedAssignment){
  42650. var self=this;
  42651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42652. return $core.withContext(function($ctx1) {
  42653. //>>excludeEnd("ctx");
  42654. self._visit_($recv($recv(anIRInlinedAssignment)._instructions())._last());
  42655. return self;
  42656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42657. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedAssignment:",{anIRInlinedAssignment:anIRInlinedAssignment},$globals.IRInliningJSTranslator)});
  42658. //>>excludeEnd("ctx");
  42659. },
  42660. //>>excludeStart("ide", pragmas.excludeIdeData);
  42661. args: ["anIRInlinedAssignment"],
  42662. source: "visitIRInlinedAssignment: anIRInlinedAssignment\x0a\x09self visit: anIRInlinedAssignment instructions last",
  42663. referencedClasses: [],
  42664. //>>excludeEnd("ide");
  42665. messageSends: ["visit:", "last", "instructions"]
  42666. }),
  42667. $globals.IRInliningJSTranslator);
  42668. $core.addMethod(
  42669. $core.method({
  42670. selector: "visitIRInlinedClosure:",
  42671. protocol: 'visiting',
  42672. fn: function (anIRInlinedClosure){
  42673. var self=this;
  42674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42675. return $core.withContext(function($ctx1) {
  42676. //>>excludeEnd("ctx");
  42677. $recv(self._stream())._nextPutVars_($recv($recv(anIRInlinedClosure)._tempDeclarations())._collect_((function(each){
  42678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42679. return $core.withContext(function($ctx2) {
  42680. //>>excludeEnd("ctx");
  42681. return $recv($recv(each)._name())._asVariableName();
  42682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42683. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  42684. //>>excludeEnd("ctx");
  42685. })));
  42686. $recv($recv(anIRInlinedClosure)._instructions())._do_((function(each){
  42687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42688. return $core.withContext(function($ctx2) {
  42689. //>>excludeEnd("ctx");
  42690. return self._visit_(each);
  42691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42692. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  42693. //>>excludeEnd("ctx");
  42694. }));
  42695. return self;
  42696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42697. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedClosure:",{anIRInlinedClosure:anIRInlinedClosure},$globals.IRInliningJSTranslator)});
  42698. //>>excludeEnd("ctx");
  42699. },
  42700. //>>excludeStart("ide", pragmas.excludeIdeData);
  42701. args: ["anIRInlinedClosure"],
  42702. 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 ]",
  42703. referencedClasses: [],
  42704. //>>excludeEnd("ide");
  42705. messageSends: ["nextPutVars:", "stream", "collect:", "tempDeclarations", "asVariableName", "name", "do:", "instructions", "visit:"]
  42706. }),
  42707. $globals.IRInliningJSTranslator);
  42708. $core.addMethod(
  42709. $core.method({
  42710. selector: "visitIRInlinedIfFalse:",
  42711. protocol: 'visiting',
  42712. fn: function (anIRInlinedIfFalse){
  42713. var self=this;
  42714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42715. return $core.withContext(function($ctx1) {
  42716. //>>excludeEnd("ctx");
  42717. var $1,$2,$4,$3;
  42718. $1=self._stream();
  42719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42720. $ctx1.sendIdx["stream"]=1;
  42721. //>>excludeEnd("ctx");
  42722. $recv($1)._nextPutIf_with_((function(){
  42723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42724. return $core.withContext(function($ctx2) {
  42725. //>>excludeEnd("ctx");
  42726. $2=self._stream();
  42727. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42728. $ctx2.sendIdx["stream"]=2;
  42729. //>>excludeEnd("ctx");
  42730. $recv($2)._nextPutAll_("!$core.assert(");
  42731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42732. $ctx2.sendIdx["nextPutAll:"]=1;
  42733. //>>excludeEnd("ctx");
  42734. $4=$recv(anIRInlinedIfFalse)._instructions();
  42735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42736. $ctx2.sendIdx["instructions"]=1;
  42737. //>>excludeEnd("ctx");
  42738. $3=$recv($4)._first();
  42739. self._visit_($3);
  42740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42741. $ctx2.sendIdx["visit:"]=1;
  42742. //>>excludeEnd("ctx");
  42743. return $recv(self._stream())._nextPutAll_(")");
  42744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42745. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42746. //>>excludeEnd("ctx");
  42747. }),(function(){
  42748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42749. return $core.withContext(function($ctx2) {
  42750. //>>excludeEnd("ctx");
  42751. return self._visit_($recv($recv(anIRInlinedIfFalse)._instructions())._last());
  42752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42753. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  42754. //>>excludeEnd("ctx");
  42755. }));
  42756. return self;
  42757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42758. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedIfFalse:",{anIRInlinedIfFalse:anIRInlinedIfFalse},$globals.IRInliningJSTranslator)});
  42759. //>>excludeEnd("ctx");
  42760. },
  42761. //>>excludeStart("ide", pragmas.excludeIdeData);
  42762. args: ["anIRInlinedIfFalse"],
  42763. 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 ]",
  42764. referencedClasses: [],
  42765. //>>excludeEnd("ide");
  42766. messageSends: ["nextPutIf:with:", "stream", "nextPutAll:", "visit:", "first", "instructions", "last"]
  42767. }),
  42768. $globals.IRInliningJSTranslator);
  42769. $core.addMethod(
  42770. $core.method({
  42771. selector: "visitIRInlinedIfNilIfNotNil:",
  42772. protocol: 'visiting',
  42773. fn: function (anIRInlinedIfNilIfNotNil){
  42774. var self=this;
  42775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42776. return $core.withContext(function($ctx1) {
  42777. //>>excludeEnd("ctx");
  42778. var $1,$2,$3,$5,$4,$7,$6;
  42779. $1=self._stream();
  42780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42781. $ctx1.sendIdx["stream"]=1;
  42782. //>>excludeEnd("ctx");
  42783. $recv($1)._nextPutIfElse_with_with_((function(){
  42784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42785. return $core.withContext(function($ctx2) {
  42786. //>>excludeEnd("ctx");
  42787. $2=self._stream();
  42788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42789. $ctx2.sendIdx["stream"]=2;
  42790. //>>excludeEnd("ctx");
  42791. $3=$recv("(".__comma($recv(anIRInlinedIfNilIfNotNil)._receiverInternalVariableName())).__comma(" = ");
  42792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42793. $ctx2.sendIdx[","]=1;
  42794. //>>excludeEnd("ctx");
  42795. $recv($2)._nextPutAll_($3);
  42796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42797. $ctx2.sendIdx["nextPutAll:"]=1;
  42798. //>>excludeEnd("ctx");
  42799. $5=$recv(anIRInlinedIfNilIfNotNil)._instructions();
  42800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42801. $ctx2.sendIdx["instructions"]=1;
  42802. //>>excludeEnd("ctx");
  42803. $4=$recv($5)._first();
  42804. self._visit_($4);
  42805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42806. $ctx2.sendIdx["visit:"]=1;
  42807. //>>excludeEnd("ctx");
  42808. return $recv(self._stream())._nextPutAll_(") == null || $receiver.isNil");
  42809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42810. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42811. //>>excludeEnd("ctx");
  42812. }),(function(){
  42813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42814. return $core.withContext(function($ctx2) {
  42815. //>>excludeEnd("ctx");
  42816. $7=$recv(anIRInlinedIfNilIfNotNil)._instructions();
  42817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42818. $ctx2.sendIdx["instructions"]=2;
  42819. //>>excludeEnd("ctx");
  42820. $6=$recv($7)._second();
  42821. return self._visit_($6);
  42822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42823. $ctx2.sendIdx["visit:"]=2;
  42824. //>>excludeEnd("ctx");
  42825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42826. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  42827. //>>excludeEnd("ctx");
  42828. }),(function(){
  42829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42830. return $core.withContext(function($ctx2) {
  42831. //>>excludeEnd("ctx");
  42832. return self._visit_($recv($recv(anIRInlinedIfNilIfNotNil)._instructions())._third());
  42833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42834. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  42835. //>>excludeEnd("ctx");
  42836. }));
  42837. return self;
  42838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42839. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedIfNilIfNotNil:",{anIRInlinedIfNilIfNotNil:anIRInlinedIfNilIfNotNil},$globals.IRInliningJSTranslator)});
  42840. //>>excludeEnd("ctx");
  42841. },
  42842. //>>excludeStart("ide", pragmas.excludeIdeData);
  42843. args: ["anIRInlinedIfNilIfNotNil"],
  42844. 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 ]",
  42845. referencedClasses: [],
  42846. //>>excludeEnd("ide");
  42847. messageSends: ["nextPutIfElse:with:with:", "stream", "nextPutAll:", ",", "receiverInternalVariableName", "visit:", "first", "instructions", "second", "third"]
  42848. }),
  42849. $globals.IRInliningJSTranslator);
  42850. $core.addMethod(
  42851. $core.method({
  42852. selector: "visitIRInlinedIfTrue:",
  42853. protocol: 'visiting',
  42854. fn: function (anIRInlinedIfTrue){
  42855. var self=this;
  42856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42857. return $core.withContext(function($ctx1) {
  42858. //>>excludeEnd("ctx");
  42859. var $1,$2,$4,$3;
  42860. $1=self._stream();
  42861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42862. $ctx1.sendIdx["stream"]=1;
  42863. //>>excludeEnd("ctx");
  42864. $recv($1)._nextPutIf_with_((function(){
  42865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42866. return $core.withContext(function($ctx2) {
  42867. //>>excludeEnd("ctx");
  42868. $2=self._stream();
  42869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42870. $ctx2.sendIdx["stream"]=2;
  42871. //>>excludeEnd("ctx");
  42872. $recv($2)._nextPutAll_("$core.assert(");
  42873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42874. $ctx2.sendIdx["nextPutAll:"]=1;
  42875. //>>excludeEnd("ctx");
  42876. $4=$recv(anIRInlinedIfTrue)._instructions();
  42877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42878. $ctx2.sendIdx["instructions"]=1;
  42879. //>>excludeEnd("ctx");
  42880. $3=$recv($4)._first();
  42881. self._visit_($3);
  42882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42883. $ctx2.sendIdx["visit:"]=1;
  42884. //>>excludeEnd("ctx");
  42885. return $recv(self._stream())._nextPutAll_(")");
  42886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42887. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42888. //>>excludeEnd("ctx");
  42889. }),(function(){
  42890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42891. return $core.withContext(function($ctx2) {
  42892. //>>excludeEnd("ctx");
  42893. return self._visit_($recv($recv(anIRInlinedIfTrue)._instructions())._last());
  42894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42895. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  42896. //>>excludeEnd("ctx");
  42897. }));
  42898. return self;
  42899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42900. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedIfTrue:",{anIRInlinedIfTrue:anIRInlinedIfTrue},$globals.IRInliningJSTranslator)});
  42901. //>>excludeEnd("ctx");
  42902. },
  42903. //>>excludeStart("ide", pragmas.excludeIdeData);
  42904. args: ["anIRInlinedIfTrue"],
  42905. 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 ]",
  42906. referencedClasses: [],
  42907. //>>excludeEnd("ide");
  42908. messageSends: ["nextPutIf:with:", "stream", "nextPutAll:", "visit:", "first", "instructions", "last"]
  42909. }),
  42910. $globals.IRInliningJSTranslator);
  42911. $core.addMethod(
  42912. $core.method({
  42913. selector: "visitIRInlinedIfTrueIfFalse:",
  42914. protocol: 'visiting',
  42915. fn: function (anIRInlinedIfTrueIfFalse){
  42916. var self=this;
  42917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42918. return $core.withContext(function($ctx1) {
  42919. //>>excludeEnd("ctx");
  42920. var $1,$2,$4,$3,$6,$5;
  42921. $1=self._stream();
  42922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42923. $ctx1.sendIdx["stream"]=1;
  42924. //>>excludeEnd("ctx");
  42925. $recv($1)._nextPutIfElse_with_with_((function(){
  42926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42927. return $core.withContext(function($ctx2) {
  42928. //>>excludeEnd("ctx");
  42929. $2=self._stream();
  42930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42931. $ctx2.sendIdx["stream"]=2;
  42932. //>>excludeEnd("ctx");
  42933. $recv($2)._nextPutAll_("$core.assert(");
  42934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42935. $ctx2.sendIdx["nextPutAll:"]=1;
  42936. //>>excludeEnd("ctx");
  42937. $4=$recv(anIRInlinedIfTrueIfFalse)._instructions();
  42938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42939. $ctx2.sendIdx["instructions"]=1;
  42940. //>>excludeEnd("ctx");
  42941. $3=$recv($4)._first();
  42942. self._visit_($3);
  42943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42944. $ctx2.sendIdx["visit:"]=1;
  42945. //>>excludeEnd("ctx");
  42946. return $recv(self._stream())._nextPutAll_(")");
  42947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42948. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42949. //>>excludeEnd("ctx");
  42950. }),(function(){
  42951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42952. return $core.withContext(function($ctx2) {
  42953. //>>excludeEnd("ctx");
  42954. $6=$recv(anIRInlinedIfTrueIfFalse)._instructions();
  42955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42956. $ctx2.sendIdx["instructions"]=2;
  42957. //>>excludeEnd("ctx");
  42958. $5=$recv($6)._second();
  42959. return self._visit_($5);
  42960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42961. $ctx2.sendIdx["visit:"]=2;
  42962. //>>excludeEnd("ctx");
  42963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42964. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  42965. //>>excludeEnd("ctx");
  42966. }),(function(){
  42967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42968. return $core.withContext(function($ctx2) {
  42969. //>>excludeEnd("ctx");
  42970. return self._visit_($recv($recv(anIRInlinedIfTrueIfFalse)._instructions())._third());
  42971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42972. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  42973. //>>excludeEnd("ctx");
  42974. }));
  42975. return self;
  42976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42977. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedIfTrueIfFalse:",{anIRInlinedIfTrueIfFalse:anIRInlinedIfTrueIfFalse},$globals.IRInliningJSTranslator)});
  42978. //>>excludeEnd("ctx");
  42979. },
  42980. //>>excludeStart("ide", pragmas.excludeIdeData);
  42981. args: ["anIRInlinedIfTrueIfFalse"],
  42982. 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 ]",
  42983. referencedClasses: [],
  42984. //>>excludeEnd("ide");
  42985. messageSends: ["nextPutIfElse:with:with:", "stream", "nextPutAll:", "visit:", "first", "instructions", "second", "third"]
  42986. }),
  42987. $globals.IRInliningJSTranslator);
  42988. $core.addMethod(
  42989. $core.method({
  42990. selector: "visitIRInlinedNonLocalReturn:",
  42991. protocol: 'visiting',
  42992. fn: function (anIRInlinedReturn){
  42993. var self=this;
  42994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42995. return $core.withContext(function($ctx1) {
  42996. //>>excludeEnd("ctx");
  42997. var $1;
  42998. $1=self._stream();
  42999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43000. $ctx1.sendIdx["stream"]=1;
  43001. //>>excludeEnd("ctx");
  43002. $recv($1)._nextPutStatementWith_((function(){
  43003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43004. return $core.withContext(function($ctx2) {
  43005. //>>excludeEnd("ctx");
  43006. return self._visit_($recv($recv(anIRInlinedReturn)._instructions())._last());
  43007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43008. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  43009. //>>excludeEnd("ctx");
  43010. }));
  43011. $recv(self._stream())._nextPutNonLocalReturnWith_((function(){
  43012. }));
  43013. return self;
  43014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43015. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedNonLocalReturn:",{anIRInlinedReturn:anIRInlinedReturn},$globals.IRInliningJSTranslator)});
  43016. //>>excludeEnd("ctx");
  43017. },
  43018. //>>excludeStart("ide", pragmas.excludeIdeData);
  43019. args: ["anIRInlinedReturn"],
  43020. source: "visitIRInlinedNonLocalReturn: anIRInlinedReturn\x0a\x09self stream nextPutStatementWith: [\x0a\x09\x09self visit: anIRInlinedReturn instructions last ].\x0a\x09self stream nextPutNonLocalReturnWith: [ ]",
  43021. referencedClasses: [],
  43022. //>>excludeEnd("ide");
  43023. messageSends: ["nextPutStatementWith:", "stream", "visit:", "last", "instructions", "nextPutNonLocalReturnWith:"]
  43024. }),
  43025. $globals.IRInliningJSTranslator);
  43026. $core.addMethod(
  43027. $core.method({
  43028. selector: "visitIRInlinedReturn:",
  43029. protocol: 'visiting',
  43030. fn: function (anIRInlinedReturn){
  43031. var self=this;
  43032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43033. return $core.withContext(function($ctx1) {
  43034. //>>excludeEnd("ctx");
  43035. self._visit_($recv($recv(anIRInlinedReturn)._instructions())._last());
  43036. return self;
  43037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43038. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedReturn:",{anIRInlinedReturn:anIRInlinedReturn},$globals.IRInliningJSTranslator)});
  43039. //>>excludeEnd("ctx");
  43040. },
  43041. //>>excludeStart("ide", pragmas.excludeIdeData);
  43042. args: ["anIRInlinedReturn"],
  43043. source: "visitIRInlinedReturn: anIRInlinedReturn\x0a\x09self visit: anIRInlinedReturn instructions last",
  43044. referencedClasses: [],
  43045. //>>excludeEnd("ide");
  43046. messageSends: ["visit:", "last", "instructions"]
  43047. }),
  43048. $globals.IRInliningJSTranslator);
  43049. $core.addMethod(
  43050. $core.method({
  43051. selector: "visitIRInlinedSequence:",
  43052. protocol: 'visiting',
  43053. fn: function (anIRInlinedSequence){
  43054. var self=this;
  43055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43056. return $core.withContext(function($ctx1) {
  43057. //>>excludeEnd("ctx");
  43058. $recv($recv(anIRInlinedSequence)._instructions())._do_((function(each){
  43059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43060. return $core.withContext(function($ctx2) {
  43061. //>>excludeEnd("ctx");
  43062. return $recv(self._stream())._nextPutStatementWith_((function(){
  43063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43064. return $core.withContext(function($ctx3) {
  43065. //>>excludeEnd("ctx");
  43066. return self._visit_(each);
  43067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43068. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  43069. //>>excludeEnd("ctx");
  43070. }));
  43071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43072. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  43073. //>>excludeEnd("ctx");
  43074. }));
  43075. return self;
  43076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43077. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedSequence:",{anIRInlinedSequence:anIRInlinedSequence},$globals.IRInliningJSTranslator)});
  43078. //>>excludeEnd("ctx");
  43079. },
  43080. //>>excludeStart("ide", pragmas.excludeIdeData);
  43081. args: ["anIRInlinedSequence"],
  43082. source: "visitIRInlinedSequence: anIRInlinedSequence\x0a\x09anIRInlinedSequence instructions do: [ :each |\x0a\x09\x09self stream nextPutStatementWith: [ self visit: each ]]",
  43083. referencedClasses: [],
  43084. //>>excludeEnd("ide");
  43085. messageSends: ["do:", "instructions", "nextPutStatementWith:", "stream", "visit:"]
  43086. }),
  43087. $globals.IRInliningJSTranslator);
  43088. $core.addClass('IRSendInliner', $globals.Object, ['send', 'translator'], 'Compiler-Inlining');
  43089. //>>excludeStart("ide", pragmas.excludeIdeData);
  43090. $globals.IRSendInliner.comment="I inline some message sends and block closure arguments. I heavily rely on #perform: to dispatch inlining methods.";
  43091. //>>excludeEnd("ide");
  43092. $core.addMethod(
  43093. $core.method({
  43094. selector: "ifFalse:",
  43095. protocol: 'inlining',
  43096. fn: function (anIRInstruction){
  43097. var self=this;
  43098. function $IRInlinedIfFalse(){return $globals.IRInlinedIfFalse||(typeof IRInlinedIfFalse=="undefined"?nil:IRInlinedIfFalse)}
  43099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43100. return $core.withContext(function($ctx1) {
  43101. //>>excludeEnd("ctx");
  43102. var $1;
  43103. $1=self._inlinedSend_with_($recv($IRInlinedIfFalse())._new(),anIRInstruction);
  43104. return $1;
  43105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43106. }, function($ctx1) {$ctx1.fill(self,"ifFalse:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner)});
  43107. //>>excludeEnd("ctx");
  43108. },
  43109. //>>excludeStart("ide", pragmas.excludeIdeData);
  43110. args: ["anIRInstruction"],
  43111. source: "ifFalse: anIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfFalse new with: anIRInstruction",
  43112. referencedClasses: ["IRInlinedIfFalse"],
  43113. //>>excludeEnd("ide");
  43114. messageSends: ["inlinedSend:with:", "new"]
  43115. }),
  43116. $globals.IRSendInliner);
  43117. $core.addMethod(
  43118. $core.method({
  43119. selector: "ifFalse:ifTrue:",
  43120. protocol: 'inlining',
  43121. fn: function (anIRInstruction,anotherIRInstruction){
  43122. var self=this;
  43123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43124. return $core.withContext(function($ctx1) {
  43125. //>>excludeEnd("ctx");
  43126. var $1;
  43127. $1=self._perform_withArguments_("ifTrue:ifFalse:",[anotherIRInstruction,anIRInstruction]);
  43128. return $1;
  43129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43130. }, function($ctx1) {$ctx1.fill(self,"ifFalse:ifTrue:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRSendInliner)});
  43131. //>>excludeEnd("ctx");
  43132. },
  43133. //>>excludeStart("ide", pragmas.excludeIdeData);
  43134. args: ["anIRInstruction", "anotherIRInstruction"],
  43135. source: "ifFalse: anIRInstruction ifTrue: anotherIRInstruction\x0a\x09^ self perform: #ifTrue:ifFalse: withArguments: { anotherIRInstruction. anIRInstruction }",
  43136. referencedClasses: [],
  43137. //>>excludeEnd("ide");
  43138. messageSends: ["perform:withArguments:"]
  43139. }),
  43140. $globals.IRSendInliner);
  43141. $core.addMethod(
  43142. $core.method({
  43143. selector: "ifNil:",
  43144. protocol: 'inlining',
  43145. fn: function (anIRInstruction){
  43146. var self=this;
  43147. function $IRInlinedIfNilIfNotNil(){return $globals.IRInlinedIfNilIfNotNil||(typeof IRInlinedIfNilIfNotNil=="undefined"?nil:IRInlinedIfNilIfNotNil)}
  43148. function $IRClosure(){return $globals.IRClosure||(typeof IRClosure=="undefined"?nil:IRClosure)}
  43149. function $IRBlockSequence(){return $globals.IRBlockSequence||(typeof IRBlockSequence=="undefined"?nil:IRBlockSequence)}
  43150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43151. return $core.withContext(function($ctx1) {
  43152. //>>excludeEnd("ctx");
  43153. var $2,$4,$5,$7,$8,$6,$9,$3,$1;
  43154. $2=$recv($IRInlinedIfNilIfNotNil())._new();
  43155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43156. $ctx1.sendIdx["new"]=1;
  43157. //>>excludeEnd("ctx");
  43158. $4=$recv($IRClosure())._new();
  43159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43160. $ctx1.sendIdx["new"]=2;
  43161. //>>excludeEnd("ctx");
  43162. $recv($4)._scope_($recv($recv(anIRInstruction)._scope())._copy());
  43163. $5=$4;
  43164. $7=$recv($IRBlockSequence())._new();
  43165. $recv($7)._add_($recv($recv(self._send())._instructions())._first());
  43166. $8=$recv($7)._yourself();
  43167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43168. $ctx1.sendIdx["yourself"]=1;
  43169. //>>excludeEnd("ctx");
  43170. $6=$8;
  43171. $recv($5)._add_($6);
  43172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43173. $ctx1.sendIdx["add:"]=1;
  43174. //>>excludeEnd("ctx");
  43175. $9=$recv($4)._yourself();
  43176. $3=$9;
  43177. $1=self._inlinedSend_with_with_($2,anIRInstruction,$3);
  43178. return $1;
  43179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43180. }, function($ctx1) {$ctx1.fill(self,"ifNil:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner)});
  43181. //>>excludeEnd("ctx");
  43182. },
  43183. //>>excludeStart("ide", pragmas.excludeIdeData);
  43184. args: ["anIRInstruction"],
  43185. 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)",
  43186. referencedClasses: ["IRInlinedIfNilIfNotNil", "IRClosure", "IRBlockSequence"],
  43187. //>>excludeEnd("ide");
  43188. messageSends: ["inlinedSend:with:with:", "new", "scope:", "copy", "scope", "add:", "first", "instructions", "send", "yourself"]
  43189. }),
  43190. $globals.IRSendInliner);
  43191. $core.addMethod(
  43192. $core.method({
  43193. selector: "ifNil:ifNotNil:",
  43194. protocol: 'inlining',
  43195. fn: function (anIRInstruction,anotherIRInstruction){
  43196. var self=this;
  43197. function $IRInlinedIfNilIfNotNil(){return $globals.IRInlinedIfNilIfNotNil||(typeof IRInlinedIfNilIfNotNil=="undefined"?nil:IRInlinedIfNilIfNotNil)}
  43198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43199. return $core.withContext(function($ctx1) {
  43200. //>>excludeEnd("ctx");
  43201. var $1;
  43202. $1=self._inlinedSend_with_with_($recv($IRInlinedIfNilIfNotNil())._new(),anIRInstruction,anotherIRInstruction);
  43203. return $1;
  43204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43205. }, function($ctx1) {$ctx1.fill(self,"ifNil:ifNotNil:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRSendInliner)});
  43206. //>>excludeEnd("ctx");
  43207. },
  43208. //>>excludeStart("ide", pragmas.excludeIdeData);
  43209. args: ["anIRInstruction", "anotherIRInstruction"],
  43210. source: "ifNil: anIRInstruction ifNotNil: anotherIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfNilIfNotNil new with: anIRInstruction with: anotherIRInstruction",
  43211. referencedClasses: ["IRInlinedIfNilIfNotNil"],
  43212. //>>excludeEnd("ide");
  43213. messageSends: ["inlinedSend:with:with:", "new"]
  43214. }),
  43215. $globals.IRSendInliner);
  43216. $core.addMethod(
  43217. $core.method({
  43218. selector: "ifNotNil:",
  43219. protocol: 'inlining',
  43220. fn: function (anIRInstruction){
  43221. var self=this;
  43222. function $IRInlinedIfNilIfNotNil(){return $globals.IRInlinedIfNilIfNotNil||(typeof IRInlinedIfNilIfNotNil=="undefined"?nil:IRInlinedIfNilIfNotNil)}
  43223. function $IRClosure(){return $globals.IRClosure||(typeof IRClosure=="undefined"?nil:IRClosure)}
  43224. function $IRBlockSequence(){return $globals.IRBlockSequence||(typeof IRBlockSequence=="undefined"?nil:IRBlockSequence)}
  43225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43226. return $core.withContext(function($ctx1) {
  43227. //>>excludeEnd("ctx");
  43228. var $2,$4,$5,$7,$8,$6,$9,$3,$1;
  43229. $2=$recv($IRInlinedIfNilIfNotNil())._new();
  43230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43231. $ctx1.sendIdx["new"]=1;
  43232. //>>excludeEnd("ctx");
  43233. $4=$recv($IRClosure())._new();
  43234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43235. $ctx1.sendIdx["new"]=2;
  43236. //>>excludeEnd("ctx");
  43237. $recv($4)._scope_($recv($recv(anIRInstruction)._scope())._copy());
  43238. $5=$4;
  43239. $7=$recv($IRBlockSequence())._new();
  43240. $recv($7)._add_($recv($recv(self._send())._instructions())._first());
  43241. $8=$recv($7)._yourself();
  43242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43243. $ctx1.sendIdx["yourself"]=1;
  43244. //>>excludeEnd("ctx");
  43245. $6=$8;
  43246. $recv($5)._add_($6);
  43247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43248. $ctx1.sendIdx["add:"]=1;
  43249. //>>excludeEnd("ctx");
  43250. $9=$recv($4)._yourself();
  43251. $3=$9;
  43252. $1=self._inlinedSend_with_with_($2,$3,anIRInstruction);
  43253. return $1;
  43254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43255. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner)});
  43256. //>>excludeEnd("ctx");
  43257. },
  43258. //>>excludeStart("ide", pragmas.excludeIdeData);
  43259. args: ["anIRInstruction"],
  43260. 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",
  43261. referencedClasses: ["IRInlinedIfNilIfNotNil", "IRClosure", "IRBlockSequence"],
  43262. //>>excludeEnd("ide");
  43263. messageSends: ["inlinedSend:with:with:", "new", "scope:", "copy", "scope", "add:", "first", "instructions", "send", "yourself"]
  43264. }),
  43265. $globals.IRSendInliner);
  43266. $core.addMethod(
  43267. $core.method({
  43268. selector: "ifNotNil:ifNil:",
  43269. protocol: 'inlining',
  43270. fn: function (anIRInstruction,anotherIRInstruction){
  43271. var self=this;
  43272. function $IRInlinedIfNilIfNotNil(){return $globals.IRInlinedIfNilIfNotNil||(typeof IRInlinedIfNilIfNotNil=="undefined"?nil:IRInlinedIfNilIfNotNil)}
  43273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43274. return $core.withContext(function($ctx1) {
  43275. //>>excludeEnd("ctx");
  43276. var $1;
  43277. $1=self._inlinedSend_with_with_($recv($IRInlinedIfNilIfNotNil())._new(),anotherIRInstruction,anIRInstruction);
  43278. return $1;
  43279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43280. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:ifNil:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRSendInliner)});
  43281. //>>excludeEnd("ctx");
  43282. },
  43283. //>>excludeStart("ide", pragmas.excludeIdeData);
  43284. args: ["anIRInstruction", "anotherIRInstruction"],
  43285. source: "ifNotNil: anIRInstruction ifNil: anotherIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfNilIfNotNil new with: anotherIRInstruction with: anIRInstruction",
  43286. referencedClasses: ["IRInlinedIfNilIfNotNil"],
  43287. //>>excludeEnd("ide");
  43288. messageSends: ["inlinedSend:with:with:", "new"]
  43289. }),
  43290. $globals.IRSendInliner);
  43291. $core.addMethod(
  43292. $core.method({
  43293. selector: "ifTrue:",
  43294. protocol: 'inlining',
  43295. fn: function (anIRInstruction){
  43296. var self=this;
  43297. function $IRInlinedIfTrue(){return $globals.IRInlinedIfTrue||(typeof IRInlinedIfTrue=="undefined"?nil:IRInlinedIfTrue)}
  43298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43299. return $core.withContext(function($ctx1) {
  43300. //>>excludeEnd("ctx");
  43301. var $1;
  43302. $1=self._inlinedSend_with_($recv($IRInlinedIfTrue())._new(),anIRInstruction);
  43303. return $1;
  43304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43305. }, function($ctx1) {$ctx1.fill(self,"ifTrue:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner)});
  43306. //>>excludeEnd("ctx");
  43307. },
  43308. //>>excludeStart("ide", pragmas.excludeIdeData);
  43309. args: ["anIRInstruction"],
  43310. source: "ifTrue: anIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfTrue new with: anIRInstruction",
  43311. referencedClasses: ["IRInlinedIfTrue"],
  43312. //>>excludeEnd("ide");
  43313. messageSends: ["inlinedSend:with:", "new"]
  43314. }),
  43315. $globals.IRSendInliner);
  43316. $core.addMethod(
  43317. $core.method({
  43318. selector: "ifTrue:ifFalse:",
  43319. protocol: 'inlining',
  43320. fn: function (anIRInstruction,anotherIRInstruction){
  43321. var self=this;
  43322. function $IRInlinedIfTrueIfFalse(){return $globals.IRInlinedIfTrueIfFalse||(typeof IRInlinedIfTrueIfFalse=="undefined"?nil:IRInlinedIfTrueIfFalse)}
  43323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43324. return $core.withContext(function($ctx1) {
  43325. //>>excludeEnd("ctx");
  43326. var $1;
  43327. $1=self._inlinedSend_with_with_($recv($IRInlinedIfTrueIfFalse())._new(),anIRInstruction,anotherIRInstruction);
  43328. return $1;
  43329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43330. }, function($ctx1) {$ctx1.fill(self,"ifTrue:ifFalse:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRSendInliner)});
  43331. //>>excludeEnd("ctx");
  43332. },
  43333. //>>excludeStart("ide", pragmas.excludeIdeData);
  43334. args: ["anIRInstruction", "anotherIRInstruction"],
  43335. source: "ifTrue: anIRInstruction ifFalse: anotherIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfTrueIfFalse new with: anIRInstruction with: anotherIRInstruction",
  43336. referencedClasses: ["IRInlinedIfTrueIfFalse"],
  43337. //>>excludeEnd("ide");
  43338. messageSends: ["inlinedSend:with:with:", "new"]
  43339. }),
  43340. $globals.IRSendInliner);
  43341. $core.addMethod(
  43342. $core.method({
  43343. selector: "inlineClosure:",
  43344. protocol: 'inlining',
  43345. fn: function (anIRClosure){
  43346. var self=this;
  43347. var inlinedClosure,sequence,statements;
  43348. function $IRTempDeclaration(){return $globals.IRTempDeclaration||(typeof IRTempDeclaration=="undefined"?nil:IRTempDeclaration)}
  43349. function $IRAssignment(){return $globals.IRAssignment||(typeof IRAssignment=="undefined"?nil:IRAssignment)}
  43350. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  43351. function $AliasVar(){return $globals.AliasVar||(typeof AliasVar=="undefined"?nil:AliasVar)}
  43352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43353. return $core.withContext(function($ctx1) {
  43354. //>>excludeEnd("ctx");
  43355. 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;
  43356. inlinedClosure=self._inlinedClosure();
  43357. $1=inlinedClosure;
  43358. $2=$1;
  43359. $3=$recv(anIRClosure)._scope();
  43360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43361. $ctx1.sendIdx["scope"]=1;
  43362. //>>excludeEnd("ctx");
  43363. $recv($2)._scope_($3);
  43364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43365. $ctx1.sendIdx["scope:"]=1;
  43366. //>>excludeEnd("ctx");
  43367. $4=$recv($1)._parent_($recv(anIRClosure)._parent());
  43368. $recv($recv(anIRClosure)._tempDeclarations())._do_((function(each){
  43369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43370. return $core.withContext(function($ctx2) {
  43371. //>>excludeEnd("ctx");
  43372. return $recv(inlinedClosure)._add_(each);
  43373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43374. $ctx2.sendIdx["add:"]=1;
  43375. //>>excludeEnd("ctx");
  43376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43377. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  43378. //>>excludeEnd("ctx");
  43379. }));
  43380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43381. $ctx1.sendIdx["do:"]=1;
  43382. //>>excludeEnd("ctx");
  43383. sequence=self._inlinedSequence();
  43384. $recv($recv(anIRClosure)._arguments())._do_((function(each){
  43385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43386. return $core.withContext(function($ctx2) {
  43387. //>>excludeEnd("ctx");
  43388. $5=inlinedClosure;
  43389. $7=$recv($IRTempDeclaration())._new();
  43390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43391. $ctx2.sendIdx["new"]=1;
  43392. //>>excludeEnd("ctx");
  43393. $recv($7)._name_(each);
  43394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43395. $ctx2.sendIdx["name:"]=1;
  43396. //>>excludeEnd("ctx");
  43397. $8=$recv($7)._yourself();
  43398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43399. $ctx2.sendIdx["yourself"]=1;
  43400. //>>excludeEnd("ctx");
  43401. $6=$8;
  43402. $recv($5)._add_($6);
  43403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43404. $ctx2.sendIdx["add:"]=2;
  43405. //>>excludeEnd("ctx");
  43406. $9=sequence;
  43407. $11=$recv($IRAssignment())._new();
  43408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43409. $ctx2.sendIdx["new"]=2;
  43410. //>>excludeEnd("ctx");
  43411. $12=$11;
  43412. $14=$recv($IRVariable())._new();
  43413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43414. $ctx2.sendIdx["new"]=3;
  43415. //>>excludeEnd("ctx");
  43416. $16=$recv($AliasVar())._new();
  43417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43418. $ctx2.sendIdx["new"]=4;
  43419. //>>excludeEnd("ctx");
  43420. $17=$16;
  43421. $18=$recv(inlinedClosure)._scope();
  43422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43423. $ctx2.sendIdx["scope"]=2;
  43424. //>>excludeEnd("ctx");
  43425. $recv($17)._scope_($18);
  43426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43427. $ctx2.sendIdx["scope:"]=2;
  43428. //>>excludeEnd("ctx");
  43429. $recv($16)._name_(each);
  43430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43431. $ctx2.sendIdx["name:"]=2;
  43432. //>>excludeEnd("ctx");
  43433. $19=$recv($16)._yourself();
  43434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43435. $ctx2.sendIdx["yourself"]=2;
  43436. //>>excludeEnd("ctx");
  43437. $15=$19;
  43438. $13=$recv($14)._variable_($15);
  43439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43440. $ctx2.sendIdx["variable:"]=1;
  43441. //>>excludeEnd("ctx");
  43442. $recv($12)._add_($13);
  43443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43444. $ctx2.sendIdx["add:"]=4;
  43445. //>>excludeEnd("ctx");
  43446. $20=$11;
  43447. $22=$recv($IRVariable())._new();
  43448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43449. $ctx2.sendIdx["new"]=5;
  43450. //>>excludeEnd("ctx");
  43451. $24=$recv($AliasVar())._new();
  43452. $recv($24)._scope_($recv(inlinedClosure)._scope());
  43453. $recv($24)._name_("$receiver");
  43454. $25=$recv($24)._yourself();
  43455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43456. $ctx2.sendIdx["yourself"]=3;
  43457. //>>excludeEnd("ctx");
  43458. $23=$25;
  43459. $21=$recv($22)._variable_($23);
  43460. $recv($20)._add_($21);
  43461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43462. $ctx2.sendIdx["add:"]=5;
  43463. //>>excludeEnd("ctx");
  43464. $26=$recv($11)._yourself();
  43465. $10=$26;
  43466. return $recv($9)._add_($10);
  43467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43468. $ctx2.sendIdx["add:"]=3;
  43469. //>>excludeEnd("ctx");
  43470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43471. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  43472. //>>excludeEnd("ctx");
  43473. }));
  43474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43475. $ctx1.sendIdx["do:"]=2;
  43476. //>>excludeEnd("ctx");
  43477. $recv(inlinedClosure)._add_(sequence);
  43478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43479. $ctx1.sendIdx["add:"]=6;
  43480. //>>excludeEnd("ctx");
  43481. $28=$recv(anIRClosure)._instructions();
  43482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43483. $ctx1.sendIdx["instructions"]=2;
  43484. //>>excludeEnd("ctx");
  43485. $27=$recv($28)._last();
  43486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43487. $ctx1.sendIdx["last"]=1;
  43488. //>>excludeEnd("ctx");
  43489. statements=$recv($27)._instructions();
  43490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43491. $ctx1.sendIdx["instructions"]=1;
  43492. //>>excludeEnd("ctx");
  43493. $recv(statements)._ifNotEmpty_((function(){
  43494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43495. return $core.withContext(function($ctx2) {
  43496. //>>excludeEnd("ctx");
  43497. $recv($recv(statements)._allButLast())._do_((function(each){
  43498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43499. return $core.withContext(function($ctx3) {
  43500. //>>excludeEnd("ctx");
  43501. return $recv(sequence)._add_(each);
  43502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43503. $ctx3.sendIdx["add:"]=7;
  43504. //>>excludeEnd("ctx");
  43505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43506. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,4)});
  43507. //>>excludeEnd("ctx");
  43508. }));
  43509. $31=$recv(statements)._last();
  43510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43511. $ctx2.sendIdx["last"]=2;
  43512. //>>excludeEnd("ctx");
  43513. $30=$recv($31)._isReturn();
  43514. $29=$recv($30)._and_((function(){
  43515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43516. return $core.withContext(function($ctx3) {
  43517. //>>excludeEnd("ctx");
  43518. $32=$recv(statements)._last();
  43519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43520. $ctx3.sendIdx["last"]=3;
  43521. //>>excludeEnd("ctx");
  43522. return $recv($32)._isBlockReturn();
  43523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43524. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)});
  43525. //>>excludeEnd("ctx");
  43526. }));
  43527. if($core.assert($29)){
  43528. $33=sequence;
  43529. $36=$recv(statements)._last();
  43530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43531. $ctx2.sendIdx["last"]=4;
  43532. //>>excludeEnd("ctx");
  43533. $35=$recv($36)._instructions();
  43534. $34=$recv($35)._first();
  43535. return $recv($33)._add_($34);
  43536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43537. $ctx2.sendIdx["add:"]=8;
  43538. //>>excludeEnd("ctx");
  43539. } else {
  43540. return $recv(sequence)._add_($recv(statements)._last());
  43541. };
  43542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43543. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  43544. //>>excludeEnd("ctx");
  43545. }));
  43546. $37=inlinedClosure;
  43547. return $37;
  43548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43549. }, function($ctx1) {$ctx1.fill(self,"inlineClosure:",{anIRClosure:anIRClosure,inlinedClosure:inlinedClosure,sequence:sequence,statements:statements},$globals.IRSendInliner)});
  43550. //>>excludeEnd("ctx");
  43551. },
  43552. //>>excludeStart("ide", pragmas.excludeIdeData);
  43553. args: ["anIRClosure"],
  43554. 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",
  43555. referencedClasses: ["IRTempDeclaration", "IRAssignment", "IRVariable", "AliasVar"],
  43556. //>>excludeEnd("ide");
  43557. 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"]
  43558. }),
  43559. $globals.IRSendInliner);
  43560. $core.addMethod(
  43561. $core.method({
  43562. selector: "inlineSend:",
  43563. protocol: 'inlining',
  43564. fn: function (anIRSend){
  43565. var self=this;
  43566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43567. return $core.withContext(function($ctx1) {
  43568. //>>excludeEnd("ctx");
  43569. var $3,$2,$1;
  43570. self._send_(anIRSend);
  43571. $3=self._send();
  43572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43573. $ctx1.sendIdx["send"]=1;
  43574. //>>excludeEnd("ctx");
  43575. $2=$recv($3)._selector();
  43576. $1=self._perform_withArguments_($2,$recv($recv(self._send())._instructions())._allButFirst());
  43577. return $1;
  43578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43579. }, function($ctx1) {$ctx1.fill(self,"inlineSend:",{anIRSend:anIRSend},$globals.IRSendInliner)});
  43580. //>>excludeEnd("ctx");
  43581. },
  43582. //>>excludeStart("ide", pragmas.excludeIdeData);
  43583. args: ["anIRSend"],
  43584. source: "inlineSend: anIRSend\x0a\x09self send: anIRSend.\x0a\x09^ self\x0a\x09\x09perform: self send selector\x0a\x09\x09withArguments: self send instructions allButFirst",
  43585. referencedClasses: [],
  43586. //>>excludeEnd("ide");
  43587. messageSends: ["send:", "perform:withArguments:", "selector", "send", "allButFirst", "instructions"]
  43588. }),
  43589. $globals.IRSendInliner);
  43590. $core.addMethod(
  43591. $core.method({
  43592. selector: "inlinedClosure",
  43593. protocol: 'factory',
  43594. fn: function (){
  43595. var self=this;
  43596. function $IRInlinedClosure(){return $globals.IRInlinedClosure||(typeof IRInlinedClosure=="undefined"?nil:IRInlinedClosure)}
  43597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43598. return $core.withContext(function($ctx1) {
  43599. //>>excludeEnd("ctx");
  43600. var $1;
  43601. $1=$recv($IRInlinedClosure())._new();
  43602. return $1;
  43603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43604. }, function($ctx1) {$ctx1.fill(self,"inlinedClosure",{},$globals.IRSendInliner)});
  43605. //>>excludeEnd("ctx");
  43606. },
  43607. //>>excludeStart("ide", pragmas.excludeIdeData);
  43608. args: [],
  43609. source: "inlinedClosure\x0a\x09^ IRInlinedClosure new",
  43610. referencedClasses: ["IRInlinedClosure"],
  43611. //>>excludeEnd("ide");
  43612. messageSends: ["new"]
  43613. }),
  43614. $globals.IRSendInliner);
  43615. $core.addMethod(
  43616. $core.method({
  43617. selector: "inlinedSend:with:",
  43618. protocol: 'inlining',
  43619. fn: function (inlinedSend,anIRInstruction){
  43620. var self=this;
  43621. var inlinedClosure;
  43622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43623. return $core.withContext(function($ctx1) {
  43624. //>>excludeEnd("ctx");
  43625. var $1,$2,$5,$4,$3,$6,$7;
  43626. $1=$recv(anIRInstruction)._isClosure();
  43627. if(!$core.assert($1)){
  43628. self._inliningError_("Message argument should be a block");
  43629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43630. $ctx1.sendIdx["inliningError:"]=1;
  43631. //>>excludeEnd("ctx");
  43632. };
  43633. $2=$recv($recv($recv(anIRInstruction)._arguments())._size()).__eq((0));
  43634. if(!$core.assert($2)){
  43635. self._inliningError_("Inlined block should have zero argument");
  43636. };
  43637. inlinedClosure=$recv(self._translator())._visit_(self._inlineClosure_(anIRInstruction));
  43638. $5=self._send();
  43639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43640. $ctx1.sendIdx["send"]=1;
  43641. //>>excludeEnd("ctx");
  43642. $4=$recv($5)._instructions();
  43643. $3=$recv($4)._first();
  43644. $recv(inlinedSend)._add_($3);
  43645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43646. $ctx1.sendIdx["add:"]=1;
  43647. //>>excludeEnd("ctx");
  43648. $6=$recv(inlinedSend)._add_(inlinedClosure);
  43649. $recv(self._send())._replaceWith_(inlinedSend);
  43650. $7=$recv($recv(inlinedSend)._method())._internalVariables();
  43651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43652. $ctx1.sendIdx["internalVariables"]=1;
  43653. //>>excludeEnd("ctx");
  43654. $recv($7)._addAll_($recv(inlinedSend)._internalVariables());
  43655. return inlinedSend;
  43656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43657. }, function($ctx1) {$ctx1.fill(self,"inlinedSend:with:",{inlinedSend:inlinedSend,anIRInstruction:anIRInstruction,inlinedClosure:inlinedClosure},$globals.IRSendInliner)});
  43658. //>>excludeEnd("ctx");
  43659. },
  43660. //>>excludeStart("ide", pragmas.excludeIdeData);
  43661. args: ["inlinedSend", "anIRInstruction"],
  43662. 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",
  43663. referencedClasses: [],
  43664. //>>excludeEnd("ide");
  43665. messageSends: ["ifFalse:", "isClosure", "inliningError:", "=", "size", "arguments", "visit:", "translator", "inlineClosure:", "add:", "first", "instructions", "send", "replaceWith:", "addAll:", "internalVariables", "method"]
  43666. }),
  43667. $globals.IRSendInliner);
  43668. $core.addMethod(
  43669. $core.method({
  43670. selector: "inlinedSend:with:with:",
  43671. protocol: 'inlining',
  43672. fn: function (inlinedSend,anIRInstruction,anotherIRInstruction){
  43673. var self=this;
  43674. var inlinedClosure1,inlinedClosure2;
  43675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43676. return $core.withContext(function($ctx1) {
  43677. //>>excludeEnd("ctx");
  43678. var $1,$2,$3,$4,$7,$6,$5,$8,$9;
  43679. $1=$recv(anIRInstruction)._isClosure();
  43680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43681. $ctx1.sendIdx["isClosure"]=1;
  43682. //>>excludeEnd("ctx");
  43683. if(!$core.assert($1)){
  43684. self._inliningError_("Message argument should be a block");
  43685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43686. $ctx1.sendIdx["inliningError:"]=1;
  43687. //>>excludeEnd("ctx");
  43688. };
  43689. $2=$recv(anotherIRInstruction)._isClosure();
  43690. if(!$core.assert($2)){
  43691. self._inliningError_("Message argument should be a block");
  43692. };
  43693. $3=self._translator();
  43694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43695. $ctx1.sendIdx["translator"]=1;
  43696. //>>excludeEnd("ctx");
  43697. $4=self._inlineClosure_(anIRInstruction);
  43698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43699. $ctx1.sendIdx["inlineClosure:"]=1;
  43700. //>>excludeEnd("ctx");
  43701. inlinedClosure1=$recv($3)._visit_($4);
  43702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43703. $ctx1.sendIdx["visit:"]=1;
  43704. //>>excludeEnd("ctx");
  43705. inlinedClosure2=$recv(self._translator())._visit_(self._inlineClosure_(anotherIRInstruction));
  43706. $7=self._send();
  43707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43708. $ctx1.sendIdx["send"]=1;
  43709. //>>excludeEnd("ctx");
  43710. $6=$recv($7)._instructions();
  43711. $5=$recv($6)._first();
  43712. $recv(inlinedSend)._add_($5);
  43713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43714. $ctx1.sendIdx["add:"]=1;
  43715. //>>excludeEnd("ctx");
  43716. $recv(inlinedSend)._add_(inlinedClosure1);
  43717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43718. $ctx1.sendIdx["add:"]=2;
  43719. //>>excludeEnd("ctx");
  43720. $8=$recv(inlinedSend)._add_(inlinedClosure2);
  43721. $recv(self._send())._replaceWith_(inlinedSend);
  43722. $9=$recv($recv(inlinedSend)._method())._internalVariables();
  43723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43724. $ctx1.sendIdx["internalVariables"]=1;
  43725. //>>excludeEnd("ctx");
  43726. $recv($9)._addAll_($recv(inlinedSend)._internalVariables());
  43727. return inlinedSend;
  43728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43729. }, function($ctx1) {$ctx1.fill(self,"inlinedSend:with:with:",{inlinedSend:inlinedSend,anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction,inlinedClosure1:inlinedClosure1,inlinedClosure2:inlinedClosure2},$globals.IRSendInliner)});
  43730. //>>excludeEnd("ctx");
  43731. },
  43732. //>>excludeStart("ide", pragmas.excludeIdeData);
  43733. args: ["inlinedSend", "anIRInstruction", "anotherIRInstruction"],
  43734. 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",
  43735. referencedClasses: [],
  43736. //>>excludeEnd("ide");
  43737. messageSends: ["ifFalse:", "isClosure", "inliningError:", "visit:", "translator", "inlineClosure:", "add:", "first", "instructions", "send", "replaceWith:", "addAll:", "internalVariables", "method"]
  43738. }),
  43739. $globals.IRSendInliner);
  43740. $core.addMethod(
  43741. $core.method({
  43742. selector: "inlinedSequence",
  43743. protocol: 'factory',
  43744. fn: function (){
  43745. var self=this;
  43746. function $IRInlinedSequence(){return $globals.IRInlinedSequence||(typeof IRInlinedSequence=="undefined"?nil:IRInlinedSequence)}
  43747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43748. return $core.withContext(function($ctx1) {
  43749. //>>excludeEnd("ctx");
  43750. var $1;
  43751. $1=$recv($IRInlinedSequence())._new();
  43752. return $1;
  43753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43754. }, function($ctx1) {$ctx1.fill(self,"inlinedSequence",{},$globals.IRSendInliner)});
  43755. //>>excludeEnd("ctx");
  43756. },
  43757. //>>excludeStart("ide", pragmas.excludeIdeData);
  43758. args: [],
  43759. source: "inlinedSequence\x0a\x09^ IRInlinedSequence new",
  43760. referencedClasses: ["IRInlinedSequence"],
  43761. //>>excludeEnd("ide");
  43762. messageSends: ["new"]
  43763. }),
  43764. $globals.IRSendInliner);
  43765. $core.addMethod(
  43766. $core.method({
  43767. selector: "inliningError:",
  43768. protocol: 'error handling',
  43769. fn: function (aString){
  43770. var self=this;
  43771. function $InliningError(){return $globals.InliningError||(typeof InliningError=="undefined"?nil:InliningError)}
  43772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43773. return $core.withContext(function($ctx1) {
  43774. //>>excludeEnd("ctx");
  43775. $recv($InliningError())._signal_(aString);
  43776. return self;
  43777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43778. }, function($ctx1) {$ctx1.fill(self,"inliningError:",{aString:aString},$globals.IRSendInliner)});
  43779. //>>excludeEnd("ctx");
  43780. },
  43781. //>>excludeStart("ide", pragmas.excludeIdeData);
  43782. args: ["aString"],
  43783. source: "inliningError: aString\x0a\x09InliningError signal: aString",
  43784. referencedClasses: ["InliningError"],
  43785. //>>excludeEnd("ide");
  43786. messageSends: ["signal:"]
  43787. }),
  43788. $globals.IRSendInliner);
  43789. $core.addMethod(
  43790. $core.method({
  43791. selector: "send",
  43792. protocol: 'accessing',
  43793. fn: function (){
  43794. var self=this;
  43795. var $1;
  43796. $1=self["@send"];
  43797. return $1;
  43798. },
  43799. //>>excludeStart("ide", pragmas.excludeIdeData);
  43800. args: [],
  43801. source: "send\x0a\x09^ send",
  43802. referencedClasses: [],
  43803. //>>excludeEnd("ide");
  43804. messageSends: []
  43805. }),
  43806. $globals.IRSendInliner);
  43807. $core.addMethod(
  43808. $core.method({
  43809. selector: "send:",
  43810. protocol: 'accessing',
  43811. fn: function (anIRSend){
  43812. var self=this;
  43813. self["@send"]=anIRSend;
  43814. return self;
  43815. },
  43816. //>>excludeStart("ide", pragmas.excludeIdeData);
  43817. args: ["anIRSend"],
  43818. source: "send: anIRSend\x0a\x09send := anIRSend",
  43819. referencedClasses: [],
  43820. //>>excludeEnd("ide");
  43821. messageSends: []
  43822. }),
  43823. $globals.IRSendInliner);
  43824. $core.addMethod(
  43825. $core.method({
  43826. selector: "translator",
  43827. protocol: 'accessing',
  43828. fn: function (){
  43829. var self=this;
  43830. var $1;
  43831. $1=self["@translator"];
  43832. return $1;
  43833. },
  43834. //>>excludeStart("ide", pragmas.excludeIdeData);
  43835. args: [],
  43836. source: "translator\x0a\x09^ translator",
  43837. referencedClasses: [],
  43838. //>>excludeEnd("ide");
  43839. messageSends: []
  43840. }),
  43841. $globals.IRSendInliner);
  43842. $core.addMethod(
  43843. $core.method({
  43844. selector: "translator:",
  43845. protocol: 'accessing',
  43846. fn: function (anASTTranslator){
  43847. var self=this;
  43848. self["@translator"]=anASTTranslator;
  43849. return self;
  43850. },
  43851. //>>excludeStart("ide", pragmas.excludeIdeData);
  43852. args: ["anASTTranslator"],
  43853. source: "translator: anASTTranslator\x0a\x09translator := anASTTranslator",
  43854. referencedClasses: [],
  43855. //>>excludeEnd("ide");
  43856. messageSends: []
  43857. }),
  43858. $globals.IRSendInliner);
  43859. $core.addMethod(
  43860. $core.method({
  43861. selector: "inlinedSelectors",
  43862. protocol: 'accessing',
  43863. fn: function (){
  43864. var self=this;
  43865. var $1;
  43866. $1=["ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:", "ifNil:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"];
  43867. return $1;
  43868. },
  43869. //>>excludeStart("ide", pragmas.excludeIdeData);
  43870. args: [],
  43871. source: "inlinedSelectors\x0a\x09^ #('ifTrue:' 'ifFalse:' 'ifTrue:ifFalse:' 'ifFalse:ifTrue:' 'ifNil:' 'ifNotNil:' 'ifNil:ifNotNil:' 'ifNotNil:ifNil:')",
  43872. referencedClasses: [],
  43873. //>>excludeEnd("ide");
  43874. messageSends: []
  43875. }),
  43876. $globals.IRSendInliner.klass);
  43877. $core.addMethod(
  43878. $core.method({
  43879. selector: "shouldInline:",
  43880. protocol: 'accessing',
  43881. fn: function (anIRInstruction){
  43882. var self=this;
  43883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43884. return $core.withContext(function($ctx1) {
  43885. //>>excludeEnd("ctx");
  43886. var $1,$2;
  43887. var $early={};
  43888. try {
  43889. $1=$recv(self._inlinedSelectors())._includes_($recv(anIRInstruction)._selector());
  43890. if(!$core.assert($1)){
  43891. return false;
  43892. };
  43893. $recv($recv($recv(anIRInstruction)._instructions())._allButFirst())._do_((function(each){
  43894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43895. return $core.withContext(function($ctx2) {
  43896. //>>excludeEnd("ctx");
  43897. $2=$recv(each)._isClosure();
  43898. if(!$core.assert($2)){
  43899. throw $early=[false];
  43900. };
  43901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43902. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  43903. //>>excludeEnd("ctx");
  43904. }));
  43905. return true;
  43906. }
  43907. catch(e) {if(e===$early)return e[0]; throw e}
  43908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43909. }, function($ctx1) {$ctx1.fill(self,"shouldInline:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner.klass)});
  43910. //>>excludeEnd("ctx");
  43911. },
  43912. //>>excludeStart("ide", pragmas.excludeIdeData);
  43913. args: ["anIRInstruction"],
  43914. 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",
  43915. referencedClasses: [],
  43916. //>>excludeEnd("ide");
  43917. messageSends: ["ifFalse:", "includes:", "inlinedSelectors", "selector", "do:", "allButFirst", "instructions", "isClosure"]
  43918. }),
  43919. $globals.IRSendInliner.klass);
  43920. $core.addClass('IRAssignmentInliner', $globals.IRSendInliner, ['assignment'], 'Compiler-Inlining');
  43921. //>>excludeStart("ide", pragmas.excludeIdeData);
  43922. $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};";
  43923. //>>excludeEnd("ide");
  43924. $core.addMethod(
  43925. $core.method({
  43926. selector: "assignment",
  43927. protocol: 'accessing',
  43928. fn: function (){
  43929. var self=this;
  43930. var $1;
  43931. $1=self["@assignment"];
  43932. return $1;
  43933. },
  43934. //>>excludeStart("ide", pragmas.excludeIdeData);
  43935. args: [],
  43936. source: "assignment\x0a\x09^ assignment",
  43937. referencedClasses: [],
  43938. //>>excludeEnd("ide");
  43939. messageSends: []
  43940. }),
  43941. $globals.IRAssignmentInliner);
  43942. $core.addMethod(
  43943. $core.method({
  43944. selector: "assignment:",
  43945. protocol: 'accessing',
  43946. fn: function (aNode){
  43947. var self=this;
  43948. self["@assignment"]=aNode;
  43949. return self;
  43950. },
  43951. //>>excludeStart("ide", pragmas.excludeIdeData);
  43952. args: ["aNode"],
  43953. source: "assignment: aNode\x0a\x09assignment := aNode",
  43954. referencedClasses: [],
  43955. //>>excludeEnd("ide");
  43956. messageSends: []
  43957. }),
  43958. $globals.IRAssignmentInliner);
  43959. $core.addMethod(
  43960. $core.method({
  43961. selector: "inlineAssignment:",
  43962. protocol: 'inlining',
  43963. fn: function (anIRAssignment){
  43964. var self=this;
  43965. var inlinedAssignment;
  43966. function $IRInlinedAssignment(){return $globals.IRInlinedAssignment||(typeof IRInlinedAssignment=="undefined"?nil:IRInlinedAssignment)}
  43967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43968. return $core.withContext(function($ctx1) {
  43969. //>>excludeEnd("ctx");
  43970. var $1,$2;
  43971. self._assignment_(anIRAssignment);
  43972. inlinedAssignment=$recv($IRInlinedAssignment())._new();
  43973. $1=$recv(anIRAssignment)._instructions();
  43974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43975. $ctx1.sendIdx["instructions"]=1;
  43976. //>>excludeEnd("ctx");
  43977. $recv($1)._do_((function(each){
  43978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43979. return $core.withContext(function($ctx2) {
  43980. //>>excludeEnd("ctx");
  43981. return $recv(inlinedAssignment)._add_(each);
  43982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43983. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  43984. //>>excludeEnd("ctx");
  43985. }));
  43986. $recv(anIRAssignment)._replaceWith_(inlinedAssignment);
  43987. self._inlineSend_($recv($recv(inlinedAssignment)._instructions())._last());
  43988. $2=inlinedAssignment;
  43989. return $2;
  43990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43991. }, function($ctx1) {$ctx1.fill(self,"inlineAssignment:",{anIRAssignment:anIRAssignment,inlinedAssignment:inlinedAssignment},$globals.IRAssignmentInliner)});
  43992. //>>excludeEnd("ctx");
  43993. },
  43994. //>>excludeStart("ide", pragmas.excludeIdeData);
  43995. args: ["anIRAssignment"],
  43996. 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",
  43997. referencedClasses: ["IRInlinedAssignment"],
  43998. //>>excludeEnd("ide");
  43999. messageSends: ["assignment:", "new", "do:", "instructions", "add:", "replaceWith:", "inlineSend:", "last"]
  44000. }),
  44001. $globals.IRAssignmentInliner);
  44002. $core.addMethod(
  44003. $core.method({
  44004. selector: "inlineClosure:",
  44005. protocol: 'inlining',
  44006. fn: function (anIRClosure){
  44007. var self=this;
  44008. var inlinedClosure,statements;
  44009. function $IRAssignment(){return $globals.IRAssignment||(typeof IRAssignment=="undefined"?nil:IRAssignment)}
  44010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44011. return $core.withContext(function($ctx1) {
  44012. //>>excludeEnd("ctx");
  44013. var $2,$1,$4,$3,$5,$7,$8,$6,$9;
  44014. inlinedClosure=(
  44015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44016. $ctx1.supercall = true,
  44017. //>>excludeEnd("ctx");
  44018. $globals.IRAssignmentInliner.superclass.fn.prototype._inlineClosure_.apply($recv(self), [anIRClosure]));
  44019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44020. $ctx1.supercall = false;
  44021. //>>excludeEnd("ctx");;
  44022. $2=$recv(inlinedClosure)._instructions();
  44023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44024. $ctx1.sendIdx["instructions"]=2;
  44025. //>>excludeEnd("ctx");
  44026. $1=$recv($2)._last();
  44027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44028. $ctx1.sendIdx["last"]=1;
  44029. //>>excludeEnd("ctx");
  44030. statements=$recv($1)._instructions();
  44031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44032. $ctx1.sendIdx["instructions"]=1;
  44033. //>>excludeEnd("ctx");
  44034. $recv(statements)._ifNotEmpty_((function(){
  44035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44036. return $core.withContext(function($ctx2) {
  44037. //>>excludeEnd("ctx");
  44038. $4=$recv(statements)._last();
  44039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44040. $ctx2.sendIdx["last"]=2;
  44041. //>>excludeEnd("ctx");
  44042. $3=$recv($4)._canBeAssigned();
  44043. if($core.assert($3)){
  44044. $5=$recv(statements)._last();
  44045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44046. $ctx2.sendIdx["last"]=3;
  44047. //>>excludeEnd("ctx");
  44048. $7=$recv($IRAssignment())._new();
  44049. $recv($7)._add_($recv($recv(self._assignment())._instructions())._first());
  44050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44051. $ctx2.sendIdx["add:"]=1;
  44052. //>>excludeEnd("ctx");
  44053. $recv($7)._add_($recv($recv(statements)._last())._copy());
  44054. $8=$recv($7)._yourself();
  44055. $6=$8;
  44056. return $recv($5)._replaceWith_($6);
  44057. };
  44058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44059. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  44060. //>>excludeEnd("ctx");
  44061. }));
  44062. $9=inlinedClosure;
  44063. return $9;
  44064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44065. }, function($ctx1) {$ctx1.fill(self,"inlineClosure:",{anIRClosure:anIRClosure,inlinedClosure:inlinedClosure,statements:statements},$globals.IRAssignmentInliner)});
  44066. //>>excludeEnd("ctx");
  44067. },
  44068. //>>excludeStart("ide", pragmas.excludeIdeData);
  44069. args: ["anIRClosure"],
  44070. 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",
  44071. referencedClasses: ["IRAssignment"],
  44072. //>>excludeEnd("ide");
  44073. messageSends: ["inlineClosure:", "instructions", "last", "ifNotEmpty:", "ifTrue:", "canBeAssigned", "replaceWith:", "add:", "new", "first", "assignment", "copy", "yourself"]
  44074. }),
  44075. $globals.IRAssignmentInliner);
  44076. $core.addClass('IRReturnInliner', $globals.IRSendInliner, [], 'Compiler-Inlining');
  44077. //>>excludeStart("ide", pragmas.excludeIdeData);
  44078. $globals.IRReturnInliner.comment="I inline message sends with inlined closure together with a return instruction.";
  44079. //>>excludeEnd("ide");
  44080. $core.addMethod(
  44081. $core.method({
  44082. selector: "inlineClosure:",
  44083. protocol: 'inlining',
  44084. fn: function (anIRClosure){
  44085. var self=this;
  44086. var closure,statements;
  44087. function $IRReturn(){return $globals.IRReturn||(typeof IRReturn=="undefined"?nil:IRReturn)}
  44088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44089. return $core.withContext(function($ctx1) {
  44090. //>>excludeEnd("ctx");
  44091. var $1,$3,$2,$4,$5,$6,$7;
  44092. closure=(
  44093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44094. $ctx1.supercall = true,
  44095. //>>excludeEnd("ctx");
  44096. $globals.IRReturnInliner.superclass.fn.prototype._inlineClosure_.apply($recv(self), [anIRClosure]));
  44097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44098. $ctx1.supercall = false;
  44099. //>>excludeEnd("ctx");;
  44100. $1=$recv($recv(closure)._instructions())._last();
  44101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44102. $ctx1.sendIdx["last"]=1;
  44103. //>>excludeEnd("ctx");
  44104. statements=$recv($1)._instructions();
  44105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44106. $ctx1.sendIdx["instructions"]=1;
  44107. //>>excludeEnd("ctx");
  44108. $recv(statements)._ifNotEmpty_((function(){
  44109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44110. return $core.withContext(function($ctx2) {
  44111. //>>excludeEnd("ctx");
  44112. $3=$recv(statements)._last();
  44113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44114. $ctx2.sendIdx["last"]=2;
  44115. //>>excludeEnd("ctx");
  44116. $2=$recv($3)._isReturn();
  44117. if(!$core.assert($2)){
  44118. $4=$recv(statements)._last();
  44119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44120. $ctx2.sendIdx["last"]=3;
  44121. //>>excludeEnd("ctx");
  44122. $5=$recv($IRReturn())._new();
  44123. $recv($5)._add_($recv($recv(statements)._last())._copy());
  44124. $6=$recv($5)._yourself();
  44125. return $recv($4)._replaceWith_($6);
  44126. };
  44127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44128. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  44129. //>>excludeEnd("ctx");
  44130. }));
  44131. $7=closure;
  44132. return $7;
  44133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44134. }, function($ctx1) {$ctx1.fill(self,"inlineClosure:",{anIRClosure:anIRClosure,closure:closure,statements:statements},$globals.IRReturnInliner)});
  44135. //>>excludeEnd("ctx");
  44136. },
  44137. //>>excludeStart("ide", pragmas.excludeIdeData);
  44138. args: ["anIRClosure"],
  44139. 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",
  44140. referencedClasses: ["IRReturn"],
  44141. //>>excludeEnd("ide");
  44142. messageSends: ["inlineClosure:", "instructions", "last", "ifNotEmpty:", "ifFalse:", "isReturn", "replaceWith:", "add:", "new", "copy", "yourself"]
  44143. }),
  44144. $globals.IRReturnInliner);
  44145. $core.addMethod(
  44146. $core.method({
  44147. selector: "inlineReturn:",
  44148. protocol: 'inlining',
  44149. fn: function (anIRReturn){
  44150. var self=this;
  44151. var return_;
  44152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44153. return $core.withContext(function($ctx1) {
  44154. //>>excludeEnd("ctx");
  44155. var $1,$2;
  44156. return_=self._inlinedReturn();
  44157. $1=$recv(anIRReturn)._instructions();
  44158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44159. $ctx1.sendIdx["instructions"]=1;
  44160. //>>excludeEnd("ctx");
  44161. $recv($1)._do_((function(each){
  44162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44163. return $core.withContext(function($ctx2) {
  44164. //>>excludeEnd("ctx");
  44165. return $recv(return_)._add_(each);
  44166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44167. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  44168. //>>excludeEnd("ctx");
  44169. }));
  44170. $recv(anIRReturn)._replaceWith_(return_);
  44171. self._inlineSend_($recv($recv(return_)._instructions())._last());
  44172. $2=return_;
  44173. return $2;
  44174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44175. }, function($ctx1) {$ctx1.fill(self,"inlineReturn:",{anIRReturn:anIRReturn,return_:return_},$globals.IRReturnInliner)});
  44176. //>>excludeEnd("ctx");
  44177. },
  44178. //>>excludeStart("ide", pragmas.excludeIdeData);
  44179. args: ["anIRReturn"],
  44180. 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",
  44181. referencedClasses: [],
  44182. //>>excludeEnd("ide");
  44183. messageSends: ["inlinedReturn", "do:", "instructions", "add:", "replaceWith:", "inlineSend:", "last"]
  44184. }),
  44185. $globals.IRReturnInliner);
  44186. $core.addMethod(
  44187. $core.method({
  44188. selector: "inlinedReturn",
  44189. protocol: 'factory',
  44190. fn: function (){
  44191. var self=this;
  44192. function $IRInlinedReturn(){return $globals.IRInlinedReturn||(typeof IRInlinedReturn=="undefined"?nil:IRInlinedReturn)}
  44193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44194. return $core.withContext(function($ctx1) {
  44195. //>>excludeEnd("ctx");
  44196. var $1;
  44197. $1=$recv($IRInlinedReturn())._new();
  44198. return $1;
  44199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44200. }, function($ctx1) {$ctx1.fill(self,"inlinedReturn",{},$globals.IRReturnInliner)});
  44201. //>>excludeEnd("ctx");
  44202. },
  44203. //>>excludeStart("ide", pragmas.excludeIdeData);
  44204. args: [],
  44205. source: "inlinedReturn\x0a\x09^ IRInlinedReturn new",
  44206. referencedClasses: ["IRInlinedReturn"],
  44207. //>>excludeEnd("ide");
  44208. messageSends: ["new"]
  44209. }),
  44210. $globals.IRReturnInliner);
  44211. $core.addClass('InliningCodeGenerator', $globals.CodeGenerator, [], 'Compiler-Inlining');
  44212. //>>excludeStart("ide", pragmas.excludeIdeData);
  44213. $globals.InliningCodeGenerator.comment="I am a specialized code generator that uses inlining to produce more optimized JavaScript output";
  44214. //>>excludeEnd("ide");
  44215. $core.addMethod(
  44216. $core.method({
  44217. selector: "compileNode:",
  44218. protocol: 'compiling',
  44219. fn: function (aNode){
  44220. var self=this;
  44221. var ir,stream;
  44222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44223. return $core.withContext(function($ctx1) {
  44224. //>>excludeEnd("ctx");
  44225. var $2,$3,$1;
  44226. $recv(self._semanticAnalyzer())._visit_(aNode);
  44227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44228. $ctx1.sendIdx["visit:"]=1;
  44229. //>>excludeEnd("ctx");
  44230. ir=$recv(self._translator())._visit_(aNode);
  44231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44232. $ctx1.sendIdx["visit:"]=2;
  44233. //>>excludeEnd("ctx");
  44234. $recv(self._inliner())._visit_(ir);
  44235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44236. $ctx1.sendIdx["visit:"]=3;
  44237. //>>excludeEnd("ctx");
  44238. $2=self._irTranslator();
  44239. $recv($2)._currentClass_(self._currentClass());
  44240. $recv($2)._visit_(ir);
  44241. $3=$recv($2)._contents();
  44242. $1=$3;
  44243. return $1;
  44244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44245. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,ir:ir,stream:stream},$globals.InliningCodeGenerator)});
  44246. //>>excludeEnd("ctx");
  44247. },
  44248. //>>excludeStart("ide", pragmas.excludeIdeData);
  44249. args: ["aNode"],
  44250. 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",
  44251. referencedClasses: [],
  44252. //>>excludeEnd("ide");
  44253. messageSends: ["visit:", "semanticAnalyzer", "translator", "inliner", "currentClass:", "irTranslator", "currentClass", "contents"]
  44254. }),
  44255. $globals.InliningCodeGenerator);
  44256. $core.addMethod(
  44257. $core.method({
  44258. selector: "inliner",
  44259. protocol: 'compiling',
  44260. fn: function (){
  44261. var self=this;
  44262. function $IRInliner(){return $globals.IRInliner||(typeof IRInliner=="undefined"?nil:IRInliner)}
  44263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44264. return $core.withContext(function($ctx1) {
  44265. //>>excludeEnd("ctx");
  44266. var $1;
  44267. $1=$recv($IRInliner())._new();
  44268. return $1;
  44269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44270. }, function($ctx1) {$ctx1.fill(self,"inliner",{},$globals.InliningCodeGenerator)});
  44271. //>>excludeEnd("ctx");
  44272. },
  44273. //>>excludeStart("ide", pragmas.excludeIdeData);
  44274. args: [],
  44275. source: "inliner\x0a\x09^ IRInliner new",
  44276. referencedClasses: ["IRInliner"],
  44277. //>>excludeEnd("ide");
  44278. messageSends: ["new"]
  44279. }),
  44280. $globals.InliningCodeGenerator);
  44281. $core.addMethod(
  44282. $core.method({
  44283. selector: "irTranslator",
  44284. protocol: 'compiling',
  44285. fn: function (){
  44286. var self=this;
  44287. function $IRInliningJSTranslator(){return $globals.IRInliningJSTranslator||(typeof IRInliningJSTranslator=="undefined"?nil:IRInliningJSTranslator)}
  44288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44289. return $core.withContext(function($ctx1) {
  44290. //>>excludeEnd("ctx");
  44291. var $1;
  44292. $1=$recv($IRInliningJSTranslator())._new();
  44293. return $1;
  44294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44295. }, function($ctx1) {$ctx1.fill(self,"irTranslator",{},$globals.InliningCodeGenerator)});
  44296. //>>excludeEnd("ctx");
  44297. },
  44298. //>>excludeStart("ide", pragmas.excludeIdeData);
  44299. args: [],
  44300. source: "irTranslator\x0a\x09^ IRInliningJSTranslator new",
  44301. referencedClasses: ["IRInliningJSTranslator"],
  44302. //>>excludeEnd("ide");
  44303. messageSends: ["new"]
  44304. }),
  44305. $globals.InliningCodeGenerator);
  44306. });
  44307. define("amber_core/Compiler-Semantic", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Compiler-Core"], function($boot){
  44308. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  44309. $core.addPackage('Compiler-Semantic');
  44310. $core.packages["Compiler-Semantic"].innerEval = function (expr) { return eval(expr); };
  44311. $core.packages["Compiler-Semantic"].transport = {"type":"amd","amdNamespace":"amber_core"};
  44312. $core.addClass('LexicalScope', $globals.Object, ['node', 'instruction', 'temps', 'args', 'outerScope', 'blockIndex'], 'Compiler-Semantic');
  44313. //>>excludeStart("ide", pragmas.excludeIdeData);
  44314. $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.";
  44315. //>>excludeEnd("ide");
  44316. $core.addMethod(
  44317. $core.method({
  44318. selector: "addArg:",
  44319. protocol: 'adding',
  44320. fn: function (aString){
  44321. var self=this;
  44322. function $ArgVar(){return $globals.ArgVar||(typeof ArgVar=="undefined"?nil:ArgVar)}
  44323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44324. return $core.withContext(function($ctx1) {
  44325. //>>excludeEnd("ctx");
  44326. var $1;
  44327. $1=self._args();
  44328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44329. $ctx1.sendIdx["args"]=1;
  44330. //>>excludeEnd("ctx");
  44331. $recv($1)._at_put_(aString,$recv($ArgVar())._on_(aString));
  44332. $recv($recv(self._args())._at_(aString))._scope_(self);
  44333. return self;
  44334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44335. }, function($ctx1) {$ctx1.fill(self,"addArg:",{aString:aString},$globals.LexicalScope)});
  44336. //>>excludeEnd("ctx");
  44337. },
  44338. //>>excludeStart("ide", pragmas.excludeIdeData);
  44339. args: ["aString"],
  44340. source: "addArg: aString\x0a\x09self args at: aString put: (ArgVar on: aString).\x0a\x09(self args at: aString) scope: self",
  44341. referencedClasses: ["ArgVar"],
  44342. //>>excludeEnd("ide");
  44343. messageSends: ["at:put:", "args", "on:", "scope:", "at:"]
  44344. }),
  44345. $globals.LexicalScope);
  44346. $core.addMethod(
  44347. $core.method({
  44348. selector: "addTemp:",
  44349. protocol: 'adding',
  44350. fn: function (aString){
  44351. var self=this;
  44352. function $TempVar(){return $globals.TempVar||(typeof TempVar=="undefined"?nil:TempVar)}
  44353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44354. return $core.withContext(function($ctx1) {
  44355. //>>excludeEnd("ctx");
  44356. var $1;
  44357. $1=self._temps();
  44358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44359. $ctx1.sendIdx["temps"]=1;
  44360. //>>excludeEnd("ctx");
  44361. $recv($1)._at_put_(aString,$recv($TempVar())._on_(aString));
  44362. $recv($recv(self._temps())._at_(aString))._scope_(self);
  44363. return self;
  44364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44365. }, function($ctx1) {$ctx1.fill(self,"addTemp:",{aString:aString},$globals.LexicalScope)});
  44366. //>>excludeEnd("ctx");
  44367. },
  44368. //>>excludeStart("ide", pragmas.excludeIdeData);
  44369. args: ["aString"],
  44370. source: "addTemp: aString\x0a\x09self temps at: aString put: (TempVar on: aString).\x0a\x09(self temps at: aString) scope: self",
  44371. referencedClasses: ["TempVar"],
  44372. //>>excludeEnd("ide");
  44373. messageSends: ["at:put:", "temps", "on:", "scope:", "at:"]
  44374. }),
  44375. $globals.LexicalScope);
  44376. $core.addMethod(
  44377. $core.method({
  44378. selector: "alias",
  44379. protocol: 'accessing',
  44380. fn: function (){
  44381. var self=this;
  44382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44383. return $core.withContext(function($ctx1) {
  44384. //>>excludeEnd("ctx");
  44385. var $1;
  44386. $1="$ctx".__comma($recv(self._scopeLevel())._asString());
  44387. return $1;
  44388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44389. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.LexicalScope)});
  44390. //>>excludeEnd("ctx");
  44391. },
  44392. //>>excludeStart("ide", pragmas.excludeIdeData);
  44393. args: [],
  44394. source: "alias\x0a\x09^ '$ctx', self scopeLevel asString",
  44395. referencedClasses: [],
  44396. //>>excludeEnd("ide");
  44397. messageSends: [",", "asString", "scopeLevel"]
  44398. }),
  44399. $globals.LexicalScope);
  44400. $core.addMethod(
  44401. $core.method({
  44402. selector: "allVariableNames",
  44403. protocol: 'accessing',
  44404. fn: function (){
  44405. var self=this;
  44406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44407. return $core.withContext(function($ctx1) {
  44408. //>>excludeEnd("ctx");
  44409. var $2,$1;
  44410. $2=$recv(self._args())._keys();
  44411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44412. $ctx1.sendIdx["keys"]=1;
  44413. //>>excludeEnd("ctx");
  44414. $1=$recv($2).__comma($recv(self._temps())._keys());
  44415. return $1;
  44416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44417. }, function($ctx1) {$ctx1.fill(self,"allVariableNames",{},$globals.LexicalScope)});
  44418. //>>excludeEnd("ctx");
  44419. },
  44420. //>>excludeStart("ide", pragmas.excludeIdeData);
  44421. args: [],
  44422. source: "allVariableNames\x0a\x09^ self args keys, self temps keys",
  44423. referencedClasses: [],
  44424. //>>excludeEnd("ide");
  44425. messageSends: [",", "keys", "args", "temps"]
  44426. }),
  44427. $globals.LexicalScope);
  44428. $core.addMethod(
  44429. $core.method({
  44430. selector: "args",
  44431. protocol: 'accessing',
  44432. fn: function (){
  44433. var self=this;
  44434. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  44435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44436. return $core.withContext(function($ctx1) {
  44437. //>>excludeEnd("ctx");
  44438. var $2,$1,$receiver;
  44439. $2=self["@args"];
  44440. if(($receiver = $2) == null || $receiver.isNil){
  44441. self["@args"]=$recv($Dictionary())._new();
  44442. $1=self["@args"];
  44443. } else {
  44444. $1=$2;
  44445. };
  44446. return $1;
  44447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44448. }, function($ctx1) {$ctx1.fill(self,"args",{},$globals.LexicalScope)});
  44449. //>>excludeEnd("ctx");
  44450. },
  44451. //>>excludeStart("ide", pragmas.excludeIdeData);
  44452. args: [],
  44453. source: "args\x0a\x09^ args ifNil: [ args := Dictionary new ]",
  44454. referencedClasses: ["Dictionary"],
  44455. //>>excludeEnd("ide");
  44456. messageSends: ["ifNil:", "new"]
  44457. }),
  44458. $globals.LexicalScope);
  44459. $core.addMethod(
  44460. $core.method({
  44461. selector: "bindingFor:",
  44462. protocol: 'accessing',
  44463. fn: function (aStringOrNode){
  44464. var self=this;
  44465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44466. return $core.withContext(function($ctx1) {
  44467. //>>excludeEnd("ctx");
  44468. var $2,$3,$4,$5,$1;
  44469. $2=self._pseudoVars();
  44470. $3=$recv(aStringOrNode)._value();
  44471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44472. $ctx1.sendIdx["value"]=1;
  44473. //>>excludeEnd("ctx");
  44474. $1=$recv($2)._at_ifAbsent_($3,(function(){
  44475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44476. return $core.withContext(function($ctx2) {
  44477. //>>excludeEnd("ctx");
  44478. $4=self._args();
  44479. $5=$recv(aStringOrNode)._value();
  44480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44481. $ctx2.sendIdx["value"]=2;
  44482. //>>excludeEnd("ctx");
  44483. return $recv($4)._at_ifAbsent_($5,(function(){
  44484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44485. return $core.withContext(function($ctx3) {
  44486. //>>excludeEnd("ctx");
  44487. return $recv(self._temps())._at_ifAbsent_($recv(aStringOrNode)._value(),(function(){
  44488. return nil;
  44489. }));
  44490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44491. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  44492. //>>excludeEnd("ctx");
  44493. }));
  44494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44495. $ctx2.sendIdx["at:ifAbsent:"]=2;
  44496. //>>excludeEnd("ctx");
  44497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44498. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  44499. //>>excludeEnd("ctx");
  44500. }));
  44501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44502. $ctx1.sendIdx["at:ifAbsent:"]=1;
  44503. //>>excludeEnd("ctx");
  44504. return $1;
  44505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44506. }, function($ctx1) {$ctx1.fill(self,"bindingFor:",{aStringOrNode:aStringOrNode},$globals.LexicalScope)});
  44507. //>>excludeEnd("ctx");
  44508. },
  44509. //>>excludeStart("ide", pragmas.excludeIdeData);
  44510. args: ["aStringOrNode"],
  44511. 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 ]]]",
  44512. referencedClasses: [],
  44513. //>>excludeEnd("ide");
  44514. messageSends: ["at:ifAbsent:", "pseudoVars", "value", "args", "temps"]
  44515. }),
  44516. $globals.LexicalScope);
  44517. $core.addMethod(
  44518. $core.method({
  44519. selector: "blockIndex",
  44520. protocol: 'accessing',
  44521. fn: function (){
  44522. var self=this;
  44523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44524. return $core.withContext(function($ctx1) {
  44525. //>>excludeEnd("ctx");
  44526. var $2,$1,$receiver;
  44527. $2=self["@blockIndex"];
  44528. if(($receiver = $2) == null || $receiver.isNil){
  44529. $1=(0);
  44530. } else {
  44531. $1=$2;
  44532. };
  44533. return $1;
  44534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44535. }, function($ctx1) {$ctx1.fill(self,"blockIndex",{},$globals.LexicalScope)});
  44536. //>>excludeEnd("ctx");
  44537. },
  44538. //>>excludeStart("ide", pragmas.excludeIdeData);
  44539. args: [],
  44540. source: "blockIndex\x0a\x09^ blockIndex ifNil: [ 0 ]",
  44541. referencedClasses: [],
  44542. //>>excludeEnd("ide");
  44543. messageSends: ["ifNil:"]
  44544. }),
  44545. $globals.LexicalScope);
  44546. $core.addMethod(
  44547. $core.method({
  44548. selector: "blockIndex:",
  44549. protocol: 'accessing',
  44550. fn: function (anInteger){
  44551. var self=this;
  44552. self["@blockIndex"]=anInteger;
  44553. return self;
  44554. },
  44555. //>>excludeStart("ide", pragmas.excludeIdeData);
  44556. args: ["anInteger"],
  44557. source: "blockIndex: anInteger \x0a\x09blockIndex := anInteger",
  44558. referencedClasses: [],
  44559. //>>excludeEnd("ide");
  44560. messageSends: []
  44561. }),
  44562. $globals.LexicalScope);
  44563. $core.addMethod(
  44564. $core.method({
  44565. selector: "canInlineNonLocalReturns",
  44566. protocol: 'testing',
  44567. fn: function (){
  44568. var self=this;
  44569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44570. return $core.withContext(function($ctx1) {
  44571. //>>excludeEnd("ctx");
  44572. var $1;
  44573. $1=$recv(self._isInlined())._and_((function(){
  44574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44575. return $core.withContext(function($ctx2) {
  44576. //>>excludeEnd("ctx");
  44577. return $recv(self._outerScope())._canInlineNonLocalReturns();
  44578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44579. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  44580. //>>excludeEnd("ctx");
  44581. }));
  44582. return $1;
  44583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44584. }, function($ctx1) {$ctx1.fill(self,"canInlineNonLocalReturns",{},$globals.LexicalScope)});
  44585. //>>excludeEnd("ctx");
  44586. },
  44587. //>>excludeStart("ide", pragmas.excludeIdeData);
  44588. args: [],
  44589. source: "canInlineNonLocalReturns\x0a\x09^ self isInlined and: [ self outerScope canInlineNonLocalReturns ]",
  44590. referencedClasses: [],
  44591. //>>excludeEnd("ide");
  44592. messageSends: ["and:", "isInlined", "canInlineNonLocalReturns", "outerScope"]
  44593. }),
  44594. $globals.LexicalScope);
  44595. $core.addMethod(
  44596. $core.method({
  44597. selector: "instruction",
  44598. protocol: 'accessing',
  44599. fn: function (){
  44600. var self=this;
  44601. var $1;
  44602. $1=self["@instruction"];
  44603. return $1;
  44604. },
  44605. //>>excludeStart("ide", pragmas.excludeIdeData);
  44606. args: [],
  44607. source: "instruction\x0a\x09^ instruction",
  44608. referencedClasses: [],
  44609. //>>excludeEnd("ide");
  44610. messageSends: []
  44611. }),
  44612. $globals.LexicalScope);
  44613. $core.addMethod(
  44614. $core.method({
  44615. selector: "instruction:",
  44616. protocol: 'accessing',
  44617. fn: function (anIRInstruction){
  44618. var self=this;
  44619. self["@instruction"]=anIRInstruction;
  44620. return self;
  44621. },
  44622. //>>excludeStart("ide", pragmas.excludeIdeData);
  44623. args: ["anIRInstruction"],
  44624. source: "instruction: anIRInstruction\x0a\x09instruction := anIRInstruction",
  44625. referencedClasses: [],
  44626. //>>excludeEnd("ide");
  44627. messageSends: []
  44628. }),
  44629. $globals.LexicalScope);
  44630. $core.addMethod(
  44631. $core.method({
  44632. selector: "isBlockScope",
  44633. protocol: 'testing',
  44634. fn: function (){
  44635. var self=this;
  44636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44637. return $core.withContext(function($ctx1) {
  44638. //>>excludeEnd("ctx");
  44639. var $1;
  44640. $1=$recv(self._isMethodScope())._not();
  44641. return $1;
  44642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44643. }, function($ctx1) {$ctx1.fill(self,"isBlockScope",{},$globals.LexicalScope)});
  44644. //>>excludeEnd("ctx");
  44645. },
  44646. //>>excludeStart("ide", pragmas.excludeIdeData);
  44647. args: [],
  44648. source: "isBlockScope\x0a\x09^ self isMethodScope not",
  44649. referencedClasses: [],
  44650. //>>excludeEnd("ide");
  44651. messageSends: ["not", "isMethodScope"]
  44652. }),
  44653. $globals.LexicalScope);
  44654. $core.addMethod(
  44655. $core.method({
  44656. selector: "isInlined",
  44657. protocol: 'testing',
  44658. fn: function (){
  44659. var self=this;
  44660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44661. return $core.withContext(function($ctx1) {
  44662. //>>excludeEnd("ctx");
  44663. var $3,$2,$1;
  44664. $3=self._instruction();
  44665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44666. $ctx1.sendIdx["instruction"]=1;
  44667. //>>excludeEnd("ctx");
  44668. $2=$recv($3)._notNil();
  44669. $1=$recv($2)._and_((function(){
  44670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44671. return $core.withContext(function($ctx2) {
  44672. //>>excludeEnd("ctx");
  44673. return $recv(self._instruction())._isInlined();
  44674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44675. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  44676. //>>excludeEnd("ctx");
  44677. }));
  44678. return $1;
  44679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44680. }, function($ctx1) {$ctx1.fill(self,"isInlined",{},$globals.LexicalScope)});
  44681. //>>excludeEnd("ctx");
  44682. },
  44683. //>>excludeStart("ide", pragmas.excludeIdeData);
  44684. args: [],
  44685. source: "isInlined\x0a\x09^ self instruction notNil and: [\x0a\x09\x09self instruction isInlined ]",
  44686. referencedClasses: [],
  44687. //>>excludeEnd("ide");
  44688. messageSends: ["and:", "notNil", "instruction", "isInlined"]
  44689. }),
  44690. $globals.LexicalScope);
  44691. $core.addMethod(
  44692. $core.method({
  44693. selector: "isMethodScope",
  44694. protocol: 'testing',
  44695. fn: function (){
  44696. var self=this;
  44697. return false;
  44698. },
  44699. //>>excludeStart("ide", pragmas.excludeIdeData);
  44700. args: [],
  44701. source: "isMethodScope\x0a\x09^ false",
  44702. referencedClasses: [],
  44703. //>>excludeEnd("ide");
  44704. messageSends: []
  44705. }),
  44706. $globals.LexicalScope);
  44707. $core.addMethod(
  44708. $core.method({
  44709. selector: "lookupVariable:",
  44710. protocol: 'accessing',
  44711. fn: function (aNode){
  44712. var self=this;
  44713. var lookup;
  44714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44715. return $core.withContext(function($ctx1) {
  44716. //>>excludeEnd("ctx");
  44717. var $1,$2,$3,$receiver;
  44718. lookup=self._bindingFor_(aNode);
  44719. $1=lookup;
  44720. if(($receiver = $1) == null || $receiver.isNil){
  44721. $2=self._outerScope();
  44722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44723. $ctx1.sendIdx["outerScope"]=1;
  44724. //>>excludeEnd("ctx");
  44725. if(($receiver = $2) == null || $receiver.isNil){
  44726. lookup=$2;
  44727. } else {
  44728. lookup=$recv(self._outerScope())._lookupVariable_(aNode);
  44729. };
  44730. lookup;
  44731. } else {
  44732. $1;
  44733. };
  44734. $3=lookup;
  44735. return $3;
  44736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44737. }, function($ctx1) {$ctx1.fill(self,"lookupVariable:",{aNode:aNode,lookup:lookup},$globals.LexicalScope)});
  44738. //>>excludeEnd("ctx");
  44739. },
  44740. //>>excludeStart("ide", pragmas.excludeIdeData);
  44741. args: ["aNode"],
  44742. 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",
  44743. referencedClasses: [],
  44744. //>>excludeEnd("ide");
  44745. messageSends: ["bindingFor:", "ifNil:", "ifNotNil:", "outerScope", "lookupVariable:"]
  44746. }),
  44747. $globals.LexicalScope);
  44748. $core.addMethod(
  44749. $core.method({
  44750. selector: "methodScope",
  44751. protocol: 'accessing',
  44752. fn: function (){
  44753. var self=this;
  44754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44755. return $core.withContext(function($ctx1) {
  44756. //>>excludeEnd("ctx");
  44757. var $2,$1,$receiver;
  44758. $2=self._outerScope();
  44759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44760. $ctx1.sendIdx["outerScope"]=1;
  44761. //>>excludeEnd("ctx");
  44762. if(($receiver = $2) == null || $receiver.isNil){
  44763. $1=$2;
  44764. } else {
  44765. $1=$recv(self._outerScope())._methodScope();
  44766. };
  44767. return $1;
  44768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44769. }, function($ctx1) {$ctx1.fill(self,"methodScope",{},$globals.LexicalScope)});
  44770. //>>excludeEnd("ctx");
  44771. },
  44772. //>>excludeStart("ide", pragmas.excludeIdeData);
  44773. args: [],
  44774. source: "methodScope\x0a\x09^ self outerScope ifNotNil: [\x0a\x09\x09self outerScope methodScope ]",
  44775. referencedClasses: [],
  44776. //>>excludeEnd("ide");
  44777. messageSends: ["ifNotNil:", "outerScope", "methodScope"]
  44778. }),
  44779. $globals.LexicalScope);
  44780. $core.addMethod(
  44781. $core.method({
  44782. selector: "node",
  44783. protocol: 'accessing',
  44784. fn: function (){
  44785. var self=this;
  44786. var $1;
  44787. $1=self["@node"];
  44788. return $1;
  44789. },
  44790. //>>excludeStart("ide", pragmas.excludeIdeData);
  44791. args: [],
  44792. source: "node\x0a\x09\x22Answer the node in which I am defined\x22\x0a\x09\x0a\x09^ node",
  44793. referencedClasses: [],
  44794. //>>excludeEnd("ide");
  44795. messageSends: []
  44796. }),
  44797. $globals.LexicalScope);
  44798. $core.addMethod(
  44799. $core.method({
  44800. selector: "node:",
  44801. protocol: 'accessing',
  44802. fn: function (aNode){
  44803. var self=this;
  44804. self["@node"]=aNode;
  44805. return self;
  44806. },
  44807. //>>excludeStart("ide", pragmas.excludeIdeData);
  44808. args: ["aNode"],
  44809. source: "node: aNode\x0a\x09node := aNode",
  44810. referencedClasses: [],
  44811. //>>excludeEnd("ide");
  44812. messageSends: []
  44813. }),
  44814. $globals.LexicalScope);
  44815. $core.addMethod(
  44816. $core.method({
  44817. selector: "outerScope",
  44818. protocol: 'accessing',
  44819. fn: function (){
  44820. var self=this;
  44821. var $1;
  44822. $1=self["@outerScope"];
  44823. return $1;
  44824. },
  44825. //>>excludeStart("ide", pragmas.excludeIdeData);
  44826. args: [],
  44827. source: "outerScope\x0a\x09^ outerScope",
  44828. referencedClasses: [],
  44829. //>>excludeEnd("ide");
  44830. messageSends: []
  44831. }),
  44832. $globals.LexicalScope);
  44833. $core.addMethod(
  44834. $core.method({
  44835. selector: "outerScope:",
  44836. protocol: 'accessing',
  44837. fn: function (aLexicalScope){
  44838. var self=this;
  44839. self["@outerScope"]=aLexicalScope;
  44840. return self;
  44841. },
  44842. //>>excludeStart("ide", pragmas.excludeIdeData);
  44843. args: ["aLexicalScope"],
  44844. source: "outerScope: aLexicalScope\x0a\x09outerScope := aLexicalScope",
  44845. referencedClasses: [],
  44846. //>>excludeEnd("ide");
  44847. messageSends: []
  44848. }),
  44849. $globals.LexicalScope);
  44850. $core.addMethod(
  44851. $core.method({
  44852. selector: "pseudoVars",
  44853. protocol: 'accessing',
  44854. fn: function (){
  44855. var self=this;
  44856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44857. return $core.withContext(function($ctx1) {
  44858. //>>excludeEnd("ctx");
  44859. var $1;
  44860. $1=$recv(self._methodScope())._pseudoVars();
  44861. return $1;
  44862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44863. }, function($ctx1) {$ctx1.fill(self,"pseudoVars",{},$globals.LexicalScope)});
  44864. //>>excludeEnd("ctx");
  44865. },
  44866. //>>excludeStart("ide", pragmas.excludeIdeData);
  44867. args: [],
  44868. source: "pseudoVars\x0a\x09^ self methodScope pseudoVars",
  44869. referencedClasses: [],
  44870. //>>excludeEnd("ide");
  44871. messageSends: ["pseudoVars", "methodScope"]
  44872. }),
  44873. $globals.LexicalScope);
  44874. $core.addMethod(
  44875. $core.method({
  44876. selector: "scopeLevel",
  44877. protocol: 'accessing',
  44878. fn: function (){
  44879. var self=this;
  44880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44881. return $core.withContext(function($ctx1) {
  44882. //>>excludeEnd("ctx");
  44883. var $1,$2,$4,$3,$5,$receiver;
  44884. $1=self._outerScope();
  44885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44886. $ctx1.sendIdx["outerScope"]=1;
  44887. //>>excludeEnd("ctx");
  44888. if(($receiver = $1) == null || $receiver.isNil){
  44889. return (1);
  44890. } else {
  44891. $1;
  44892. };
  44893. $2=self._isInlined();
  44894. if($core.assert($2)){
  44895. $4=self._outerScope();
  44896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44897. $ctx1.sendIdx["outerScope"]=2;
  44898. //>>excludeEnd("ctx");
  44899. $3=$recv($4)._scopeLevel();
  44900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44901. $ctx1.sendIdx["scopeLevel"]=1;
  44902. //>>excludeEnd("ctx");
  44903. return $3;
  44904. };
  44905. $5=$recv($recv(self._outerScope())._scopeLevel()).__plus((1));
  44906. return $5;
  44907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44908. }, function($ctx1) {$ctx1.fill(self,"scopeLevel",{},$globals.LexicalScope)});
  44909. //>>excludeEnd("ctx");
  44910. },
  44911. //>>excludeStart("ide", pragmas.excludeIdeData);
  44912. args: [],
  44913. source: "scopeLevel\x0a\x09self outerScope ifNil: [ ^ 1 ].\x0a\x09self isInlined ifTrue: [ ^ self outerScope scopeLevel ].\x0a\x09\x0a\x09^ self outerScope scopeLevel + 1",
  44914. referencedClasses: [],
  44915. //>>excludeEnd("ide");
  44916. messageSends: ["ifNil:", "outerScope", "ifTrue:", "isInlined", "scopeLevel", "+"]
  44917. }),
  44918. $globals.LexicalScope);
  44919. $core.addMethod(
  44920. $core.method({
  44921. selector: "temps",
  44922. protocol: 'accessing',
  44923. fn: function (){
  44924. var self=this;
  44925. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  44926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44927. return $core.withContext(function($ctx1) {
  44928. //>>excludeEnd("ctx");
  44929. var $2,$1,$receiver;
  44930. $2=self["@temps"];
  44931. if(($receiver = $2) == null || $receiver.isNil){
  44932. self["@temps"]=$recv($Dictionary())._new();
  44933. $1=self["@temps"];
  44934. } else {
  44935. $1=$2;
  44936. };
  44937. return $1;
  44938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44939. }, function($ctx1) {$ctx1.fill(self,"temps",{},$globals.LexicalScope)});
  44940. //>>excludeEnd("ctx");
  44941. },
  44942. //>>excludeStart("ide", pragmas.excludeIdeData);
  44943. args: [],
  44944. source: "temps\x0a\x09^ temps ifNil: [ temps := Dictionary new ]",
  44945. referencedClasses: ["Dictionary"],
  44946. //>>excludeEnd("ide");
  44947. messageSends: ["ifNil:", "new"]
  44948. }),
  44949. $globals.LexicalScope);
  44950. $core.addClass('MethodLexicalScope', $globals.LexicalScope, ['iVars', 'pseudoVars', 'unknownVariables', 'localReturn', 'nonLocalReturns'], 'Compiler-Semantic');
  44951. //>>excludeStart("ide", pragmas.excludeIdeData);
  44952. $globals.MethodLexicalScope.comment="I represent a method scope.";
  44953. //>>excludeEnd("ide");
  44954. $core.addMethod(
  44955. $core.method({
  44956. selector: "addIVar:",
  44957. protocol: 'adding',
  44958. fn: function (aString){
  44959. var self=this;
  44960. function $InstanceVar(){return $globals.InstanceVar||(typeof InstanceVar=="undefined"?nil:InstanceVar)}
  44961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44962. return $core.withContext(function($ctx1) {
  44963. //>>excludeEnd("ctx");
  44964. var $1;
  44965. $1=self._iVars();
  44966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44967. $ctx1.sendIdx["iVars"]=1;
  44968. //>>excludeEnd("ctx");
  44969. $recv($1)._at_put_(aString,$recv($InstanceVar())._on_(aString));
  44970. $recv($recv(self._iVars())._at_(aString))._scope_(self);
  44971. return self;
  44972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44973. }, function($ctx1) {$ctx1.fill(self,"addIVar:",{aString:aString},$globals.MethodLexicalScope)});
  44974. //>>excludeEnd("ctx");
  44975. },
  44976. //>>excludeStart("ide", pragmas.excludeIdeData);
  44977. args: ["aString"],
  44978. source: "addIVar: aString\x0a\x09self iVars at: aString put: (InstanceVar on: aString).\x0a\x09(self iVars at: aString) scope: self",
  44979. referencedClasses: ["InstanceVar"],
  44980. //>>excludeEnd("ide");
  44981. messageSends: ["at:put:", "iVars", "on:", "scope:", "at:"]
  44982. }),
  44983. $globals.MethodLexicalScope);
  44984. $core.addMethod(
  44985. $core.method({
  44986. selector: "addNonLocalReturn:",
  44987. protocol: 'adding',
  44988. fn: function (aScope){
  44989. var self=this;
  44990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44991. return $core.withContext(function($ctx1) {
  44992. //>>excludeEnd("ctx");
  44993. $recv(self._nonLocalReturns())._add_(aScope);
  44994. return self;
  44995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44996. }, function($ctx1) {$ctx1.fill(self,"addNonLocalReturn:",{aScope:aScope},$globals.MethodLexicalScope)});
  44997. //>>excludeEnd("ctx");
  44998. },
  44999. //>>excludeStart("ide", pragmas.excludeIdeData);
  45000. args: ["aScope"],
  45001. source: "addNonLocalReturn: aScope\x0a\x09self nonLocalReturns add: aScope",
  45002. referencedClasses: [],
  45003. //>>excludeEnd("ide");
  45004. messageSends: ["add:", "nonLocalReturns"]
  45005. }),
  45006. $globals.MethodLexicalScope);
  45007. $core.addMethod(
  45008. $core.method({
  45009. selector: "allVariableNames",
  45010. protocol: 'accessing',
  45011. fn: function (){
  45012. var self=this;
  45013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45014. return $core.withContext(function($ctx1) {
  45015. //>>excludeEnd("ctx");
  45016. var $2,$1;
  45017. $2=(
  45018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45019. $ctx1.supercall = true,
  45020. //>>excludeEnd("ctx");
  45021. $globals.MethodLexicalScope.superclass.fn.prototype._allVariableNames.apply($recv(self), []));
  45022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45023. $ctx1.supercall = false;
  45024. //>>excludeEnd("ctx");;
  45025. $1=$recv($2).__comma($recv(self._iVars())._keys());
  45026. return $1;
  45027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45028. }, function($ctx1) {$ctx1.fill(self,"allVariableNames",{},$globals.MethodLexicalScope)});
  45029. //>>excludeEnd("ctx");
  45030. },
  45031. //>>excludeStart("ide", pragmas.excludeIdeData);
  45032. args: [],
  45033. source: "allVariableNames\x0a\x09^ super allVariableNames, self iVars keys",
  45034. referencedClasses: [],
  45035. //>>excludeEnd("ide");
  45036. messageSends: [",", "allVariableNames", "keys", "iVars"]
  45037. }),
  45038. $globals.MethodLexicalScope);
  45039. $core.addMethod(
  45040. $core.method({
  45041. selector: "bindingFor:",
  45042. protocol: 'accessing',
  45043. fn: function (aNode){
  45044. var self=this;
  45045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45046. return $core.withContext(function($ctx1) {
  45047. //>>excludeEnd("ctx");
  45048. var $2,$1,$receiver;
  45049. $2=(
  45050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45051. $ctx1.supercall = true,
  45052. //>>excludeEnd("ctx");
  45053. $globals.MethodLexicalScope.superclass.fn.prototype._bindingFor_.apply($recv(self), [aNode]));
  45054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45055. $ctx1.supercall = false;
  45056. //>>excludeEnd("ctx");;
  45057. if(($receiver = $2) == null || $receiver.isNil){
  45058. $1=$recv(self._iVars())._at_ifAbsent_($recv(aNode)._value(),(function(){
  45059. return nil;
  45060. }));
  45061. } else {
  45062. $1=$2;
  45063. };
  45064. return $1;
  45065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45066. }, function($ctx1) {$ctx1.fill(self,"bindingFor:",{aNode:aNode},$globals.MethodLexicalScope)});
  45067. //>>excludeEnd("ctx");
  45068. },
  45069. //>>excludeStart("ide", pragmas.excludeIdeData);
  45070. args: ["aNode"],
  45071. source: "bindingFor: aNode\x0a\x09^ (super bindingFor: aNode) ifNil: [\x0a\x09\x09self iVars at: aNode value ifAbsent: [ nil ]]",
  45072. referencedClasses: [],
  45073. //>>excludeEnd("ide");
  45074. messageSends: ["ifNil:", "bindingFor:", "at:ifAbsent:", "iVars", "value"]
  45075. }),
  45076. $globals.MethodLexicalScope);
  45077. $core.addMethod(
  45078. $core.method({
  45079. selector: "canInlineNonLocalReturns",
  45080. protocol: 'testing',
  45081. fn: function (){
  45082. var self=this;
  45083. return true;
  45084. },
  45085. //>>excludeStart("ide", pragmas.excludeIdeData);
  45086. args: [],
  45087. source: "canInlineNonLocalReturns\x0a\x09^ true",
  45088. referencedClasses: [],
  45089. //>>excludeEnd("ide");
  45090. messageSends: []
  45091. }),
  45092. $globals.MethodLexicalScope);
  45093. $core.addMethod(
  45094. $core.method({
  45095. selector: "hasLocalReturn",
  45096. protocol: 'testing',
  45097. fn: function (){
  45098. var self=this;
  45099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45100. return $core.withContext(function($ctx1) {
  45101. //>>excludeEnd("ctx");
  45102. var $1;
  45103. $1=self._localReturn();
  45104. return $1;
  45105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45106. }, function($ctx1) {$ctx1.fill(self,"hasLocalReturn",{},$globals.MethodLexicalScope)});
  45107. //>>excludeEnd("ctx");
  45108. },
  45109. //>>excludeStart("ide", pragmas.excludeIdeData);
  45110. args: [],
  45111. source: "hasLocalReturn\x0a\x09^ self localReturn",
  45112. referencedClasses: [],
  45113. //>>excludeEnd("ide");
  45114. messageSends: ["localReturn"]
  45115. }),
  45116. $globals.MethodLexicalScope);
  45117. $core.addMethod(
  45118. $core.method({
  45119. selector: "hasNonLocalReturn",
  45120. protocol: 'testing',
  45121. fn: function (){
  45122. var self=this;
  45123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45124. return $core.withContext(function($ctx1) {
  45125. //>>excludeEnd("ctx");
  45126. var $1;
  45127. $1=$recv(self._nonLocalReturns())._notEmpty();
  45128. return $1;
  45129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45130. }, function($ctx1) {$ctx1.fill(self,"hasNonLocalReturn",{},$globals.MethodLexicalScope)});
  45131. //>>excludeEnd("ctx");
  45132. },
  45133. //>>excludeStart("ide", pragmas.excludeIdeData);
  45134. args: [],
  45135. source: "hasNonLocalReturn\x0a\x09^ self nonLocalReturns notEmpty",
  45136. referencedClasses: [],
  45137. //>>excludeEnd("ide");
  45138. messageSends: ["notEmpty", "nonLocalReturns"]
  45139. }),
  45140. $globals.MethodLexicalScope);
  45141. $core.addMethod(
  45142. $core.method({
  45143. selector: "iVars",
  45144. protocol: 'accessing',
  45145. fn: function (){
  45146. var self=this;
  45147. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  45148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45149. return $core.withContext(function($ctx1) {
  45150. //>>excludeEnd("ctx");
  45151. var $2,$1,$receiver;
  45152. $2=self["@iVars"];
  45153. if(($receiver = $2) == null || $receiver.isNil){
  45154. self["@iVars"]=$recv($Dictionary())._new();
  45155. $1=self["@iVars"];
  45156. } else {
  45157. $1=$2;
  45158. };
  45159. return $1;
  45160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45161. }, function($ctx1) {$ctx1.fill(self,"iVars",{},$globals.MethodLexicalScope)});
  45162. //>>excludeEnd("ctx");
  45163. },
  45164. //>>excludeStart("ide", pragmas.excludeIdeData);
  45165. args: [],
  45166. source: "iVars\x0a\x09^ iVars ifNil: [ iVars := Dictionary new ]",
  45167. referencedClasses: ["Dictionary"],
  45168. //>>excludeEnd("ide");
  45169. messageSends: ["ifNil:", "new"]
  45170. }),
  45171. $globals.MethodLexicalScope);
  45172. $core.addMethod(
  45173. $core.method({
  45174. selector: "isMethodScope",
  45175. protocol: 'testing',
  45176. fn: function (){
  45177. var self=this;
  45178. return true;
  45179. },
  45180. //>>excludeStart("ide", pragmas.excludeIdeData);
  45181. args: [],
  45182. source: "isMethodScope\x0a\x09^ true",
  45183. referencedClasses: [],
  45184. //>>excludeEnd("ide");
  45185. messageSends: []
  45186. }),
  45187. $globals.MethodLexicalScope);
  45188. $core.addMethod(
  45189. $core.method({
  45190. selector: "localReturn",
  45191. protocol: 'accessing',
  45192. fn: function (){
  45193. var self=this;
  45194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45195. return $core.withContext(function($ctx1) {
  45196. //>>excludeEnd("ctx");
  45197. var $2,$1,$receiver;
  45198. $2=self["@localReturn"];
  45199. if(($receiver = $2) == null || $receiver.isNil){
  45200. $1=false;
  45201. } else {
  45202. $1=$2;
  45203. };
  45204. return $1;
  45205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45206. }, function($ctx1) {$ctx1.fill(self,"localReturn",{},$globals.MethodLexicalScope)});
  45207. //>>excludeEnd("ctx");
  45208. },
  45209. //>>excludeStart("ide", pragmas.excludeIdeData);
  45210. args: [],
  45211. source: "localReturn\x0a\x09^ localReturn ifNil: [ false ]",
  45212. referencedClasses: [],
  45213. //>>excludeEnd("ide");
  45214. messageSends: ["ifNil:"]
  45215. }),
  45216. $globals.MethodLexicalScope);
  45217. $core.addMethod(
  45218. $core.method({
  45219. selector: "localReturn:",
  45220. protocol: 'accessing',
  45221. fn: function (aBoolean){
  45222. var self=this;
  45223. self["@localReturn"]=aBoolean;
  45224. return self;
  45225. },
  45226. //>>excludeStart("ide", pragmas.excludeIdeData);
  45227. args: ["aBoolean"],
  45228. source: "localReturn: aBoolean\x0a\x09localReturn := aBoolean",
  45229. referencedClasses: [],
  45230. //>>excludeEnd("ide");
  45231. messageSends: []
  45232. }),
  45233. $globals.MethodLexicalScope);
  45234. $core.addMethod(
  45235. $core.method({
  45236. selector: "methodScope",
  45237. protocol: 'accessing',
  45238. fn: function (){
  45239. var self=this;
  45240. return self;
  45241. },
  45242. //>>excludeStart("ide", pragmas.excludeIdeData);
  45243. args: [],
  45244. source: "methodScope\x0a\x09^ self",
  45245. referencedClasses: [],
  45246. //>>excludeEnd("ide");
  45247. messageSends: []
  45248. }),
  45249. $globals.MethodLexicalScope);
  45250. $core.addMethod(
  45251. $core.method({
  45252. selector: "nonLocalReturns",
  45253. protocol: 'accessing',
  45254. fn: function (){
  45255. var self=this;
  45256. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  45257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45258. return $core.withContext(function($ctx1) {
  45259. //>>excludeEnd("ctx");
  45260. var $2,$1,$receiver;
  45261. $2=self["@nonLocalReturns"];
  45262. if(($receiver = $2) == null || $receiver.isNil){
  45263. self["@nonLocalReturns"]=$recv($OrderedCollection())._new();
  45264. $1=self["@nonLocalReturns"];
  45265. } else {
  45266. $1=$2;
  45267. };
  45268. return $1;
  45269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45270. }, function($ctx1) {$ctx1.fill(self,"nonLocalReturns",{},$globals.MethodLexicalScope)});
  45271. //>>excludeEnd("ctx");
  45272. },
  45273. //>>excludeStart("ide", pragmas.excludeIdeData);
  45274. args: [],
  45275. source: "nonLocalReturns\x0a\x09^ nonLocalReturns ifNil: [ nonLocalReturns := OrderedCollection new ]",
  45276. referencedClasses: ["OrderedCollection"],
  45277. //>>excludeEnd("ide");
  45278. messageSends: ["ifNil:", "new"]
  45279. }),
  45280. $globals.MethodLexicalScope);
  45281. $core.addMethod(
  45282. $core.method({
  45283. selector: "pseudoVars",
  45284. protocol: 'accessing',
  45285. fn: function (){
  45286. var self=this;
  45287. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  45288. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  45289. function $PseudoVar(){return $globals.PseudoVar||(typeof PseudoVar=="undefined"?nil:PseudoVar)}
  45290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45291. return $core.withContext(function($ctx1) {
  45292. //>>excludeEnd("ctx");
  45293. var $1,$2,$3,$4,$receiver;
  45294. $1=self["@pseudoVars"];
  45295. if(($receiver = $1) == null || $receiver.isNil){
  45296. self["@pseudoVars"]=$recv($Dictionary())._new();
  45297. self["@pseudoVars"];
  45298. $recv($recv($Smalltalk())._pseudoVariableNames())._do_((function(each){
  45299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45300. return $core.withContext(function($ctx2) {
  45301. //>>excludeEnd("ctx");
  45302. $2=$recv($PseudoVar())._on_(each);
  45303. $recv($2)._scope_(self._methodScope());
  45304. $3=$recv($2)._yourself();
  45305. return $recv(self["@pseudoVars"])._at_put_(each,$3);
  45306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45307. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  45308. //>>excludeEnd("ctx");
  45309. }));
  45310. } else {
  45311. $1;
  45312. };
  45313. $4=self["@pseudoVars"];
  45314. return $4;
  45315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45316. }, function($ctx1) {$ctx1.fill(self,"pseudoVars",{},$globals.MethodLexicalScope)});
  45317. //>>excludeEnd("ctx");
  45318. },
  45319. //>>excludeStart("ide", pragmas.excludeIdeData);
  45320. args: [],
  45321. 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",
  45322. referencedClasses: ["Dictionary", "Smalltalk", "PseudoVar"],
  45323. //>>excludeEnd("ide");
  45324. messageSends: ["ifNil:", "new", "do:", "pseudoVariableNames", "at:put:", "scope:", "on:", "methodScope", "yourself"]
  45325. }),
  45326. $globals.MethodLexicalScope);
  45327. $core.addMethod(
  45328. $core.method({
  45329. selector: "removeNonLocalReturn:",
  45330. protocol: 'adding',
  45331. fn: function (aScope){
  45332. var self=this;
  45333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45334. return $core.withContext(function($ctx1) {
  45335. //>>excludeEnd("ctx");
  45336. $recv(self._nonLocalReturns())._remove_ifAbsent_(aScope,(function(){
  45337. }));
  45338. return self;
  45339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45340. }, function($ctx1) {$ctx1.fill(self,"removeNonLocalReturn:",{aScope:aScope},$globals.MethodLexicalScope)});
  45341. //>>excludeEnd("ctx");
  45342. },
  45343. //>>excludeStart("ide", pragmas.excludeIdeData);
  45344. args: ["aScope"],
  45345. source: "removeNonLocalReturn: aScope\x0a\x09self nonLocalReturns remove: aScope ifAbsent: []",
  45346. referencedClasses: [],
  45347. //>>excludeEnd("ide");
  45348. messageSends: ["remove:ifAbsent:", "nonLocalReturns"]
  45349. }),
  45350. $globals.MethodLexicalScope);
  45351. $core.addMethod(
  45352. $core.method({
  45353. selector: "unknownVariables",
  45354. protocol: 'accessing',
  45355. fn: function (){
  45356. var self=this;
  45357. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  45358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45359. return $core.withContext(function($ctx1) {
  45360. //>>excludeEnd("ctx");
  45361. var $2,$1,$receiver;
  45362. $2=self["@unknownVariables"];
  45363. if(($receiver = $2) == null || $receiver.isNil){
  45364. self["@unknownVariables"]=$recv($OrderedCollection())._new();
  45365. $1=self["@unknownVariables"];
  45366. } else {
  45367. $1=$2;
  45368. };
  45369. return $1;
  45370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45371. }, function($ctx1) {$ctx1.fill(self,"unknownVariables",{},$globals.MethodLexicalScope)});
  45372. //>>excludeEnd("ctx");
  45373. },
  45374. //>>excludeStart("ide", pragmas.excludeIdeData);
  45375. args: [],
  45376. source: "unknownVariables\x0a\x09^ unknownVariables ifNil: [ unknownVariables := OrderedCollection new ]",
  45377. referencedClasses: ["OrderedCollection"],
  45378. //>>excludeEnd("ide");
  45379. messageSends: ["ifNil:", "new"]
  45380. }),
  45381. $globals.MethodLexicalScope);
  45382. $core.addClass('ScopeVar', $globals.Object, ['scope', 'name'], 'Compiler-Semantic');
  45383. //>>excludeStart("ide", pragmas.excludeIdeData);
  45384. $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.";
  45385. //>>excludeEnd("ide");
  45386. $core.addMethod(
  45387. $core.method({
  45388. selector: "alias",
  45389. protocol: 'accessing',
  45390. fn: function (){
  45391. var self=this;
  45392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45393. return $core.withContext(function($ctx1) {
  45394. //>>excludeEnd("ctx");
  45395. var $1;
  45396. $1=$recv(self._name())._asVariableName();
  45397. return $1;
  45398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45399. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.ScopeVar)});
  45400. //>>excludeEnd("ctx");
  45401. },
  45402. //>>excludeStart("ide", pragmas.excludeIdeData);
  45403. args: [],
  45404. source: "alias\x0a\x09^ self name asVariableName",
  45405. referencedClasses: [],
  45406. //>>excludeEnd("ide");
  45407. messageSends: ["asVariableName", "name"]
  45408. }),
  45409. $globals.ScopeVar);
  45410. $core.addMethod(
  45411. $core.method({
  45412. selector: "isArgVar",
  45413. protocol: 'testing',
  45414. fn: function (){
  45415. var self=this;
  45416. return false;
  45417. },
  45418. //>>excludeStart("ide", pragmas.excludeIdeData);
  45419. args: [],
  45420. source: "isArgVar\x0a\x09^ false",
  45421. referencedClasses: [],
  45422. //>>excludeEnd("ide");
  45423. messageSends: []
  45424. }),
  45425. $globals.ScopeVar);
  45426. $core.addMethod(
  45427. $core.method({
  45428. selector: "isClassRefVar",
  45429. protocol: 'testing',
  45430. fn: function (){
  45431. var self=this;
  45432. return false;
  45433. },
  45434. //>>excludeStart("ide", pragmas.excludeIdeData);
  45435. args: [],
  45436. source: "isClassRefVar\x0a\x09^ false",
  45437. referencedClasses: [],
  45438. //>>excludeEnd("ide");
  45439. messageSends: []
  45440. }),
  45441. $globals.ScopeVar);
  45442. $core.addMethod(
  45443. $core.method({
  45444. selector: "isImmutable",
  45445. protocol: 'testing',
  45446. fn: function (){
  45447. var self=this;
  45448. return false;
  45449. },
  45450. //>>excludeStart("ide", pragmas.excludeIdeData);
  45451. args: [],
  45452. source: "isImmutable\x0a\x09^ false",
  45453. referencedClasses: [],
  45454. //>>excludeEnd("ide");
  45455. messageSends: []
  45456. }),
  45457. $globals.ScopeVar);
  45458. $core.addMethod(
  45459. $core.method({
  45460. selector: "isInstanceVar",
  45461. protocol: 'testing',
  45462. fn: function (){
  45463. var self=this;
  45464. return false;
  45465. },
  45466. //>>excludeStart("ide", pragmas.excludeIdeData);
  45467. args: [],
  45468. source: "isInstanceVar\x0a\x09^ false",
  45469. referencedClasses: [],
  45470. //>>excludeEnd("ide");
  45471. messageSends: []
  45472. }),
  45473. $globals.ScopeVar);
  45474. $core.addMethod(
  45475. $core.method({
  45476. selector: "isPseudoVar",
  45477. protocol: 'testing',
  45478. fn: function (){
  45479. var self=this;
  45480. return false;
  45481. },
  45482. //>>excludeStart("ide", pragmas.excludeIdeData);
  45483. args: [],
  45484. source: "isPseudoVar\x0a\x09^ false",
  45485. referencedClasses: [],
  45486. //>>excludeEnd("ide");
  45487. messageSends: []
  45488. }),
  45489. $globals.ScopeVar);
  45490. $core.addMethod(
  45491. $core.method({
  45492. selector: "isTempVar",
  45493. protocol: 'testing',
  45494. fn: function (){
  45495. var self=this;
  45496. return false;
  45497. },
  45498. //>>excludeStart("ide", pragmas.excludeIdeData);
  45499. args: [],
  45500. source: "isTempVar\x0a\x09^ false",
  45501. referencedClasses: [],
  45502. //>>excludeEnd("ide");
  45503. messageSends: []
  45504. }),
  45505. $globals.ScopeVar);
  45506. $core.addMethod(
  45507. $core.method({
  45508. selector: "isUnknownVar",
  45509. protocol: 'testing',
  45510. fn: function (){
  45511. var self=this;
  45512. return false;
  45513. },
  45514. //>>excludeStart("ide", pragmas.excludeIdeData);
  45515. args: [],
  45516. source: "isUnknownVar\x0a\x09^ false",
  45517. referencedClasses: [],
  45518. //>>excludeEnd("ide");
  45519. messageSends: []
  45520. }),
  45521. $globals.ScopeVar);
  45522. $core.addMethod(
  45523. $core.method({
  45524. selector: "name",
  45525. protocol: 'accessing',
  45526. fn: function (){
  45527. var self=this;
  45528. var $1;
  45529. $1=self["@name"];
  45530. return $1;
  45531. },
  45532. //>>excludeStart("ide", pragmas.excludeIdeData);
  45533. args: [],
  45534. source: "name\x0a\x09^ name",
  45535. referencedClasses: [],
  45536. //>>excludeEnd("ide");
  45537. messageSends: []
  45538. }),
  45539. $globals.ScopeVar);
  45540. $core.addMethod(
  45541. $core.method({
  45542. selector: "name:",
  45543. protocol: 'accessing',
  45544. fn: function (aString){
  45545. var self=this;
  45546. self["@name"]=aString;
  45547. return self;
  45548. },
  45549. //>>excludeStart("ide", pragmas.excludeIdeData);
  45550. args: ["aString"],
  45551. source: "name: aString\x0a\x09name := aString",
  45552. referencedClasses: [],
  45553. //>>excludeEnd("ide");
  45554. messageSends: []
  45555. }),
  45556. $globals.ScopeVar);
  45557. $core.addMethod(
  45558. $core.method({
  45559. selector: "scope",
  45560. protocol: 'accessing',
  45561. fn: function (){
  45562. var self=this;
  45563. var $1;
  45564. $1=self["@scope"];
  45565. return $1;
  45566. },
  45567. //>>excludeStart("ide", pragmas.excludeIdeData);
  45568. args: [],
  45569. source: "scope\x0a\x09^ scope",
  45570. referencedClasses: [],
  45571. //>>excludeEnd("ide");
  45572. messageSends: []
  45573. }),
  45574. $globals.ScopeVar);
  45575. $core.addMethod(
  45576. $core.method({
  45577. selector: "scope:",
  45578. protocol: 'accessing',
  45579. fn: function (aScope){
  45580. var self=this;
  45581. self["@scope"]=aScope;
  45582. return self;
  45583. },
  45584. //>>excludeStart("ide", pragmas.excludeIdeData);
  45585. args: ["aScope"],
  45586. source: "scope: aScope\x0a\x09scope := aScope",
  45587. referencedClasses: [],
  45588. //>>excludeEnd("ide");
  45589. messageSends: []
  45590. }),
  45591. $globals.ScopeVar);
  45592. $core.addMethod(
  45593. $core.method({
  45594. selector: "validateAssignment",
  45595. protocol: 'testing',
  45596. fn: function (){
  45597. var self=this;
  45598. function $InvalidAssignmentError(){return $globals.InvalidAssignmentError||(typeof InvalidAssignmentError=="undefined"?nil:InvalidAssignmentError)}
  45599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45600. return $core.withContext(function($ctx1) {
  45601. //>>excludeEnd("ctx");
  45602. var $1,$2,$3;
  45603. $1=$recv(self._isArgVar())._or_((function(){
  45604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45605. return $core.withContext(function($ctx2) {
  45606. //>>excludeEnd("ctx");
  45607. return self._isPseudoVar();
  45608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45609. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  45610. //>>excludeEnd("ctx");
  45611. }));
  45612. if($core.assert($1)){
  45613. $2=$recv($InvalidAssignmentError())._new();
  45614. $recv($2)._variableName_(self._name());
  45615. $3=$recv($2)._signal();
  45616. $3;
  45617. };
  45618. return self;
  45619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45620. }, function($ctx1) {$ctx1.fill(self,"validateAssignment",{},$globals.ScopeVar)});
  45621. //>>excludeEnd("ctx");
  45622. },
  45623. //>>excludeStart("ide", pragmas.excludeIdeData);
  45624. args: [],
  45625. source: "validateAssignment\x0a\x09(self isArgVar or: [ self isPseudoVar ]) ifTrue: [\x0a\x09\x09InvalidAssignmentError new\x0a\x09\x09\x09variableName: self name;\x0a\x09\x09\x09signal]",
  45626. referencedClasses: ["InvalidAssignmentError"],
  45627. //>>excludeEnd("ide");
  45628. messageSends: ["ifTrue:", "or:", "isArgVar", "isPseudoVar", "variableName:", "new", "name", "signal"]
  45629. }),
  45630. $globals.ScopeVar);
  45631. $core.addMethod(
  45632. $core.method({
  45633. selector: "on:",
  45634. protocol: 'instance creation',
  45635. fn: function (aString){
  45636. var self=this;
  45637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45638. return $core.withContext(function($ctx1) {
  45639. //>>excludeEnd("ctx");
  45640. var $2,$3,$1;
  45641. $2=self._new();
  45642. $recv($2)._name_(aString);
  45643. $3=$recv($2)._yourself();
  45644. $1=$3;
  45645. return $1;
  45646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45647. }, function($ctx1) {$ctx1.fill(self,"on:",{aString:aString},$globals.ScopeVar.klass)});
  45648. //>>excludeEnd("ctx");
  45649. },
  45650. //>>excludeStart("ide", pragmas.excludeIdeData);
  45651. args: ["aString"],
  45652. source: "on: aString\x0a\x09^ self new\x0a\x09\x09name: aString;\x0a\x09\x09yourself",
  45653. referencedClasses: [],
  45654. //>>excludeEnd("ide");
  45655. messageSends: ["name:", "new", "yourself"]
  45656. }),
  45657. $globals.ScopeVar.klass);
  45658. $core.addClass('AliasVar', $globals.ScopeVar, ['node'], 'Compiler-Semantic');
  45659. //>>excludeStart("ide", pragmas.excludeIdeData);
  45660. $globals.AliasVar.comment="I am an internally defined variable by the compiler";
  45661. //>>excludeEnd("ide");
  45662. $core.addMethod(
  45663. $core.method({
  45664. selector: "node",
  45665. protocol: 'accessing',
  45666. fn: function (){
  45667. var self=this;
  45668. var $1;
  45669. $1=self["@node"];
  45670. return $1;
  45671. },
  45672. //>>excludeStart("ide", pragmas.excludeIdeData);
  45673. args: [],
  45674. source: "node\x0a\x09^ node",
  45675. referencedClasses: [],
  45676. //>>excludeEnd("ide");
  45677. messageSends: []
  45678. }),
  45679. $globals.AliasVar);
  45680. $core.addMethod(
  45681. $core.method({
  45682. selector: "node:",
  45683. protocol: 'accessing',
  45684. fn: function (aNode){
  45685. var self=this;
  45686. self["@node"]=aNode;
  45687. return self;
  45688. },
  45689. //>>excludeStart("ide", pragmas.excludeIdeData);
  45690. args: ["aNode"],
  45691. source: "node: aNode\x0a\x09node := aNode",
  45692. referencedClasses: [],
  45693. //>>excludeEnd("ide");
  45694. messageSends: []
  45695. }),
  45696. $globals.AliasVar);
  45697. $core.addClass('ArgVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  45698. //>>excludeStart("ide", pragmas.excludeIdeData);
  45699. $globals.ArgVar.comment="I am an argument of a method or block.";
  45700. //>>excludeEnd("ide");
  45701. $core.addMethod(
  45702. $core.method({
  45703. selector: "isArgVar",
  45704. protocol: 'testing',
  45705. fn: function (){
  45706. var self=this;
  45707. return true;
  45708. },
  45709. //>>excludeStart("ide", pragmas.excludeIdeData);
  45710. args: [],
  45711. source: "isArgVar\x0a\x09^ true",
  45712. referencedClasses: [],
  45713. //>>excludeEnd("ide");
  45714. messageSends: []
  45715. }),
  45716. $globals.ArgVar);
  45717. $core.addMethod(
  45718. $core.method({
  45719. selector: "isImmutable",
  45720. protocol: 'testing',
  45721. fn: function (){
  45722. var self=this;
  45723. return true;
  45724. },
  45725. //>>excludeStart("ide", pragmas.excludeIdeData);
  45726. args: [],
  45727. source: "isImmutable\x0a\x09^ true",
  45728. referencedClasses: [],
  45729. //>>excludeEnd("ide");
  45730. messageSends: []
  45731. }),
  45732. $globals.ArgVar);
  45733. $core.addClass('ClassRefVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  45734. //>>excludeStart("ide", pragmas.excludeIdeData);
  45735. $globals.ClassRefVar.comment="I am an class reference variable";
  45736. //>>excludeEnd("ide");
  45737. $core.addMethod(
  45738. $core.method({
  45739. selector: "alias",
  45740. protocol: 'accessing',
  45741. fn: function (){
  45742. var self=this;
  45743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45744. return $core.withContext(function($ctx1) {
  45745. //>>excludeEnd("ctx");
  45746. var $1;
  45747. $1=$recv("$".__comma(self._name())).__comma("()");
  45748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45749. $ctx1.sendIdx[","]=1;
  45750. //>>excludeEnd("ctx");
  45751. return $1;
  45752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45753. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.ClassRefVar)});
  45754. //>>excludeEnd("ctx");
  45755. },
  45756. //>>excludeStart("ide", pragmas.excludeIdeData);
  45757. args: [],
  45758. 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, '()'",
  45759. referencedClasses: [],
  45760. //>>excludeEnd("ide");
  45761. messageSends: [",", "name"]
  45762. }),
  45763. $globals.ClassRefVar);
  45764. $core.addMethod(
  45765. $core.method({
  45766. selector: "isClassRefVar",
  45767. protocol: 'testing',
  45768. fn: function (){
  45769. var self=this;
  45770. return true;
  45771. },
  45772. //>>excludeStart("ide", pragmas.excludeIdeData);
  45773. args: [],
  45774. source: "isClassRefVar\x0a\x09^ true",
  45775. referencedClasses: [],
  45776. //>>excludeEnd("ide");
  45777. messageSends: []
  45778. }),
  45779. $globals.ClassRefVar);
  45780. $core.addMethod(
  45781. $core.method({
  45782. selector: "isImmutable",
  45783. protocol: 'testing',
  45784. fn: function (){
  45785. var self=this;
  45786. return true;
  45787. },
  45788. //>>excludeStart("ide", pragmas.excludeIdeData);
  45789. args: [],
  45790. source: "isImmutable\x0a\x09^ true",
  45791. referencedClasses: [],
  45792. //>>excludeEnd("ide");
  45793. messageSends: []
  45794. }),
  45795. $globals.ClassRefVar);
  45796. $core.addClass('InstanceVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  45797. //>>excludeStart("ide", pragmas.excludeIdeData);
  45798. $globals.InstanceVar.comment="I am an instance variable of a method or block.";
  45799. //>>excludeEnd("ide");
  45800. $core.addMethod(
  45801. $core.method({
  45802. selector: "alias",
  45803. protocol: 'testing',
  45804. fn: function (){
  45805. var self=this;
  45806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45807. return $core.withContext(function($ctx1) {
  45808. //>>excludeEnd("ctx");
  45809. var $1;
  45810. $1=$recv("self[\x22@".__comma(self._name())).__comma("\x22]");
  45811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45812. $ctx1.sendIdx[","]=1;
  45813. //>>excludeEnd("ctx");
  45814. return $1;
  45815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45816. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.InstanceVar)});
  45817. //>>excludeEnd("ctx");
  45818. },
  45819. //>>excludeStart("ide", pragmas.excludeIdeData);
  45820. args: [],
  45821. source: "alias\x0a\x09^ 'self[\x22@', self name, '\x22]'",
  45822. referencedClasses: [],
  45823. //>>excludeEnd("ide");
  45824. messageSends: [",", "name"]
  45825. }),
  45826. $globals.InstanceVar);
  45827. $core.addMethod(
  45828. $core.method({
  45829. selector: "isInstanceVar",
  45830. protocol: 'testing',
  45831. fn: function (){
  45832. var self=this;
  45833. return true;
  45834. },
  45835. //>>excludeStart("ide", pragmas.excludeIdeData);
  45836. args: [],
  45837. source: "isInstanceVar\x0a\x09^ true",
  45838. referencedClasses: [],
  45839. //>>excludeEnd("ide");
  45840. messageSends: []
  45841. }),
  45842. $globals.InstanceVar);
  45843. $core.addClass('PseudoVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  45844. //>>excludeStart("ide", pragmas.excludeIdeData);
  45845. $globals.PseudoVar.comment="I am an pseudo variable.\x0a\x0aThe five Smalltalk pseudo variables are: 'self', 'super', 'nil', 'true' and 'false'";
  45846. //>>excludeEnd("ide");
  45847. $core.addMethod(
  45848. $core.method({
  45849. selector: "alias",
  45850. protocol: 'accessing',
  45851. fn: function (){
  45852. var self=this;
  45853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45854. return $core.withContext(function($ctx1) {
  45855. //>>excludeEnd("ctx");
  45856. var $1;
  45857. $1=self._name();
  45858. return $1;
  45859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45860. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.PseudoVar)});
  45861. //>>excludeEnd("ctx");
  45862. },
  45863. //>>excludeStart("ide", pragmas.excludeIdeData);
  45864. args: [],
  45865. source: "alias\x0a\x09^ self name",
  45866. referencedClasses: [],
  45867. //>>excludeEnd("ide");
  45868. messageSends: ["name"]
  45869. }),
  45870. $globals.PseudoVar);
  45871. $core.addMethod(
  45872. $core.method({
  45873. selector: "isImmutable",
  45874. protocol: 'testing',
  45875. fn: function (){
  45876. var self=this;
  45877. return true;
  45878. },
  45879. //>>excludeStart("ide", pragmas.excludeIdeData);
  45880. args: [],
  45881. source: "isImmutable\x0a\x09^ true",
  45882. referencedClasses: [],
  45883. //>>excludeEnd("ide");
  45884. messageSends: []
  45885. }),
  45886. $globals.PseudoVar);
  45887. $core.addMethod(
  45888. $core.method({
  45889. selector: "isPseudoVar",
  45890. protocol: 'testing',
  45891. fn: function (){
  45892. var self=this;
  45893. return true;
  45894. },
  45895. //>>excludeStart("ide", pragmas.excludeIdeData);
  45896. args: [],
  45897. source: "isPseudoVar\x0a\x09^ true",
  45898. referencedClasses: [],
  45899. //>>excludeEnd("ide");
  45900. messageSends: []
  45901. }),
  45902. $globals.PseudoVar);
  45903. $core.addClass('TempVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  45904. //>>excludeStart("ide", pragmas.excludeIdeData);
  45905. $globals.TempVar.comment="I am an temporary variable of a method or block.";
  45906. //>>excludeEnd("ide");
  45907. $core.addMethod(
  45908. $core.method({
  45909. selector: "isTempVar",
  45910. protocol: 'testing',
  45911. fn: function (){
  45912. var self=this;
  45913. return true;
  45914. },
  45915. //>>excludeStart("ide", pragmas.excludeIdeData);
  45916. args: [],
  45917. source: "isTempVar\x0a\x09^ true",
  45918. referencedClasses: [],
  45919. //>>excludeEnd("ide");
  45920. messageSends: []
  45921. }),
  45922. $globals.TempVar);
  45923. $core.addClass('UnknownVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  45924. //>>excludeStart("ide", pragmas.excludeIdeData);
  45925. $globals.UnknownVar.comment="I am an unknown variable. Amber uses unknown variables as JavaScript globals";
  45926. //>>excludeEnd("ide");
  45927. $core.addMethod(
  45928. $core.method({
  45929. selector: "isUnknownVar",
  45930. protocol: 'testing',
  45931. fn: function (){
  45932. var self=this;
  45933. return true;
  45934. },
  45935. //>>excludeStart("ide", pragmas.excludeIdeData);
  45936. args: [],
  45937. source: "isUnknownVar\x0a\x09^ true",
  45938. referencedClasses: [],
  45939. //>>excludeEnd("ide");
  45940. messageSends: []
  45941. }),
  45942. $globals.UnknownVar);
  45943. $core.addClass('SemanticAnalyzer', $globals.NodeVisitor, ['currentScope', 'blockIndex', 'thePackage', 'theClass', 'classReferences', 'messageSends', 'superSends'], 'Compiler-Semantic');
  45944. //>>excludeStart("ide", pragmas.excludeIdeData);
  45945. $globals.SemanticAnalyzer.comment="I semantically analyze the abstract syntax tree and annotate it with informations such as non local returns and variable scopes.";
  45946. //>>excludeEnd("ide");
  45947. $core.addMethod(
  45948. $core.method({
  45949. selector: "classReferences",
  45950. protocol: 'accessing',
  45951. fn: function (){
  45952. var self=this;
  45953. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  45954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45955. return $core.withContext(function($ctx1) {
  45956. //>>excludeEnd("ctx");
  45957. var $2,$1,$receiver;
  45958. $2=self["@classReferences"];
  45959. if(($receiver = $2) == null || $receiver.isNil){
  45960. self["@classReferences"]=$recv($Set())._new();
  45961. $1=self["@classReferences"];
  45962. } else {
  45963. $1=$2;
  45964. };
  45965. return $1;
  45966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45967. }, function($ctx1) {$ctx1.fill(self,"classReferences",{},$globals.SemanticAnalyzer)});
  45968. //>>excludeEnd("ctx");
  45969. },
  45970. //>>excludeStart("ide", pragmas.excludeIdeData);
  45971. args: [],
  45972. source: "classReferences\x0a\x09^ classReferences ifNil: [ classReferences := Set new ]",
  45973. referencedClasses: ["Set"],
  45974. //>>excludeEnd("ide");
  45975. messageSends: ["ifNil:", "new"]
  45976. }),
  45977. $globals.SemanticAnalyzer);
  45978. $core.addMethod(
  45979. $core.method({
  45980. selector: "errorShadowingVariable:",
  45981. protocol: 'error handling',
  45982. fn: function (aString){
  45983. var self=this;
  45984. function $ShadowingVariableError(){return $globals.ShadowingVariableError||(typeof ShadowingVariableError=="undefined"?nil:ShadowingVariableError)}
  45985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45986. return $core.withContext(function($ctx1) {
  45987. //>>excludeEnd("ctx");
  45988. var $1,$2;
  45989. $1=$recv($ShadowingVariableError())._new();
  45990. $recv($1)._variableName_(aString);
  45991. $2=$recv($1)._signal();
  45992. return self;
  45993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45994. }, function($ctx1) {$ctx1.fill(self,"errorShadowingVariable:",{aString:aString},$globals.SemanticAnalyzer)});
  45995. //>>excludeEnd("ctx");
  45996. },
  45997. //>>excludeStart("ide", pragmas.excludeIdeData);
  45998. args: ["aString"],
  45999. source: "errorShadowingVariable: aString\x0a\x09ShadowingVariableError new\x0a\x09\x09variableName: aString;\x0a\x09\x09signal",
  46000. referencedClasses: ["ShadowingVariableError"],
  46001. //>>excludeEnd("ide");
  46002. messageSends: ["variableName:", "new", "signal"]
  46003. }),
  46004. $globals.SemanticAnalyzer);
  46005. $core.addMethod(
  46006. $core.method({
  46007. selector: "errorUnknownVariable:",
  46008. protocol: 'error handling',
  46009. fn: function (aNode){
  46010. var self=this;
  46011. var identifier;
  46012. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  46013. function $UnknownVariableError(){return $globals.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
  46014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46015. return $core.withContext(function($ctx1) {
  46016. //>>excludeEnd("ctx");
  46017. var $1,$2,$3,$4,$5;
  46018. identifier=$recv(aNode)._value();
  46019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46020. $ctx1.sendIdx["value"]=1;
  46021. //>>excludeEnd("ctx");
  46022. $1=$recv($recv($recv($recv($Smalltalk())._globalJsVariables())._includes_(identifier))._not())._and_((function(){
  46023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46024. return $core.withContext(function($ctx2) {
  46025. //>>excludeEnd("ctx");
  46026. return self._isVariableUndefined_inPackage_(identifier,self._thePackage());
  46027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46028. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  46029. //>>excludeEnd("ctx");
  46030. }));
  46031. if($core.assert($1)){
  46032. $2=$recv($UnknownVariableError())._new();
  46033. $3=$2;
  46034. $4=$recv(aNode)._value();
  46035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46036. $ctx1.sendIdx["value"]=2;
  46037. //>>excludeEnd("ctx");
  46038. $recv($3)._variableName_($4);
  46039. $5=$recv($2)._signal();
  46040. $5;
  46041. } else {
  46042. $recv($recv($recv(self["@currentScope"])._methodScope())._unknownVariables())._add_($recv(aNode)._value());
  46043. };
  46044. return self;
  46045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46046. }, function($ctx1) {$ctx1.fill(self,"errorUnknownVariable:",{aNode:aNode,identifier:identifier},$globals.SemanticAnalyzer)});
  46047. //>>excludeEnd("ctx");
  46048. },
  46049. //>>excludeStart("ide", pragmas.excludeIdeData);
  46050. args: ["aNode"],
  46051. 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: `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 isVariableUndefined: identifier inPackage: self thePackage ])\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 ]",
  46052. referencedClasses: ["Smalltalk", "UnknownVariableError"],
  46053. //>>excludeEnd("ide");
  46054. messageSends: ["value", "ifTrue:ifFalse:", "and:", "not", "includes:", "globalJsVariables", "isVariableUndefined:inPackage:", "thePackage", "variableName:", "new", "signal", "add:", "unknownVariables", "methodScope"]
  46055. }),
  46056. $globals.SemanticAnalyzer);
  46057. $core.addMethod(
  46058. $core.method({
  46059. selector: "isVariableUndefined:inPackage:",
  46060. protocol: 'testing',
  46061. fn: function (aString,aPackage){
  46062. var self=this;
  46063. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  46064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46065. return $core.withContext(function($ctx1) {
  46066. //>>excludeEnd("ctx");
  46067. var $1,$3,$4,$2,$receiver;
  46068. if(($receiver = aPackage) == null || $receiver.isNil){
  46069. aPackage;
  46070. } else {
  46071. var packageKnownVars;
  46072. packageKnownVars=$recv($recv($recv(aPackage)._imports())._reject_("isString"))._collect_("key");
  46073. packageKnownVars;
  46074. $1=$recv(packageKnownVars)._includes_(aString);
  46075. if($core.assert($1)){
  46076. return false;
  46077. };
  46078. };
  46079. $3=$recv($Compiler())._new();
  46080. $4=$recv("typeof ".__comma(aString)).__comma(" == \x22undefined\x22");
  46081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46082. $ctx1.sendIdx[","]=1;
  46083. //>>excludeEnd("ctx");
  46084. $2=$recv($3)._eval_($4);
  46085. return $2;
  46086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46087. }, function($ctx1) {$ctx1.fill(self,"isVariableUndefined:inPackage:",{aString:aString,aPackage:aPackage},$globals.SemanticAnalyzer)});
  46088. //>>excludeEnd("ctx");
  46089. },
  46090. //>>excludeStart("ide", pragmas.excludeIdeData);
  46091. args: ["aString", "aPackage"],
  46092. source: "isVariableUndefined: aString inPackage: aPackage\x0a\x09aPackage ifNotNil: [\x0a\x09\x09| packageKnownVars |\x0a\x09\x09packageKnownVars := (aPackage imports\x0a\x09\x09\x09reject: #isString)\x0a\x09\x09\x09collect: #key.\x0a\x09\x09(packageKnownVars includes: aString) ifTrue: [ ^ false ]].\x0a\x09^ Compiler new\x0a\x09\x09eval: 'typeof ', aString, ' == \x22undefined\x22'",
  46093. referencedClasses: ["Compiler"],
  46094. //>>excludeEnd("ide");
  46095. messageSends: ["ifNotNil:", "collect:", "reject:", "imports", "ifTrue:", "includes:", "eval:", "new", ","]
  46096. }),
  46097. $globals.SemanticAnalyzer);
  46098. $core.addMethod(
  46099. $core.method({
  46100. selector: "messageSends",
  46101. protocol: 'accessing',
  46102. fn: function (){
  46103. var self=this;
  46104. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  46105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46106. return $core.withContext(function($ctx1) {
  46107. //>>excludeEnd("ctx");
  46108. var $2,$1,$receiver;
  46109. $2=self["@messageSends"];
  46110. if(($receiver = $2) == null || $receiver.isNil){
  46111. self["@messageSends"]=$recv($Dictionary())._new();
  46112. $1=self["@messageSends"];
  46113. } else {
  46114. $1=$2;
  46115. };
  46116. return $1;
  46117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46118. }, function($ctx1) {$ctx1.fill(self,"messageSends",{},$globals.SemanticAnalyzer)});
  46119. //>>excludeEnd("ctx");
  46120. },
  46121. //>>excludeStart("ide", pragmas.excludeIdeData);
  46122. args: [],
  46123. source: "messageSends\x0a\x09^ messageSends ifNil: [ messageSends := Dictionary new ]",
  46124. referencedClasses: ["Dictionary"],
  46125. //>>excludeEnd("ide");
  46126. messageSends: ["ifNil:", "new"]
  46127. }),
  46128. $globals.SemanticAnalyzer);
  46129. $core.addMethod(
  46130. $core.method({
  46131. selector: "newBlockScope",
  46132. protocol: 'factory',
  46133. fn: function (){
  46134. var self=this;
  46135. function $LexicalScope(){return $globals.LexicalScope||(typeof LexicalScope=="undefined"?nil:LexicalScope)}
  46136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46137. return $core.withContext(function($ctx1) {
  46138. //>>excludeEnd("ctx");
  46139. var $1;
  46140. $1=self._newScopeOfClass_($LexicalScope());
  46141. return $1;
  46142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46143. }, function($ctx1) {$ctx1.fill(self,"newBlockScope",{},$globals.SemanticAnalyzer)});
  46144. //>>excludeEnd("ctx");
  46145. },
  46146. //>>excludeStart("ide", pragmas.excludeIdeData);
  46147. args: [],
  46148. source: "newBlockScope\x0a\x09^ self newScopeOfClass: LexicalScope",
  46149. referencedClasses: ["LexicalScope"],
  46150. //>>excludeEnd("ide");
  46151. messageSends: ["newScopeOfClass:"]
  46152. }),
  46153. $globals.SemanticAnalyzer);
  46154. $core.addMethod(
  46155. $core.method({
  46156. selector: "newMethodScope",
  46157. protocol: 'factory',
  46158. fn: function (){
  46159. var self=this;
  46160. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  46161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46162. return $core.withContext(function($ctx1) {
  46163. //>>excludeEnd("ctx");
  46164. var $1;
  46165. $1=self._newScopeOfClass_($MethodLexicalScope());
  46166. return $1;
  46167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46168. }, function($ctx1) {$ctx1.fill(self,"newMethodScope",{},$globals.SemanticAnalyzer)});
  46169. //>>excludeEnd("ctx");
  46170. },
  46171. //>>excludeStart("ide", pragmas.excludeIdeData);
  46172. args: [],
  46173. source: "newMethodScope\x0a\x09^ self newScopeOfClass: MethodLexicalScope",
  46174. referencedClasses: ["MethodLexicalScope"],
  46175. //>>excludeEnd("ide");
  46176. messageSends: ["newScopeOfClass:"]
  46177. }),
  46178. $globals.SemanticAnalyzer);
  46179. $core.addMethod(
  46180. $core.method({
  46181. selector: "newScopeOfClass:",
  46182. protocol: 'factory',
  46183. fn: function (aLexicalScopeClass){
  46184. var self=this;
  46185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46186. return $core.withContext(function($ctx1) {
  46187. //>>excludeEnd("ctx");
  46188. var $2,$3,$1;
  46189. $2=$recv(aLexicalScopeClass)._new();
  46190. $recv($2)._outerScope_(self["@currentScope"]);
  46191. $3=$recv($2)._yourself();
  46192. $1=$3;
  46193. return $1;
  46194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46195. }, function($ctx1) {$ctx1.fill(self,"newScopeOfClass:",{aLexicalScopeClass:aLexicalScopeClass},$globals.SemanticAnalyzer)});
  46196. //>>excludeEnd("ctx");
  46197. },
  46198. //>>excludeStart("ide", pragmas.excludeIdeData);
  46199. args: ["aLexicalScopeClass"],
  46200. source: "newScopeOfClass: aLexicalScopeClass\x0a\x09^ aLexicalScopeClass new\x0a\x09\x09outerScope: currentScope;\x0a\x09\x09yourself",
  46201. referencedClasses: [],
  46202. //>>excludeEnd("ide");
  46203. messageSends: ["outerScope:", "new", "yourself"]
  46204. }),
  46205. $globals.SemanticAnalyzer);
  46206. $core.addMethod(
  46207. $core.method({
  46208. selector: "nextBlockIndex",
  46209. protocol: 'private',
  46210. fn: function (){
  46211. var self=this;
  46212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46213. return $core.withContext(function($ctx1) {
  46214. //>>excludeEnd("ctx");
  46215. var $1,$2,$receiver;
  46216. $1=self["@blockIndex"];
  46217. if(($receiver = $1) == null || $receiver.isNil){
  46218. self["@blockIndex"]=(0);
  46219. self["@blockIndex"];
  46220. } else {
  46221. $1;
  46222. };
  46223. self["@blockIndex"]=$recv(self["@blockIndex"]).__plus((1));
  46224. $2=self["@blockIndex"];
  46225. return $2;
  46226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46227. }, function($ctx1) {$ctx1.fill(self,"nextBlockIndex",{},$globals.SemanticAnalyzer)});
  46228. //>>excludeEnd("ctx");
  46229. },
  46230. //>>excludeStart("ide", pragmas.excludeIdeData);
  46231. args: [],
  46232. source: "nextBlockIndex\x0a\x09blockIndex ifNil: [ blockIndex := 0 ].\x0a\x09\x0a\x09blockIndex := blockIndex + 1.\x0a\x09^ blockIndex",
  46233. referencedClasses: [],
  46234. //>>excludeEnd("ide");
  46235. messageSends: ["ifNil:", "+"]
  46236. }),
  46237. $globals.SemanticAnalyzer);
  46238. $core.addMethod(
  46239. $core.method({
  46240. selector: "popScope",
  46241. protocol: 'scope',
  46242. fn: function (){
  46243. var self=this;
  46244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46245. return $core.withContext(function($ctx1) {
  46246. //>>excludeEnd("ctx");
  46247. var $1,$receiver;
  46248. $1=self["@currentScope"];
  46249. if(($receiver = $1) == null || $receiver.isNil){
  46250. $1;
  46251. } else {
  46252. self["@currentScope"]=$recv(self["@currentScope"])._outerScope();
  46253. self["@currentScope"];
  46254. };
  46255. return self;
  46256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46257. }, function($ctx1) {$ctx1.fill(self,"popScope",{},$globals.SemanticAnalyzer)});
  46258. //>>excludeEnd("ctx");
  46259. },
  46260. //>>excludeStart("ide", pragmas.excludeIdeData);
  46261. args: [],
  46262. source: "popScope\x0a\x09currentScope ifNotNil: [\x0a\x09\x09currentScope := currentScope outerScope ]",
  46263. referencedClasses: [],
  46264. //>>excludeEnd("ide");
  46265. messageSends: ["ifNotNil:", "outerScope"]
  46266. }),
  46267. $globals.SemanticAnalyzer);
  46268. $core.addMethod(
  46269. $core.method({
  46270. selector: "pushScope:",
  46271. protocol: 'scope',
  46272. fn: function (aScope){
  46273. var self=this;
  46274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46275. return $core.withContext(function($ctx1) {
  46276. //>>excludeEnd("ctx");
  46277. $recv(aScope)._outerScope_(self["@currentScope"]);
  46278. self["@currentScope"]=aScope;
  46279. return self;
  46280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46281. }, function($ctx1) {$ctx1.fill(self,"pushScope:",{aScope:aScope},$globals.SemanticAnalyzer)});
  46282. //>>excludeEnd("ctx");
  46283. },
  46284. //>>excludeStart("ide", pragmas.excludeIdeData);
  46285. args: ["aScope"],
  46286. source: "pushScope: aScope\x0a\x09aScope outerScope: currentScope.\x0a\x09currentScope := aScope",
  46287. referencedClasses: [],
  46288. //>>excludeEnd("ide");
  46289. messageSends: ["outerScope:"]
  46290. }),
  46291. $globals.SemanticAnalyzer);
  46292. $core.addMethod(
  46293. $core.method({
  46294. selector: "superSends",
  46295. protocol: 'accessing',
  46296. fn: function (){
  46297. var self=this;
  46298. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  46299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46300. return $core.withContext(function($ctx1) {
  46301. //>>excludeEnd("ctx");
  46302. var $2,$1,$receiver;
  46303. $2=self["@superSends"];
  46304. if(($receiver = $2) == null || $receiver.isNil){
  46305. self["@superSends"]=$recv($Dictionary())._new();
  46306. $1=self["@superSends"];
  46307. } else {
  46308. $1=$2;
  46309. };
  46310. return $1;
  46311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46312. }, function($ctx1) {$ctx1.fill(self,"superSends",{},$globals.SemanticAnalyzer)});
  46313. //>>excludeEnd("ctx");
  46314. },
  46315. //>>excludeStart("ide", pragmas.excludeIdeData);
  46316. args: [],
  46317. source: "superSends\x0a\x09^ superSends ifNil: [ superSends := Dictionary new ]",
  46318. referencedClasses: ["Dictionary"],
  46319. //>>excludeEnd("ide");
  46320. messageSends: ["ifNil:", "new"]
  46321. }),
  46322. $globals.SemanticAnalyzer);
  46323. $core.addMethod(
  46324. $core.method({
  46325. selector: "theClass",
  46326. protocol: 'accessing',
  46327. fn: function (){
  46328. var self=this;
  46329. var $1;
  46330. $1=self["@theClass"];
  46331. return $1;
  46332. },
  46333. //>>excludeStart("ide", pragmas.excludeIdeData);
  46334. args: [],
  46335. source: "theClass\x0a\x09^ theClass",
  46336. referencedClasses: [],
  46337. //>>excludeEnd("ide");
  46338. messageSends: []
  46339. }),
  46340. $globals.SemanticAnalyzer);
  46341. $core.addMethod(
  46342. $core.method({
  46343. selector: "theClass:",
  46344. protocol: 'accessing',
  46345. fn: function (aClass){
  46346. var self=this;
  46347. self["@theClass"]=aClass;
  46348. return self;
  46349. },
  46350. //>>excludeStart("ide", pragmas.excludeIdeData);
  46351. args: ["aClass"],
  46352. source: "theClass: aClass\x0a\x09theClass := aClass",
  46353. referencedClasses: [],
  46354. //>>excludeEnd("ide");
  46355. messageSends: []
  46356. }),
  46357. $globals.SemanticAnalyzer);
  46358. $core.addMethod(
  46359. $core.method({
  46360. selector: "thePackage",
  46361. protocol: 'accessing',
  46362. fn: function (){
  46363. var self=this;
  46364. var $1;
  46365. $1=self["@thePackage"];
  46366. return $1;
  46367. },
  46368. //>>excludeStart("ide", pragmas.excludeIdeData);
  46369. args: [],
  46370. source: "thePackage\x0a\x09^ thePackage",
  46371. referencedClasses: [],
  46372. //>>excludeEnd("ide");
  46373. messageSends: []
  46374. }),
  46375. $globals.SemanticAnalyzer);
  46376. $core.addMethod(
  46377. $core.method({
  46378. selector: "thePackage:",
  46379. protocol: 'accessing',
  46380. fn: function (aPackage){
  46381. var self=this;
  46382. self["@thePackage"]=aPackage;
  46383. return self;
  46384. },
  46385. //>>excludeStart("ide", pragmas.excludeIdeData);
  46386. args: ["aPackage"],
  46387. source: "thePackage: aPackage\x0a\x09thePackage := aPackage",
  46388. referencedClasses: [],
  46389. //>>excludeEnd("ide");
  46390. messageSends: []
  46391. }),
  46392. $globals.SemanticAnalyzer);
  46393. $core.addMethod(
  46394. $core.method({
  46395. selector: "validateVariableScope:",
  46396. protocol: 'scope',
  46397. fn: function (aString){
  46398. var self=this;
  46399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46400. return $core.withContext(function($ctx1) {
  46401. //>>excludeEnd("ctx");
  46402. var $1,$receiver;
  46403. $1=$recv(self["@currentScope"])._lookupVariable_(aString);
  46404. if(($receiver = $1) == null || $receiver.isNil){
  46405. $1;
  46406. } else {
  46407. self._errorShadowingVariable_(aString);
  46408. };
  46409. return self;
  46410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46411. }, function($ctx1) {$ctx1.fill(self,"validateVariableScope:",{aString:aString},$globals.SemanticAnalyzer)});
  46412. //>>excludeEnd("ctx");
  46413. },
  46414. //>>excludeStart("ide", pragmas.excludeIdeData);
  46415. args: ["aString"],
  46416. 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 ]",
  46417. referencedClasses: [],
  46418. //>>excludeEnd("ide");
  46419. messageSends: ["ifNotNil:", "lookupVariable:", "errorShadowingVariable:"]
  46420. }),
  46421. $globals.SemanticAnalyzer);
  46422. $core.addMethod(
  46423. $core.method({
  46424. selector: "visitAssignmentNode:",
  46425. protocol: 'visiting',
  46426. fn: function (aNode){
  46427. var self=this;
  46428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46429. return $core.withContext(function($ctx1) {
  46430. //>>excludeEnd("ctx");
  46431. (
  46432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46433. $ctx1.supercall = true,
  46434. //>>excludeEnd("ctx");
  46435. $globals.SemanticAnalyzer.superclass.fn.prototype._visitAssignmentNode_.apply($recv(self), [aNode]));
  46436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46437. $ctx1.supercall = false;
  46438. //>>excludeEnd("ctx");;
  46439. $recv($recv(aNode)._left())._beAssigned();
  46440. return self;
  46441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46442. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  46443. //>>excludeEnd("ctx");
  46444. },
  46445. //>>excludeStart("ide", pragmas.excludeIdeData);
  46446. args: ["aNode"],
  46447. source: "visitAssignmentNode: aNode\x0a\x09super visitAssignmentNode: aNode.\x0a\x09aNode left beAssigned",
  46448. referencedClasses: [],
  46449. //>>excludeEnd("ide");
  46450. messageSends: ["visitAssignmentNode:", "beAssigned", "left"]
  46451. }),
  46452. $globals.SemanticAnalyzer);
  46453. $core.addMethod(
  46454. $core.method({
  46455. selector: "visitBlockNode:",
  46456. protocol: 'visiting',
  46457. fn: function (aNode){
  46458. var self=this;
  46459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46460. return $core.withContext(function($ctx1) {
  46461. //>>excludeEnd("ctx");
  46462. self._pushScope_(self._newBlockScope());
  46463. $recv(aNode)._scope_(self["@currentScope"]);
  46464. $recv(self["@currentScope"])._node_(aNode);
  46465. $recv(self["@currentScope"])._blockIndex_(self._nextBlockIndex());
  46466. $recv($recv(aNode)._parameters())._do_((function(each){
  46467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46468. return $core.withContext(function($ctx2) {
  46469. //>>excludeEnd("ctx");
  46470. self._validateVariableScope_(each);
  46471. return $recv(self["@currentScope"])._addArg_(each);
  46472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46473. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  46474. //>>excludeEnd("ctx");
  46475. }));
  46476. (
  46477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46478. $ctx1.supercall = true,
  46479. //>>excludeEnd("ctx");
  46480. $globals.SemanticAnalyzer.superclass.fn.prototype._visitBlockNode_.apply($recv(self), [aNode]));
  46481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46482. $ctx1.supercall = false;
  46483. //>>excludeEnd("ctx");;
  46484. self._popScope();
  46485. return self;
  46486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46487. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  46488. //>>excludeEnd("ctx");
  46489. },
  46490. //>>excludeStart("ide", pragmas.excludeIdeData);
  46491. args: ["aNode"],
  46492. 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",
  46493. referencedClasses: [],
  46494. //>>excludeEnd("ide");
  46495. messageSends: ["pushScope:", "newBlockScope", "scope:", "node:", "blockIndex:", "nextBlockIndex", "do:", "parameters", "validateVariableScope:", "addArg:", "visitBlockNode:", "popScope"]
  46496. }),
  46497. $globals.SemanticAnalyzer);
  46498. $core.addMethod(
  46499. $core.method({
  46500. selector: "visitCascadeNode:",
  46501. protocol: 'visiting',
  46502. fn: function (aNode){
  46503. var self=this;
  46504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46505. return $core.withContext(function($ctx1) {
  46506. //>>excludeEnd("ctx");
  46507. var $3,$2,$1;
  46508. (
  46509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46510. $ctx1.supercall = true,
  46511. //>>excludeEnd("ctx");
  46512. $globals.SemanticAnalyzer.superclass.fn.prototype._visitCascadeNode_.apply($recv(self), [aNode]));
  46513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46514. $ctx1.supercall = false;
  46515. //>>excludeEnd("ctx");;
  46516. $3=$recv(aNode)._nodes();
  46517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46518. $ctx1.sendIdx["nodes"]=1;
  46519. //>>excludeEnd("ctx");
  46520. $2=$recv($3)._first();
  46521. $1=$recv($2)._superSend();
  46522. if($core.assert($1)){
  46523. $recv($recv(aNode)._nodes())._do_((function(each){
  46524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46525. return $core.withContext(function($ctx2) {
  46526. //>>excludeEnd("ctx");
  46527. return $recv(each)._superSend_(true);
  46528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46529. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  46530. //>>excludeEnd("ctx");
  46531. }));
  46532. };
  46533. return self;
  46534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46535. }, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  46536. //>>excludeEnd("ctx");
  46537. },
  46538. //>>excludeStart("ide", pragmas.excludeIdeData);
  46539. args: ["aNode"],
  46540. source: "visitCascadeNode: aNode\x0a\x09super visitCascadeNode: aNode.\x0a\x09aNode nodes first superSend ifTrue: [\x0a\x09\x09aNode nodes do: [ :each | each superSend: true ] ]",
  46541. referencedClasses: [],
  46542. //>>excludeEnd("ide");
  46543. messageSends: ["visitCascadeNode:", "ifTrue:", "superSend", "first", "nodes", "do:", "superSend:"]
  46544. }),
  46545. $globals.SemanticAnalyzer);
  46546. $core.addMethod(
  46547. $core.method({
  46548. selector: "visitMethodNode:",
  46549. protocol: 'visiting',
  46550. fn: function (aNode){
  46551. var self=this;
  46552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46553. return $core.withContext(function($ctx1) {
  46554. //>>excludeEnd("ctx");
  46555. var $1;
  46556. self._pushScope_(self._newMethodScope());
  46557. $recv(aNode)._scope_(self["@currentScope"]);
  46558. $recv(self["@currentScope"])._node_(aNode);
  46559. $recv($recv(self._theClass())._allInstanceVariableNames())._do_((function(each){
  46560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46561. return $core.withContext(function($ctx2) {
  46562. //>>excludeEnd("ctx");
  46563. return $recv(self["@currentScope"])._addIVar_(each);
  46564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46565. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  46566. //>>excludeEnd("ctx");
  46567. }));
  46568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46569. $ctx1.sendIdx["do:"]=1;
  46570. //>>excludeEnd("ctx");
  46571. $recv($recv(aNode)._arguments())._do_((function(each){
  46572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46573. return $core.withContext(function($ctx2) {
  46574. //>>excludeEnd("ctx");
  46575. self._validateVariableScope_(each);
  46576. return $recv(self["@currentScope"])._addArg_(each);
  46577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46578. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  46579. //>>excludeEnd("ctx");
  46580. }));
  46581. (
  46582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46583. $ctx1.supercall = true,
  46584. //>>excludeEnd("ctx");
  46585. $globals.SemanticAnalyzer.superclass.fn.prototype._visitMethodNode_.apply($recv(self), [aNode]));
  46586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46587. $ctx1.supercall = false;
  46588. //>>excludeEnd("ctx");;
  46589. $recv(aNode)._classReferences_(self._classReferences());
  46590. $recv(aNode)._sendIndexes_(self._messageSends());
  46591. $1=$recv(aNode)._superSends_($recv(self._superSends())._keys());
  46592. self._popScope();
  46593. return self;
  46594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46595. }, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  46596. //>>excludeEnd("ctx");
  46597. },
  46598. //>>excludeStart("ide", pragmas.excludeIdeData);
  46599. args: ["aNode"],
  46600. 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",
  46601. referencedClasses: [],
  46602. //>>excludeEnd("ide");
  46603. messageSends: ["pushScope:", "newMethodScope", "scope:", "node:", "do:", "allInstanceVariableNames", "theClass", "addIVar:", "arguments", "validateVariableScope:", "addArg:", "visitMethodNode:", "classReferences:", "classReferences", "sendIndexes:", "messageSends", "superSends:", "keys", "superSends", "popScope"]
  46604. }),
  46605. $globals.SemanticAnalyzer);
  46606. $core.addMethod(
  46607. $core.method({
  46608. selector: "visitReturnNode:",
  46609. protocol: 'visiting',
  46610. fn: function (aNode){
  46611. var self=this;
  46612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46613. return $core.withContext(function($ctx1) {
  46614. //>>excludeEnd("ctx");
  46615. var $1;
  46616. $recv(aNode)._scope_(self["@currentScope"]);
  46617. $1=$recv(self["@currentScope"])._isMethodScope();
  46618. if($core.assert($1)){
  46619. $recv(self["@currentScope"])._localReturn_(true);
  46620. } else {
  46621. $recv($recv(self["@currentScope"])._methodScope())._addNonLocalReturn_(self["@currentScope"]);
  46622. };
  46623. (
  46624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46625. $ctx1.supercall = true,
  46626. //>>excludeEnd("ctx");
  46627. $globals.SemanticAnalyzer.superclass.fn.prototype._visitReturnNode_.apply($recv(self), [aNode]));
  46628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46629. $ctx1.supercall = false;
  46630. //>>excludeEnd("ctx");;
  46631. return self;
  46632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46633. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  46634. //>>excludeEnd("ctx");
  46635. },
  46636. //>>excludeStart("ide", pragmas.excludeIdeData);
  46637. args: ["aNode"],
  46638. 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",
  46639. referencedClasses: [],
  46640. //>>excludeEnd("ide");
  46641. messageSends: ["scope:", "ifTrue:ifFalse:", "isMethodScope", "localReturn:", "addNonLocalReturn:", "methodScope", "visitReturnNode:"]
  46642. }),
  46643. $globals.SemanticAnalyzer);
  46644. $core.addMethod(
  46645. $core.method({
  46646. selector: "visitSendNode:",
  46647. protocol: 'visiting',
  46648. fn: function (aNode){
  46649. var self=this;
  46650. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  46651. function $IRSendInliner(){return $globals.IRSendInliner||(typeof IRSendInliner=="undefined"?nil:IRSendInliner)}
  46652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46653. return $core.withContext(function($ctx1) {
  46654. //>>excludeEnd("ctx");
  46655. var $3,$2,$1,$4,$5,$6,$8,$9,$7,$11,$12,$10,$13,$14,$15,$17,$18,$16,$receiver;
  46656. $3=$recv(aNode)._receiver();
  46657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46658. $ctx1.sendIdx["receiver"]=1;
  46659. //>>excludeEnd("ctx");
  46660. $2=$recv($3)._value();
  46661. $1=$recv($2).__eq("super");
  46662. if($core.assert($1)){
  46663. $recv(aNode)._superSend_(true);
  46664. $4=$recv(aNode)._receiver();
  46665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46666. $ctx1.sendIdx["receiver"]=2;
  46667. //>>excludeEnd("ctx");
  46668. $recv($4)._value_("self");
  46669. $5=self._superSends();
  46670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46671. $ctx1.sendIdx["superSends"]=1;
  46672. //>>excludeEnd("ctx");
  46673. $6=$recv(aNode)._selector();
  46674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46675. $ctx1.sendIdx["selector"]=1;
  46676. //>>excludeEnd("ctx");
  46677. $recv($5)._at_ifAbsentPut_($6,(function(){
  46678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46679. return $core.withContext(function($ctx2) {
  46680. //>>excludeEnd("ctx");
  46681. return $recv($Set())._new();
  46682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46683. $ctx2.sendIdx["new"]=1;
  46684. //>>excludeEnd("ctx");
  46685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46686. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  46687. //>>excludeEnd("ctx");
  46688. }));
  46689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46690. $ctx1.sendIdx["at:ifAbsentPut:"]=1;
  46691. //>>excludeEnd("ctx");
  46692. $8=self._superSends();
  46693. $9=$recv(aNode)._selector();
  46694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46695. $ctx1.sendIdx["selector"]=2;
  46696. //>>excludeEnd("ctx");
  46697. $7=$recv($8)._at_($9);
  46698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46699. $ctx1.sendIdx["at:"]=1;
  46700. //>>excludeEnd("ctx");
  46701. $recv($7)._add_(aNode);
  46702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46703. $ctx1.sendIdx["add:"]=1;
  46704. //>>excludeEnd("ctx");
  46705. } else {
  46706. $11=$recv($IRSendInliner())._inlinedSelectors();
  46707. $12=$recv(aNode)._selector();
  46708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46709. $ctx1.sendIdx["selector"]=3;
  46710. //>>excludeEnd("ctx");
  46711. $10=$recv($11)._includes_($12);
  46712. if($core.assert($10)){
  46713. $recv(aNode)._shouldBeInlined_(true);
  46714. $13=$recv(aNode)._receiver();
  46715. if(($receiver = $13) == null || $receiver.isNil){
  46716. $13;
  46717. } else {
  46718. var receiver;
  46719. receiver=$receiver;
  46720. $recv(receiver)._shouldBeAliased_(true);
  46721. };
  46722. };
  46723. };
  46724. $14=self._messageSends();
  46725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46726. $ctx1.sendIdx["messageSends"]=1;
  46727. //>>excludeEnd("ctx");
  46728. $15=$recv(aNode)._selector();
  46729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46730. $ctx1.sendIdx["selector"]=4;
  46731. //>>excludeEnd("ctx");
  46732. $recv($14)._at_ifAbsentPut_($15,(function(){
  46733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46734. return $core.withContext(function($ctx2) {
  46735. //>>excludeEnd("ctx");
  46736. return $recv($Set())._new();
  46737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46738. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  46739. //>>excludeEnd("ctx");
  46740. }));
  46741. $17=self._messageSends();
  46742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46743. $ctx1.sendIdx["messageSends"]=2;
  46744. //>>excludeEnd("ctx");
  46745. $18=$recv(aNode)._selector();
  46746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46747. $ctx1.sendIdx["selector"]=5;
  46748. //>>excludeEnd("ctx");
  46749. $16=$recv($17)._at_($18);
  46750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46751. $ctx1.sendIdx["at:"]=2;
  46752. //>>excludeEnd("ctx");
  46753. $recv($16)._add_(aNode);
  46754. $recv(aNode)._index_($recv($recv(self._messageSends())._at_($recv(aNode)._selector()))._size());
  46755. (
  46756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46757. $ctx1.supercall = true,
  46758. //>>excludeEnd("ctx");
  46759. $globals.SemanticAnalyzer.superclass.fn.prototype._visitSendNode_.apply($recv(self), [aNode]));
  46760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46761. $ctx1.supercall = false;
  46762. //>>excludeEnd("ctx");;
  46763. return self;
  46764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46765. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  46766. //>>excludeEnd("ctx");
  46767. },
  46768. //>>excludeStart("ide", pragmas.excludeIdeData);
  46769. args: ["aNode"],
  46770. 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",
  46771. referencedClasses: ["Set", "IRSendInliner"],
  46772. //>>excludeEnd("ide");
  46773. messageSends: ["ifTrue:ifFalse:", "=", "value", "receiver", "superSend:", "value:", "at:ifAbsentPut:", "superSends", "selector", "new", "add:", "at:", "ifTrue:", "includes:", "inlinedSelectors", "shouldBeInlined:", "ifNotNil:", "shouldBeAliased:", "messageSends", "index:", "size", "visitSendNode:"]
  46774. }),
  46775. $globals.SemanticAnalyzer);
  46776. $core.addMethod(
  46777. $core.method({
  46778. selector: "visitSequenceNode:",
  46779. protocol: 'visiting',
  46780. fn: function (aNode){
  46781. var self=this;
  46782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46783. return $core.withContext(function($ctx1) {
  46784. //>>excludeEnd("ctx");
  46785. $recv($recv(aNode)._temps())._do_((function(each){
  46786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46787. return $core.withContext(function($ctx2) {
  46788. //>>excludeEnd("ctx");
  46789. self._validateVariableScope_(each);
  46790. return $recv(self["@currentScope"])._addTemp_(each);
  46791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46792. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  46793. //>>excludeEnd("ctx");
  46794. }));
  46795. (
  46796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46797. $ctx1.supercall = true,
  46798. //>>excludeEnd("ctx");
  46799. $globals.SemanticAnalyzer.superclass.fn.prototype._visitSequenceNode_.apply($recv(self), [aNode]));
  46800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46801. $ctx1.supercall = false;
  46802. //>>excludeEnd("ctx");;
  46803. return self;
  46804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46805. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  46806. //>>excludeEnd("ctx");
  46807. },
  46808. //>>excludeStart("ide", pragmas.excludeIdeData);
  46809. args: ["aNode"],
  46810. source: "visitSequenceNode: aNode\x0a\x09aNode temps do: [ :each |\x0a\x09\x09self validateVariableScope: each.\x0a\x09\x09currentScope addTemp: each ].\x0a\x0a\x09super visitSequenceNode: aNode",
  46811. referencedClasses: [],
  46812. //>>excludeEnd("ide");
  46813. messageSends: ["do:", "temps", "validateVariableScope:", "addTemp:", "visitSequenceNode:"]
  46814. }),
  46815. $globals.SemanticAnalyzer);
  46816. $core.addMethod(
  46817. $core.method({
  46818. selector: "visitVariableNode:",
  46819. protocol: 'visiting',
  46820. fn: function (aNode){
  46821. var self=this;
  46822. var binding;
  46823. function $ClassRefVar(){return $globals.ClassRefVar||(typeof ClassRefVar=="undefined"?nil:ClassRefVar)}
  46824. function $UnknownVar(){return $globals.UnknownVar||(typeof UnknownVar=="undefined"?nil:UnknownVar)}
  46825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46826. return $core.withContext(function($ctx1) {
  46827. //>>excludeEnd("ctx");
  46828. var $1,$3,$2,$4,$5,$6,$7,$8,$9,$10,$11,$receiver;
  46829. binding=$recv(self["@currentScope"])._lookupVariable_(aNode);
  46830. $1=binding;
  46831. if(($receiver = $1) == null || $receiver.isNil){
  46832. $3=$recv(aNode)._value();
  46833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46834. $ctx1.sendIdx["value"]=1;
  46835. //>>excludeEnd("ctx");
  46836. $2=$recv($3)._isCapitalized();
  46837. if($core.assert($2)){
  46838. $4=$recv($ClassRefVar())._new();
  46839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46840. $ctx1.sendIdx["new"]=1;
  46841. //>>excludeEnd("ctx");
  46842. $5=$4;
  46843. $6=$recv(aNode)._value();
  46844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46845. $ctx1.sendIdx["value"]=2;
  46846. //>>excludeEnd("ctx");
  46847. $recv($5)._name_($6);
  46848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46849. $ctx1.sendIdx["name:"]=1;
  46850. //>>excludeEnd("ctx");
  46851. $7=$recv($4)._yourself();
  46852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46853. $ctx1.sendIdx["yourself"]=1;
  46854. //>>excludeEnd("ctx");
  46855. binding=$7;
  46856. binding;
  46857. $8=self._classReferences();
  46858. $9=$recv(aNode)._value();
  46859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46860. $ctx1.sendIdx["value"]=3;
  46861. //>>excludeEnd("ctx");
  46862. $recv($8)._add_($9);
  46863. } else {
  46864. self._errorUnknownVariable_(aNode);
  46865. $10=$recv($UnknownVar())._new();
  46866. $recv($10)._name_($recv(aNode)._value());
  46867. $11=$recv($10)._yourself();
  46868. binding=$11;
  46869. binding;
  46870. };
  46871. } else {
  46872. $1;
  46873. };
  46874. $recv(aNode)._binding_(binding);
  46875. return self;
  46876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46877. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode,binding:binding},$globals.SemanticAnalyzer)});
  46878. //>>excludeEnd("ctx");
  46879. },
  46880. //>>excludeStart("ide", pragmas.excludeIdeData);
  46881. args: ["aNode"],
  46882. 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.",
  46883. referencedClasses: ["ClassRefVar", "UnknownVar"],
  46884. //>>excludeEnd("ide");
  46885. messageSends: ["lookupVariable:", "ifNil:", "ifTrue:ifFalse:", "isCapitalized", "value", "name:", "new", "yourself", "add:", "classReferences", "errorUnknownVariable:", "binding:"]
  46886. }),
  46887. $globals.SemanticAnalyzer);
  46888. $core.addMethod(
  46889. $core.method({
  46890. selector: "on:",
  46891. protocol: 'instance creation',
  46892. fn: function (aClass){
  46893. var self=this;
  46894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46895. return $core.withContext(function($ctx1) {
  46896. //>>excludeEnd("ctx");
  46897. var $2,$3,$1;
  46898. $2=self._new();
  46899. $recv($2)._theClass_(aClass);
  46900. $3=$recv($2)._yourself();
  46901. $1=$3;
  46902. return $1;
  46903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46904. }, function($ctx1) {$ctx1.fill(self,"on:",{aClass:aClass},$globals.SemanticAnalyzer.klass)});
  46905. //>>excludeEnd("ctx");
  46906. },
  46907. //>>excludeStart("ide", pragmas.excludeIdeData);
  46908. args: ["aClass"],
  46909. source: "on: aClass\x0a\x09^ self new\x0a\x09\x09theClass: aClass;\x0a\x09\x09yourself",
  46910. referencedClasses: [],
  46911. //>>excludeEnd("ide");
  46912. messageSends: ["theClass:", "new", "yourself"]
  46913. }),
  46914. $globals.SemanticAnalyzer.klass);
  46915. });
  46916. 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){
  46917. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  46918. $core.addPackage('Compiler-Interpreter');
  46919. $core.packages["Compiler-Interpreter"].innerEval = function (expr) { return eval(expr); };
  46920. $core.packages["Compiler-Interpreter"].transport = {"type":"amd","amdNamespace":"amber_core"};
  46921. $core.addClass('AIBlockClosure', $globals.BlockClosure, ['node', 'outerContext'], 'Compiler-Interpreter');
  46922. //>>excludeStart("ide", pragmas.excludeIdeData);
  46923. $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`).";
  46924. //>>excludeEnd("ide");
  46925. $core.addMethod(
  46926. $core.method({
  46927. selector: "applyTo:arguments:",
  46928. protocol: 'evaluating',
  46929. fn: function (anObject,aCollection){
  46930. var self=this;
  46931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46932. return $core.withContext(function($ctx1) {
  46933. //>>excludeEnd("ctx");
  46934. self._interpreterError();
  46935. return self;
  46936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46937. }, function($ctx1) {$ctx1.fill(self,"applyTo:arguments:",{anObject:anObject,aCollection:aCollection},$globals.AIBlockClosure)});
  46938. //>>excludeEnd("ctx");
  46939. },
  46940. //>>excludeStart("ide", pragmas.excludeIdeData);
  46941. args: ["anObject", "aCollection"],
  46942. source: "applyTo: anObject arguments: aCollection\x0a\x09self interpreterError",
  46943. referencedClasses: [],
  46944. //>>excludeEnd("ide");
  46945. messageSends: ["interpreterError"]
  46946. }),
  46947. $globals.AIBlockClosure);
  46948. $core.addMethod(
  46949. $core.method({
  46950. selector: "compiledSource",
  46951. protocol: 'accessing',
  46952. fn: function (){
  46953. var self=this;
  46954. return "[ AST Block closure ]";
  46955. },
  46956. //>>excludeStart("ide", pragmas.excludeIdeData);
  46957. args: [],
  46958. source: "compiledSource\x0a\x09\x22Unlike blocks, the receiver doesn't represent a JS function\x22\x0a\x09\x0a\x09^ '[ AST Block closure ]'",
  46959. referencedClasses: [],
  46960. //>>excludeEnd("ide");
  46961. messageSends: []
  46962. }),
  46963. $globals.AIBlockClosure);
  46964. $core.addMethod(
  46965. $core.method({
  46966. selector: "currySelf",
  46967. protocol: 'converting',
  46968. fn: function (){
  46969. var self=this;
  46970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46971. return $core.withContext(function($ctx1) {
  46972. //>>excludeEnd("ctx");
  46973. self._interpreterError();
  46974. return self;
  46975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46976. }, function($ctx1) {$ctx1.fill(self,"currySelf",{},$globals.AIBlockClosure)});
  46977. //>>excludeEnd("ctx");
  46978. },
  46979. //>>excludeStart("ide", pragmas.excludeIdeData);
  46980. args: [],
  46981. source: "currySelf\x0a\x09self interpreterError",
  46982. referencedClasses: [],
  46983. //>>excludeEnd("ide");
  46984. messageSends: ["interpreterError"]
  46985. }),
  46986. $globals.AIBlockClosure);
  46987. $core.addMethod(
  46988. $core.method({
  46989. selector: "initializeWithContext:node:",
  46990. protocol: 'initialization',
  46991. fn: function (aContext,aNode){
  46992. var self=this;
  46993. self["@node"]=aNode;
  46994. self["@outerContext"]=aContext;
  46995. return self;
  46996. },
  46997. //>>excludeStart("ide", pragmas.excludeIdeData);
  46998. args: ["aContext", "aNode"],
  46999. source: "initializeWithContext: aContext node: aNode\x0a\x09node := aNode.\x0a\x09outerContext := aContext",
  47000. referencedClasses: [],
  47001. //>>excludeEnd("ide");
  47002. messageSends: []
  47003. }),
  47004. $globals.AIBlockClosure);
  47005. $core.addMethod(
  47006. $core.method({
  47007. selector: "interpreterError",
  47008. protocol: 'error handling',
  47009. fn: function (){
  47010. var self=this;
  47011. function $ASTInterpreterError(){return $globals.ASTInterpreterError||(typeof ASTInterpreterError=="undefined"?nil:ASTInterpreterError)}
  47012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47013. return $core.withContext(function($ctx1) {
  47014. //>>excludeEnd("ctx");
  47015. $recv($ASTInterpreterError())._signal_("Method cannot be interpreted by the interpreter.");
  47016. return self;
  47017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47018. }, function($ctx1) {$ctx1.fill(self,"interpreterError",{},$globals.AIBlockClosure)});
  47019. //>>excludeEnd("ctx");
  47020. },
  47021. //>>excludeStart("ide", pragmas.excludeIdeData);
  47022. args: [],
  47023. source: "interpreterError\x0a\x09ASTInterpreterError signal: 'Method cannot be interpreted by the interpreter.'",
  47024. referencedClasses: ["ASTInterpreterError"],
  47025. //>>excludeEnd("ide");
  47026. messageSends: ["signal:"]
  47027. }),
  47028. $globals.AIBlockClosure);
  47029. $core.addMethod(
  47030. $core.method({
  47031. selector: "numArgs",
  47032. protocol: 'accessing',
  47033. fn: function (){
  47034. var self=this;
  47035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47036. return $core.withContext(function($ctx1) {
  47037. //>>excludeEnd("ctx");
  47038. var $1;
  47039. $1=$recv($recv(self["@node"])._temps())._size();
  47040. return $1;
  47041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47042. }, function($ctx1) {$ctx1.fill(self,"numArgs",{},$globals.AIBlockClosure)});
  47043. //>>excludeEnd("ctx");
  47044. },
  47045. //>>excludeStart("ide", pragmas.excludeIdeData);
  47046. args: [],
  47047. source: "numArgs\x0a\x09^ node temps size",
  47048. referencedClasses: [],
  47049. //>>excludeEnd("ide");
  47050. messageSends: ["size", "temps"]
  47051. }),
  47052. $globals.AIBlockClosure);
  47053. $core.addMethod(
  47054. $core.method({
  47055. selector: "value",
  47056. protocol: 'evaluating',
  47057. fn: function (){
  47058. var self=this;
  47059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47060. return $core.withContext(function($ctx1) {
  47061. //>>excludeEnd("ctx");
  47062. var $1;
  47063. $1=self._valueWithPossibleArguments_([]);
  47064. return $1;
  47065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47066. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.AIBlockClosure)});
  47067. //>>excludeEnd("ctx");
  47068. },
  47069. //>>excludeStart("ide", pragmas.excludeIdeData);
  47070. args: [],
  47071. source: "value\x0a\x09^ self valueWithPossibleArguments: #()",
  47072. referencedClasses: [],
  47073. //>>excludeEnd("ide");
  47074. messageSends: ["valueWithPossibleArguments:"]
  47075. }),
  47076. $globals.AIBlockClosure);
  47077. $core.addMethod(
  47078. $core.method({
  47079. selector: "value:",
  47080. protocol: 'evaluating',
  47081. fn: function (anArgument){
  47082. var self=this;
  47083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47084. return $core.withContext(function($ctx1) {
  47085. //>>excludeEnd("ctx");
  47086. var $1;
  47087. $1=self._valueWithPossibleArguments_([anArgument]);
  47088. return $1;
  47089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47090. }, function($ctx1) {$ctx1.fill(self,"value:",{anArgument:anArgument},$globals.AIBlockClosure)});
  47091. //>>excludeEnd("ctx");
  47092. },
  47093. //>>excludeStart("ide", pragmas.excludeIdeData);
  47094. args: ["anArgument"],
  47095. source: "value: anArgument\x0a\x09^ self valueWithPossibleArguments: {anArgument}",
  47096. referencedClasses: [],
  47097. //>>excludeEnd("ide");
  47098. messageSends: ["valueWithPossibleArguments:"]
  47099. }),
  47100. $globals.AIBlockClosure);
  47101. $core.addMethod(
  47102. $core.method({
  47103. selector: "value:value:",
  47104. protocol: 'evaluating',
  47105. fn: function (firstArgument,secondArgument){
  47106. var self=this;
  47107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47108. return $core.withContext(function($ctx1) {
  47109. //>>excludeEnd("ctx");
  47110. var $1;
  47111. $1=self._valueWithPossibleArguments_([firstArgument,secondArgument]);
  47112. return $1;
  47113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47114. }, function($ctx1) {$ctx1.fill(self,"value:value:",{firstArgument:firstArgument,secondArgument:secondArgument},$globals.AIBlockClosure)});
  47115. //>>excludeEnd("ctx");
  47116. },
  47117. //>>excludeStart("ide", pragmas.excludeIdeData);
  47118. args: ["firstArgument", "secondArgument"],
  47119. source: "value: firstArgument value: secondArgument\x0a\x09^ self valueWithPossibleArguments: {firstArgument . secondArgument}",
  47120. referencedClasses: [],
  47121. //>>excludeEnd("ide");
  47122. messageSends: ["valueWithPossibleArguments:"]
  47123. }),
  47124. $globals.AIBlockClosure);
  47125. $core.addMethod(
  47126. $core.method({
  47127. selector: "value:value:value:",
  47128. protocol: 'evaluating',
  47129. fn: function (firstArgument,secondArgument,thirdArgument){
  47130. var self=this;
  47131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47132. return $core.withContext(function($ctx1) {
  47133. //>>excludeEnd("ctx");
  47134. var $1;
  47135. $1=self._valueWithPossibleArguments_([firstArgument,secondArgument,thirdArgument]);
  47136. return $1;
  47137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47138. }, function($ctx1) {$ctx1.fill(self,"value:value:value:",{firstArgument:firstArgument,secondArgument:secondArgument,thirdArgument:thirdArgument},$globals.AIBlockClosure)});
  47139. //>>excludeEnd("ctx");
  47140. },
  47141. //>>excludeStart("ide", pragmas.excludeIdeData);
  47142. args: ["firstArgument", "secondArgument", "thirdArgument"],
  47143. source: "value: firstArgument value: secondArgument value: thirdArgument\x0a\x09^ self valueWithPossibleArguments: {firstArgument . secondArgument . thirdArgument}",
  47144. referencedClasses: [],
  47145. //>>excludeEnd("ide");
  47146. messageSends: ["valueWithPossibleArguments:"]
  47147. }),
  47148. $globals.AIBlockClosure);
  47149. $core.addMethod(
  47150. $core.method({
  47151. selector: "valueWithPossibleArguments:",
  47152. protocol: 'evaluating',
  47153. fn: function (aCollection){
  47154. var self=this;
  47155. var context,sequenceNode;
  47156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47157. return $core.withContext(function($ctx1) {
  47158. //>>excludeEnd("ctx");
  47159. var $1,$2,$3,$4,$5,$6;
  47160. context=$recv(self["@outerContext"])._newInnerContext();
  47161. $1=$recv($recv($recv(self["@node"])._nodes())._first())._copy();
  47162. $recv($1)._parent_(nil);
  47163. $2=$recv($1)._yourself();
  47164. sequenceNode=$2;
  47165. $recv($recv(sequenceNode)._temps())._do_((function(each){
  47166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47167. return $core.withContext(function($ctx2) {
  47168. //>>excludeEnd("ctx");
  47169. return $recv(context)._defineLocal_(each);
  47170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47171. $ctx2.sendIdx["defineLocal:"]=1;
  47172. //>>excludeEnd("ctx");
  47173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47174. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  47175. //>>excludeEnd("ctx");
  47176. }));
  47177. $recv($recv(self["@node"])._parameters())._withIndexDo_((function(each,index){
  47178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47179. return $core.withContext(function($ctx2) {
  47180. //>>excludeEnd("ctx");
  47181. $recv(context)._defineLocal_(each);
  47182. return $recv(context)._localAt_put_(each,$recv(aCollection)._at_ifAbsent_(index,(function(){
  47183. return nil;
  47184. })));
  47185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47186. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,2)});
  47187. //>>excludeEnd("ctx");
  47188. }));
  47189. $3=$recv(context)._interpreter();
  47190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47191. $ctx1.sendIdx["interpreter"]=1;
  47192. //>>excludeEnd("ctx");
  47193. $recv($3)._node_($recv(sequenceNode)._nextChild());
  47194. $4=$recv($3)._proceed();
  47195. $5=$recv(self["@outerContext"])._interpreter();
  47196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47197. $ctx1.sendIdx["interpreter"]=2;
  47198. //>>excludeEnd("ctx");
  47199. $recv($5)._setNonLocalReturnFromContext_(context);
  47200. $6=$recv($recv(context)._interpreter())._pop();
  47201. return $6;
  47202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47203. }, function($ctx1) {$ctx1.fill(self,"valueWithPossibleArguments:",{aCollection:aCollection,context:context,sequenceNode:sequenceNode},$globals.AIBlockClosure)});
  47204. //>>excludeEnd("ctx");
  47205. },
  47206. //>>excludeStart("ide", pragmas.excludeIdeData);
  47207. args: ["aCollection"],
  47208. 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",
  47209. referencedClasses: [],
  47210. //>>excludeEnd("ide");
  47211. messageSends: ["newInnerContext", "parent:", "copy", "first", "nodes", "yourself", "do:", "temps", "defineLocal:", "withIndexDo:", "parameters", "localAt:put:", "at:ifAbsent:", "node:", "interpreter", "nextChild", "proceed", "setNonLocalReturnFromContext:", "pop"]
  47212. }),
  47213. $globals.AIBlockClosure);
  47214. $core.addMethod(
  47215. $core.method({
  47216. selector: "forContext:node:",
  47217. protocol: 'instance creation',
  47218. fn: function (aContext,aNode){
  47219. var self=this;
  47220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47221. return $core.withContext(function($ctx1) {
  47222. //>>excludeEnd("ctx");
  47223. var $2,$3,$1;
  47224. $2=self._new();
  47225. $recv($2)._initializeWithContext_node_(aContext,aNode);
  47226. $3=$recv($2)._yourself();
  47227. $1=$3;
  47228. return $1;
  47229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47230. }, function($ctx1) {$ctx1.fill(self,"forContext:node:",{aContext:aContext,aNode:aNode},$globals.AIBlockClosure.klass)});
  47231. //>>excludeEnd("ctx");
  47232. },
  47233. //>>excludeStart("ide", pragmas.excludeIdeData);
  47234. args: ["aContext", "aNode"],
  47235. source: "forContext: aContext node: aNode\x0a\x09^ self new\x0a\x09\x09initializeWithContext: aContext node: aNode;\x0a\x09\x09yourself",
  47236. referencedClasses: [],
  47237. //>>excludeEnd("ide");
  47238. messageSends: ["initializeWithContext:node:", "new", "yourself"]
  47239. }),
  47240. $globals.AIBlockClosure.klass);
  47241. $core.addClass('AIContext', $globals.MethodContext, ['outerContext', 'innerContext', 'pc', 'locals', 'selector', 'index', 'sendIndexes', 'evaluatedSelector', 'ast', 'interpreter', 'supercall'], 'Compiler-Interpreter');
  47242. //>>excludeStart("ide", pragmas.excludeIdeData);
  47243. $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)";
  47244. //>>excludeEnd("ide");
  47245. $core.addMethod(
  47246. $core.method({
  47247. selector: "arguments",
  47248. protocol: 'interpreting',
  47249. fn: function (){
  47250. var self=this;
  47251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47252. return $core.withContext(function($ctx1) {
  47253. //>>excludeEnd("ctx");
  47254. var $1;
  47255. $1=$recv($recv(self._ast())._arguments())._collect_((function(each){
  47256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47257. return $core.withContext(function($ctx2) {
  47258. //>>excludeEnd("ctx");
  47259. return self._localAt_ifAbsent_(each,(function(){
  47260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47261. return $core.withContext(function($ctx3) {
  47262. //>>excludeEnd("ctx");
  47263. return self._error_("Argument not in context");
  47264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47265. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  47266. //>>excludeEnd("ctx");
  47267. }));
  47268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47269. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  47270. //>>excludeEnd("ctx");
  47271. }));
  47272. return $1;
  47273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47274. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.AIContext)});
  47275. //>>excludeEnd("ctx");
  47276. },
  47277. //>>excludeStart("ide", pragmas.excludeIdeData);
  47278. args: [],
  47279. source: "arguments\x0a\x09^ self ast arguments collect: [ :each |\x0a\x09\x09self localAt: each ifAbsent: [ self error: 'Argument not in context' ] ]",
  47280. referencedClasses: [],
  47281. //>>excludeEnd("ide");
  47282. messageSends: ["collect:", "arguments", "ast", "localAt:ifAbsent:", "error:"]
  47283. }),
  47284. $globals.AIContext);
  47285. $core.addMethod(
  47286. $core.method({
  47287. selector: "ast",
  47288. protocol: 'interpreting',
  47289. fn: function (){
  47290. var self=this;
  47291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47292. return $core.withContext(function($ctx1) {
  47293. //>>excludeEnd("ctx");
  47294. var $1,$3,$2,$4,$5,$receiver;
  47295. $1=self._isBlockContext();
  47296. if($core.assert($1)){
  47297. $3=self._outerContext();
  47298. if(($receiver = $3) == null || $receiver.isNil){
  47299. $2=$3;
  47300. } else {
  47301. var context;
  47302. context=$receiver;
  47303. $2=$recv(context)._ast();
  47304. };
  47305. return $2;
  47306. };
  47307. $4=self["@ast"];
  47308. if(($receiver = $4) == null || $receiver.isNil){
  47309. self._initializeAST();
  47310. } else {
  47311. $4;
  47312. };
  47313. $5=self["@ast"];
  47314. return $5;
  47315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47316. }, function($ctx1) {$ctx1.fill(self,"ast",{},$globals.AIContext)});
  47317. //>>excludeEnd("ctx");
  47318. },
  47319. //>>excludeStart("ide", pragmas.excludeIdeData);
  47320. args: [],
  47321. source: "ast\x0a\x09self isBlockContext ifTrue: [ \x0a\x09\x09^ self outerContext ifNotNil: [ :context | context ast ] ].\x0a\x0a\x09ast ifNil: [ self initializeAST ].\x0a\x09^ ast",
  47322. referencedClasses: [],
  47323. //>>excludeEnd("ide");
  47324. messageSends: ["ifTrue:", "isBlockContext", "ifNotNil:", "outerContext", "ast", "ifNil:", "initializeAST"]
  47325. }),
  47326. $globals.AIContext);
  47327. $core.addMethod(
  47328. $core.method({
  47329. selector: "basicLocalAt:",
  47330. protocol: 'private',
  47331. fn: function (aString){
  47332. var self=this;
  47333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47334. return $core.withContext(function($ctx1) {
  47335. //>>excludeEnd("ctx");
  47336. var $1;
  47337. $1=$recv(self._locals())._at_(aString);
  47338. return $1;
  47339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47340. }, function($ctx1) {$ctx1.fill(self,"basicLocalAt:",{aString:aString},$globals.AIContext)});
  47341. //>>excludeEnd("ctx");
  47342. },
  47343. //>>excludeStart("ide", pragmas.excludeIdeData);
  47344. args: ["aString"],
  47345. source: "basicLocalAt: aString\x0a\x09^ self locals at: aString",
  47346. referencedClasses: [],
  47347. //>>excludeEnd("ide");
  47348. messageSends: ["at:", "locals"]
  47349. }),
  47350. $globals.AIContext);
  47351. $core.addMethod(
  47352. $core.method({
  47353. selector: "basicLocalAt:put:",
  47354. protocol: 'private',
  47355. fn: function (aString,anObject){
  47356. var self=this;
  47357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47358. return $core.withContext(function($ctx1) {
  47359. //>>excludeEnd("ctx");
  47360. $recv(self._locals())._at_put_(aString,anObject);
  47361. return self;
  47362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47363. }, function($ctx1) {$ctx1.fill(self,"basicLocalAt:put:",{aString:aString,anObject:anObject},$globals.AIContext)});
  47364. //>>excludeEnd("ctx");
  47365. },
  47366. //>>excludeStart("ide", pragmas.excludeIdeData);
  47367. args: ["aString", "anObject"],
  47368. source: "basicLocalAt: aString put: anObject\x0a\x09self locals at: aString put: anObject",
  47369. referencedClasses: [],
  47370. //>>excludeEnd("ide");
  47371. messageSends: ["at:put:", "locals"]
  47372. }),
  47373. $globals.AIContext);
  47374. $core.addMethod(
  47375. $core.method({
  47376. selector: "basicReceiver",
  47377. protocol: 'interpreting',
  47378. fn: function (){
  47379. var self=this;
  47380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47381. return $core.withContext(function($ctx1) {
  47382. //>>excludeEnd("ctx");
  47383. var $1;
  47384. $1=self._localAt_("self");
  47385. return $1;
  47386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47387. }, function($ctx1) {$ctx1.fill(self,"basicReceiver",{},$globals.AIContext)});
  47388. //>>excludeEnd("ctx");
  47389. },
  47390. //>>excludeStart("ide", pragmas.excludeIdeData);
  47391. args: [],
  47392. source: "basicReceiver\x0a\x09^ self localAt: 'self'",
  47393. referencedClasses: [],
  47394. //>>excludeEnd("ide");
  47395. messageSends: ["localAt:"]
  47396. }),
  47397. $globals.AIContext);
  47398. $core.addMethod(
  47399. $core.method({
  47400. selector: "defineLocal:",
  47401. protocol: 'accessing',
  47402. fn: function (aString){
  47403. var self=this;
  47404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47405. return $core.withContext(function($ctx1) {
  47406. //>>excludeEnd("ctx");
  47407. $recv(self._locals())._at_put_(aString,nil);
  47408. return self;
  47409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47410. }, function($ctx1) {$ctx1.fill(self,"defineLocal:",{aString:aString},$globals.AIContext)});
  47411. //>>excludeEnd("ctx");
  47412. },
  47413. //>>excludeStart("ide", pragmas.excludeIdeData);
  47414. args: ["aString"],
  47415. source: "defineLocal: aString\x0a\x09self locals at: aString put: nil",
  47416. referencedClasses: [],
  47417. //>>excludeEnd("ide");
  47418. messageSends: ["at:put:", "locals"]
  47419. }),
  47420. $globals.AIContext);
  47421. $core.addMethod(
  47422. $core.method({
  47423. selector: "evaluate:on:",
  47424. protocol: 'evaluating',
  47425. fn: function (aString,anEvaluator){
  47426. var self=this;
  47427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47428. return $core.withContext(function($ctx1) {
  47429. //>>excludeEnd("ctx");
  47430. var $1;
  47431. $1=$recv(anEvaluator)._evaluate_context_(aString,self);
  47432. return $1;
  47433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47434. }, function($ctx1) {$ctx1.fill(self,"evaluate:on:",{aString:aString,anEvaluator:anEvaluator},$globals.AIContext)});
  47435. //>>excludeEnd("ctx");
  47436. },
  47437. //>>excludeStart("ide", pragmas.excludeIdeData);
  47438. args: ["aString", "anEvaluator"],
  47439. source: "evaluate: aString on: anEvaluator\x0a\x09^ anEvaluator evaluate: aString context: self",
  47440. referencedClasses: [],
  47441. //>>excludeEnd("ide");
  47442. messageSends: ["evaluate:context:"]
  47443. }),
  47444. $globals.AIContext);
  47445. $core.addMethod(
  47446. $core.method({
  47447. selector: "evaluateNode:",
  47448. protocol: 'evaluating',
  47449. fn: function (aNode){
  47450. var self=this;
  47451. function $ASTInterpreter(){return $globals.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
  47452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47453. return $core.withContext(function($ctx1) {
  47454. //>>excludeEnd("ctx");
  47455. var $2,$3,$1;
  47456. $2=$recv($ASTInterpreter())._new();
  47457. $recv($2)._context_(self);
  47458. $recv($2)._node_($recv(aNode)._nextChild());
  47459. $recv($2)._proceed();
  47460. $3=$recv($2)._result();
  47461. $1=$3;
  47462. return $1;
  47463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47464. }, function($ctx1) {$ctx1.fill(self,"evaluateNode:",{aNode:aNode},$globals.AIContext)});
  47465. //>>excludeEnd("ctx");
  47466. },
  47467. //>>excludeStart("ide", pragmas.excludeIdeData);
  47468. args: ["aNode"],
  47469. source: "evaluateNode: aNode\x0a\x09^ ASTInterpreter new\x0a\x09\x09context: self;\x0a\x09\x09node: aNode nextChild;\x0a\x09\x09proceed;\x0a\x09\x09result",
  47470. referencedClasses: ["ASTInterpreter"],
  47471. //>>excludeEnd("ide");
  47472. messageSends: ["context:", "new", "node:", "nextChild", "proceed", "result"]
  47473. }),
  47474. $globals.AIContext);
  47475. $core.addMethod(
  47476. $core.method({
  47477. selector: "evaluatedSelector",
  47478. protocol: 'accessing',
  47479. fn: function (){
  47480. var self=this;
  47481. var $1;
  47482. $1=self["@evaluatedSelector"];
  47483. return $1;
  47484. },
  47485. //>>excludeStart("ide", pragmas.excludeIdeData);
  47486. args: [],
  47487. source: "evaluatedSelector\x0a\x09^ evaluatedSelector",
  47488. referencedClasses: [],
  47489. //>>excludeEnd("ide");
  47490. messageSends: []
  47491. }),
  47492. $globals.AIContext);
  47493. $core.addMethod(
  47494. $core.method({
  47495. selector: "evaluatedSelector:",
  47496. protocol: 'accessing',
  47497. fn: function (aString){
  47498. var self=this;
  47499. self["@evaluatedSelector"]=aString;
  47500. return self;
  47501. },
  47502. //>>excludeStart("ide", pragmas.excludeIdeData);
  47503. args: ["aString"],
  47504. source: "evaluatedSelector: aString\x0a\x09evaluatedSelector := aString",
  47505. referencedClasses: [],
  47506. //>>excludeEnd("ide");
  47507. messageSends: []
  47508. }),
  47509. $globals.AIContext);
  47510. $core.addMethod(
  47511. $core.method({
  47512. selector: "index",
  47513. protocol: 'accessing',
  47514. fn: function (){
  47515. var self=this;
  47516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47517. return $core.withContext(function($ctx1) {
  47518. //>>excludeEnd("ctx");
  47519. var $2,$1,$receiver;
  47520. $2=self["@index"];
  47521. if(($receiver = $2) == null || $receiver.isNil){
  47522. $1=(0);
  47523. } else {
  47524. $1=$2;
  47525. };
  47526. return $1;
  47527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47528. }, function($ctx1) {$ctx1.fill(self,"index",{},$globals.AIContext)});
  47529. //>>excludeEnd("ctx");
  47530. },
  47531. //>>excludeStart("ide", pragmas.excludeIdeData);
  47532. args: [],
  47533. source: "index\x0a\x09^ index ifNil: [ 0 ]",
  47534. referencedClasses: [],
  47535. //>>excludeEnd("ide");
  47536. messageSends: ["ifNil:"]
  47537. }),
  47538. $globals.AIContext);
  47539. $core.addMethod(
  47540. $core.method({
  47541. selector: "index:",
  47542. protocol: 'accessing',
  47543. fn: function (anInteger){
  47544. var self=this;
  47545. self["@index"]=anInteger;
  47546. return self;
  47547. },
  47548. //>>excludeStart("ide", pragmas.excludeIdeData);
  47549. args: ["anInteger"],
  47550. source: "index: anInteger\x0a\x09index := anInteger",
  47551. referencedClasses: [],
  47552. //>>excludeEnd("ide");
  47553. messageSends: []
  47554. }),
  47555. $globals.AIContext);
  47556. $core.addMethod(
  47557. $core.method({
  47558. selector: "initializeAST",
  47559. protocol: 'initialization',
  47560. fn: function (){
  47561. var self=this;
  47562. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  47563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47564. return $core.withContext(function($ctx1) {
  47565. //>>excludeEnd("ctx");
  47566. var $1;
  47567. $1=self._method();
  47568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47569. $ctx1.sendIdx["method"]=1;
  47570. //>>excludeEnd("ctx");
  47571. self["@ast"]=$recv($1)._ast();
  47572. $recv($recv($SemanticAnalyzer())._on_($recv(self._method())._methodClass()))._visit_(self["@ast"]);
  47573. return self;
  47574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47575. }, function($ctx1) {$ctx1.fill(self,"initializeAST",{},$globals.AIContext)});
  47576. //>>excludeEnd("ctx");
  47577. },
  47578. //>>excludeStart("ide", pragmas.excludeIdeData);
  47579. args: [],
  47580. source: "initializeAST\x0a\x09ast := self method ast.\x0a\x09(SemanticAnalyzer on: self method methodClass)\x0a\x09\x09visit: ast",
  47581. referencedClasses: ["SemanticAnalyzer"],
  47582. //>>excludeEnd("ide");
  47583. messageSends: ["ast", "method", "visit:", "on:", "methodClass"]
  47584. }),
  47585. $globals.AIContext);
  47586. $core.addMethod(
  47587. $core.method({
  47588. selector: "initializeFromMethodContext:",
  47589. protocol: 'initialization',
  47590. fn: function (aMethodContext){
  47591. var self=this;
  47592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47593. return $core.withContext(function($ctx1) {
  47594. //>>excludeEnd("ctx");
  47595. var $1,$2,$3,$4,$receiver;
  47596. self._evaluatedSelector_($recv(aMethodContext)._evaluatedSelector());
  47597. self._index_($recv(aMethodContext)._index());
  47598. self._sendIndexes_($recv(aMethodContext)._sendIndexes());
  47599. self._receiver_($recv(aMethodContext)._receiver());
  47600. self._supercall_($recv(aMethodContext)._supercall());
  47601. $1=self._selector_($recv(aMethodContext)._selector());
  47602. $2=$recv(aMethodContext)._outerContext();
  47603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47604. $ctx1.sendIdx["outerContext"]=1;
  47605. //>>excludeEnd("ctx");
  47606. if(($receiver = $2) == null || $receiver.isNil){
  47607. $2;
  47608. } else {
  47609. var outer;
  47610. outer=$receiver;
  47611. $3=$recv(outer)._methodContext();
  47612. if(($receiver = $3) == null || $receiver.isNil){
  47613. $3;
  47614. } else {
  47615. self._outerContext_($recv(self._class())._fromMethodContext_($recv(aMethodContext)._outerContext()));
  47616. };
  47617. $4=$recv(aMethodContext)._locals();
  47618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47619. $ctx1.sendIdx["locals"]=1;
  47620. //>>excludeEnd("ctx");
  47621. $recv($4)._keysAndValuesDo_((function(key,value){
  47622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47623. return $core.withContext(function($ctx2) {
  47624. //>>excludeEnd("ctx");
  47625. return $recv(self._locals())._at_put_(key,value);
  47626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47627. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,3)});
  47628. //>>excludeEnd("ctx");
  47629. }));
  47630. };
  47631. return self;
  47632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47633. }, function($ctx1) {$ctx1.fill(self,"initializeFromMethodContext:",{aMethodContext:aMethodContext},$globals.AIContext)});
  47634. //>>excludeEnd("ctx");
  47635. },
  47636. //>>excludeStart("ide", pragmas.excludeIdeData);
  47637. args: ["aMethodContext"],
  47638. 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 ] ]",
  47639. referencedClasses: [],
  47640. //>>excludeEnd("ide");
  47641. messageSends: ["evaluatedSelector:", "evaluatedSelector", "index:", "index", "sendIndexes:", "sendIndexes", "receiver:", "receiver", "supercall:", "supercall", "selector:", "selector", "ifNotNil:", "outerContext", "methodContext", "outerContext:", "fromMethodContext:", "class", "keysAndValuesDo:", "locals", "at:put:"]
  47642. }),
  47643. $globals.AIContext);
  47644. $core.addMethod(
  47645. $core.method({
  47646. selector: "initializeInterpreter",
  47647. protocol: 'initialization',
  47648. fn: function (){
  47649. var self=this;
  47650. function $ASTInterpreter(){return $globals.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
  47651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47652. return $core.withContext(function($ctx1) {
  47653. //>>excludeEnd("ctx");
  47654. var $1,$2,$3,$receiver;
  47655. $1=$recv($ASTInterpreter())._new();
  47656. $recv($1)._context_(self);
  47657. $2=$recv($1)._yourself();
  47658. self["@interpreter"]=$2;
  47659. $3=self._innerContext();
  47660. if(($receiver = $3) == null || $receiver.isNil){
  47661. $3;
  47662. } else {
  47663. self._setupInterpreter_(self["@interpreter"]);
  47664. };
  47665. return self;
  47666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47667. }, function($ctx1) {$ctx1.fill(self,"initializeInterpreter",{},$globals.AIContext)});
  47668. //>>excludeEnd("ctx");
  47669. },
  47670. //>>excludeStart("ide", pragmas.excludeIdeData);
  47671. args: [],
  47672. source: "initializeInterpreter\x0a\x09interpreter := ASTInterpreter new\x0a\x09\x09context: self;\x0a\x09\x09yourself.\x0a\x09\x0a\x09self innerContext ifNotNil: [\x0a\x09\x09self setupInterpreter: interpreter ]",
  47673. referencedClasses: ["ASTInterpreter"],
  47674. //>>excludeEnd("ide");
  47675. messageSends: ["context:", "new", "yourself", "ifNotNil:", "innerContext", "setupInterpreter:"]
  47676. }),
  47677. $globals.AIContext);
  47678. $core.addMethod(
  47679. $core.method({
  47680. selector: "initializeLocals",
  47681. protocol: 'initialization',
  47682. fn: function (){
  47683. var self=this;
  47684. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  47685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47686. return $core.withContext(function($ctx1) {
  47687. //>>excludeEnd("ctx");
  47688. self["@locals"]=$recv($Dictionary())._new();
  47689. $recv(self["@locals"])._at_put_("thisContext",self);
  47690. return self;
  47691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47692. }, function($ctx1) {$ctx1.fill(self,"initializeLocals",{},$globals.AIContext)});
  47693. //>>excludeEnd("ctx");
  47694. },
  47695. //>>excludeStart("ide", pragmas.excludeIdeData);
  47696. args: [],
  47697. source: "initializeLocals\x0a\x09locals := Dictionary new.\x0a\x09locals at: 'thisContext' put: self.",
  47698. referencedClasses: ["Dictionary"],
  47699. //>>excludeEnd("ide");
  47700. messageSends: ["new", "at:put:"]
  47701. }),
  47702. $globals.AIContext);
  47703. $core.addMethod(
  47704. $core.method({
  47705. selector: "innerContext",
  47706. protocol: 'accessing',
  47707. fn: function (){
  47708. var self=this;
  47709. var $1;
  47710. $1=self["@innerContext"];
  47711. return $1;
  47712. },
  47713. //>>excludeStart("ide", pragmas.excludeIdeData);
  47714. args: [],
  47715. source: "innerContext\x0a\x09^ innerContext",
  47716. referencedClasses: [],
  47717. //>>excludeEnd("ide");
  47718. messageSends: []
  47719. }),
  47720. $globals.AIContext);
  47721. $core.addMethod(
  47722. $core.method({
  47723. selector: "innerContext:",
  47724. protocol: 'accessing',
  47725. fn: function (anAIContext){
  47726. var self=this;
  47727. self["@innerContext"]=anAIContext;
  47728. return self;
  47729. },
  47730. //>>excludeStart("ide", pragmas.excludeIdeData);
  47731. args: ["anAIContext"],
  47732. source: "innerContext: anAIContext\x0a\x09innerContext := anAIContext",
  47733. referencedClasses: [],
  47734. //>>excludeEnd("ide");
  47735. messageSends: []
  47736. }),
  47737. $globals.AIContext);
  47738. $core.addMethod(
  47739. $core.method({
  47740. selector: "interpreter",
  47741. protocol: 'interpreting',
  47742. fn: function (){
  47743. var self=this;
  47744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47745. return $core.withContext(function($ctx1) {
  47746. //>>excludeEnd("ctx");
  47747. var $1,$2,$receiver;
  47748. $1=self["@interpreter"];
  47749. if(($receiver = $1) == null || $receiver.isNil){
  47750. self._initializeInterpreter();
  47751. } else {
  47752. $1;
  47753. };
  47754. $2=self["@interpreter"];
  47755. return $2;
  47756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47757. }, function($ctx1) {$ctx1.fill(self,"interpreter",{},$globals.AIContext)});
  47758. //>>excludeEnd("ctx");
  47759. },
  47760. //>>excludeStart("ide", pragmas.excludeIdeData);
  47761. args: [],
  47762. source: "interpreter\x0a\x09interpreter ifNil: [ self initializeInterpreter ].\x0a\x09^ interpreter",
  47763. referencedClasses: [],
  47764. //>>excludeEnd("ide");
  47765. messageSends: ["ifNil:", "initializeInterpreter"]
  47766. }),
  47767. $globals.AIContext);
  47768. $core.addMethod(
  47769. $core.method({
  47770. selector: "interpreter:",
  47771. protocol: 'interpreting',
  47772. fn: function (anInterpreter){
  47773. var self=this;
  47774. self["@interpreter"]=anInterpreter;
  47775. return self;
  47776. },
  47777. //>>excludeStart("ide", pragmas.excludeIdeData);
  47778. args: ["anInterpreter"],
  47779. source: "interpreter: anInterpreter\x0a\x09interpreter := anInterpreter",
  47780. referencedClasses: [],
  47781. //>>excludeEnd("ide");
  47782. messageSends: []
  47783. }),
  47784. $globals.AIContext);
  47785. $core.addMethod(
  47786. $core.method({
  47787. selector: "isTopContext",
  47788. protocol: 'testing',
  47789. fn: function (){
  47790. var self=this;
  47791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47792. return $core.withContext(function($ctx1) {
  47793. //>>excludeEnd("ctx");
  47794. var $1;
  47795. $1=$recv(self._innerContext())._isNil();
  47796. return $1;
  47797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47798. }, function($ctx1) {$ctx1.fill(self,"isTopContext",{},$globals.AIContext)});
  47799. //>>excludeEnd("ctx");
  47800. },
  47801. //>>excludeStart("ide", pragmas.excludeIdeData);
  47802. args: [],
  47803. source: "isTopContext\x0a\x09^ self innerContext isNil",
  47804. referencedClasses: [],
  47805. //>>excludeEnd("ide");
  47806. messageSends: ["isNil", "innerContext"]
  47807. }),
  47808. $globals.AIContext);
  47809. $core.addMethod(
  47810. $core.method({
  47811. selector: "localAt:",
  47812. protocol: 'accessing',
  47813. fn: function (aString){
  47814. var self=this;
  47815. var context;
  47816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47817. return $core.withContext(function($ctx1) {
  47818. //>>excludeEnd("ctx");
  47819. var $1;
  47820. context=self._lookupContextForLocal_(aString);
  47821. $1=$recv(context)._basicLocalAt_(aString);
  47822. return $1;
  47823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47824. }, function($ctx1) {$ctx1.fill(self,"localAt:",{aString:aString,context:context},$globals.AIContext)});
  47825. //>>excludeEnd("ctx");
  47826. },
  47827. //>>excludeStart("ide", pragmas.excludeIdeData);
  47828. args: ["aString"],
  47829. 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",
  47830. referencedClasses: [],
  47831. //>>excludeEnd("ide");
  47832. messageSends: ["lookupContextForLocal:", "basicLocalAt:"]
  47833. }),
  47834. $globals.AIContext);
  47835. $core.addMethod(
  47836. $core.method({
  47837. selector: "localAt:ifAbsent:",
  47838. protocol: 'accessing',
  47839. fn: function (aString,aBlock){
  47840. var self=this;
  47841. var context;
  47842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47843. return $core.withContext(function($ctx1) {
  47844. //>>excludeEnd("ctx");
  47845. var $1,$2;
  47846. var $early={};
  47847. try {
  47848. context=self._lookupContextForLocal_ifNone_(aString,(function(){
  47849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47850. return $core.withContext(function($ctx2) {
  47851. //>>excludeEnd("ctx");
  47852. $1=$recv(aBlock)._value();
  47853. throw $early=[$1];
  47854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47855. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  47856. //>>excludeEnd("ctx");
  47857. }));
  47858. $2=$recv(context)._basicLocalAt_(aString);
  47859. return $2;
  47860. }
  47861. catch(e) {if(e===$early)return e[0]; throw e}
  47862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47863. }, function($ctx1) {$ctx1.fill(self,"localAt:ifAbsent:",{aString:aString,aBlock:aBlock,context:context},$globals.AIContext)});
  47864. //>>excludeEnd("ctx");
  47865. },
  47866. //>>excludeStart("ide", pragmas.excludeIdeData);
  47867. args: ["aString", "aBlock"],
  47868. 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",
  47869. referencedClasses: [],
  47870. //>>excludeEnd("ide");
  47871. messageSends: ["lookupContextForLocal:ifNone:", "value", "basicLocalAt:"]
  47872. }),
  47873. $globals.AIContext);
  47874. $core.addMethod(
  47875. $core.method({
  47876. selector: "localAt:put:",
  47877. protocol: 'accessing',
  47878. fn: function (aString,anObject){
  47879. var self=this;
  47880. var context;
  47881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47882. return $core.withContext(function($ctx1) {
  47883. //>>excludeEnd("ctx");
  47884. context=self._lookupContextForLocal_(aString);
  47885. $recv(context)._basicLocalAt_put_(aString,anObject);
  47886. return self;
  47887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47888. }, function($ctx1) {$ctx1.fill(self,"localAt:put:",{aString:aString,anObject:anObject,context:context},$globals.AIContext)});
  47889. //>>excludeEnd("ctx");
  47890. },
  47891. //>>excludeStart("ide", pragmas.excludeIdeData);
  47892. args: ["aString", "anObject"],
  47893. source: "localAt: aString put: anObject\x0a\x09| context |\x0a\x09\x0a\x09context := self lookupContextForLocal: aString.\x0a\x09context basicLocalAt: aString put: anObject",
  47894. referencedClasses: [],
  47895. //>>excludeEnd("ide");
  47896. messageSends: ["lookupContextForLocal:", "basicLocalAt:put:"]
  47897. }),
  47898. $globals.AIContext);
  47899. $core.addMethod(
  47900. $core.method({
  47901. selector: "locals",
  47902. protocol: 'accessing',
  47903. fn: function (){
  47904. var self=this;
  47905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47906. return $core.withContext(function($ctx1) {
  47907. //>>excludeEnd("ctx");
  47908. var $1,$2,$receiver;
  47909. $1=self["@locals"];
  47910. if(($receiver = $1) == null || $receiver.isNil){
  47911. self._initializeLocals();
  47912. } else {
  47913. $1;
  47914. };
  47915. $2=self["@locals"];
  47916. return $2;
  47917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47918. }, function($ctx1) {$ctx1.fill(self,"locals",{},$globals.AIContext)});
  47919. //>>excludeEnd("ctx");
  47920. },
  47921. //>>excludeStart("ide", pragmas.excludeIdeData);
  47922. args: [],
  47923. source: "locals\x0a\x09locals ifNil: [ self initializeLocals ].\x0a\x09\x0a\x09^ locals",
  47924. referencedClasses: [],
  47925. //>>excludeEnd("ide");
  47926. messageSends: ["ifNil:", "initializeLocals"]
  47927. }),
  47928. $globals.AIContext);
  47929. $core.addMethod(
  47930. $core.method({
  47931. selector: "lookupContextForLocal:",
  47932. protocol: 'private',
  47933. fn: function (aString){
  47934. var self=this;
  47935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47936. return $core.withContext(function($ctx1) {
  47937. //>>excludeEnd("ctx");
  47938. var $1;
  47939. $1=self._lookupContextForLocal_ifNone_(aString,(function(){
  47940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47941. return $core.withContext(function($ctx2) {
  47942. //>>excludeEnd("ctx");
  47943. return self._variableNotFound();
  47944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47945. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  47946. //>>excludeEnd("ctx");
  47947. }));
  47948. return $1;
  47949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47950. }, function($ctx1) {$ctx1.fill(self,"lookupContextForLocal:",{aString:aString},$globals.AIContext)});
  47951. //>>excludeEnd("ctx");
  47952. },
  47953. //>>excludeStart("ide", pragmas.excludeIdeData);
  47954. args: ["aString"],
  47955. 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 ]",
  47956. referencedClasses: [],
  47957. //>>excludeEnd("ide");
  47958. messageSends: ["lookupContextForLocal:ifNone:", "variableNotFound"]
  47959. }),
  47960. $globals.AIContext);
  47961. $core.addMethod(
  47962. $core.method({
  47963. selector: "lookupContextForLocal:ifNone:",
  47964. protocol: 'private',
  47965. fn: function (aString,aBlock){
  47966. var self=this;
  47967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47968. return $core.withContext(function($ctx1) {
  47969. //>>excludeEnd("ctx");
  47970. var $2,$1;
  47971. $1=$recv(self._locals())._at_ifPresent_ifAbsent_(aString,(function(){
  47972. return self;
  47973. }),(function(){
  47974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47975. return $core.withContext(function($ctx2) {
  47976. //>>excludeEnd("ctx");
  47977. $2=self._outerContext();
  47978. return $recv($2)._ifNil_ifNotNil_(aBlock,(function(context){
  47979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47980. return $core.withContext(function($ctx3) {
  47981. //>>excludeEnd("ctx");
  47982. return $recv(context)._lookupContextForLocal_(aString);
  47983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47984. }, function($ctx3) {$ctx3.fillBlock({context:context},$ctx2,3)});
  47985. //>>excludeEnd("ctx");
  47986. }));
  47987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47988. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  47989. //>>excludeEnd("ctx");
  47990. }));
  47991. return $1;
  47992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47993. }, function($ctx1) {$ctx1.fill(self,"lookupContextForLocal:ifNone:",{aString:aString,aBlock:aBlock},$globals.AIContext)});
  47994. //>>excludeEnd("ctx");
  47995. },
  47996. //>>excludeStart("ide", pragmas.excludeIdeData);
  47997. args: ["aString", "aBlock"],
  47998. 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 ] ]",
  47999. referencedClasses: [],
  48000. //>>excludeEnd("ide");
  48001. messageSends: ["at:ifPresent:ifAbsent:", "locals", "ifNil:ifNotNil:", "outerContext", "lookupContextForLocal:"]
  48002. }),
  48003. $globals.AIContext);
  48004. $core.addMethod(
  48005. $core.method({
  48006. selector: "newInnerContext",
  48007. protocol: 'factory',
  48008. fn: function (){
  48009. var self=this;
  48010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48011. return $core.withContext(function($ctx1) {
  48012. //>>excludeEnd("ctx");
  48013. var $2,$3,$1;
  48014. $2=$recv(self._class())._new();
  48015. $recv($2)._outerContext_(self);
  48016. $3=$recv($2)._yourself();
  48017. $1=$3;
  48018. return $1;
  48019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48020. }, function($ctx1) {$ctx1.fill(self,"newInnerContext",{},$globals.AIContext)});
  48021. //>>excludeEnd("ctx");
  48022. },
  48023. //>>excludeStart("ide", pragmas.excludeIdeData);
  48024. args: [],
  48025. source: "newInnerContext\x0a\x09^ self class new\x0a\x09\x09outerContext: self;\x0a\x09\x09yourself",
  48026. referencedClasses: [],
  48027. //>>excludeEnd("ide");
  48028. messageSends: ["outerContext:", "new", "class", "yourself"]
  48029. }),
  48030. $globals.AIContext);
  48031. $core.addMethod(
  48032. $core.method({
  48033. selector: "outerContext",
  48034. protocol: 'accessing',
  48035. fn: function (){
  48036. var self=this;
  48037. var $1;
  48038. $1=self["@outerContext"];
  48039. return $1;
  48040. },
  48041. //>>excludeStart("ide", pragmas.excludeIdeData);
  48042. args: [],
  48043. source: "outerContext\x0a\x09^ outerContext",
  48044. referencedClasses: [],
  48045. //>>excludeEnd("ide");
  48046. messageSends: []
  48047. }),
  48048. $globals.AIContext);
  48049. $core.addMethod(
  48050. $core.method({
  48051. selector: "outerContext:",
  48052. protocol: 'accessing',
  48053. fn: function (anAIContext){
  48054. var self=this;
  48055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48056. return $core.withContext(function($ctx1) {
  48057. //>>excludeEnd("ctx");
  48058. var $1,$receiver;
  48059. self["@outerContext"]=anAIContext;
  48060. $1=self["@outerContext"];
  48061. if(($receiver = $1) == null || $receiver.isNil){
  48062. $1;
  48063. } else {
  48064. var context;
  48065. context=$receiver;
  48066. $recv(context)._innerContext_(self);
  48067. };
  48068. return self;
  48069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48070. }, function($ctx1) {$ctx1.fill(self,"outerContext:",{anAIContext:anAIContext},$globals.AIContext)});
  48071. //>>excludeEnd("ctx");
  48072. },
  48073. //>>excludeStart("ide", pragmas.excludeIdeData);
  48074. args: ["anAIContext"],
  48075. source: "outerContext: anAIContext\x0a\x09outerContext := anAIContext.\x0a\x09outerContext ifNotNil: [ :context | \x0a\x09\x09context innerContext: self ]",
  48076. referencedClasses: [],
  48077. //>>excludeEnd("ide");
  48078. messageSends: ["ifNotNil:", "innerContext:"]
  48079. }),
  48080. $globals.AIContext);
  48081. $core.addMethod(
  48082. $core.method({
  48083. selector: "receiver:",
  48084. protocol: 'interpreting',
  48085. fn: function (anObject){
  48086. var self=this;
  48087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48088. return $core.withContext(function($ctx1) {
  48089. //>>excludeEnd("ctx");
  48090. $recv(self._locals())._at_put_("self",anObject);
  48091. return self;
  48092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48093. }, function($ctx1) {$ctx1.fill(self,"receiver:",{anObject:anObject},$globals.AIContext)});
  48094. //>>excludeEnd("ctx");
  48095. },
  48096. //>>excludeStart("ide", pragmas.excludeIdeData);
  48097. args: ["anObject"],
  48098. source: "receiver: anObject\x0a\x09self locals at: 'self' put: anObject",
  48099. referencedClasses: [],
  48100. //>>excludeEnd("ide");
  48101. messageSends: ["at:put:", "locals"]
  48102. }),
  48103. $globals.AIContext);
  48104. $core.addMethod(
  48105. $core.method({
  48106. selector: "selector",
  48107. protocol: 'accessing',
  48108. fn: function (){
  48109. var self=this;
  48110. var $1;
  48111. $1=self["@selector"];
  48112. return $1;
  48113. },
  48114. //>>excludeStart("ide", pragmas.excludeIdeData);
  48115. args: [],
  48116. source: "selector\x0a\x09^ selector",
  48117. referencedClasses: [],
  48118. //>>excludeEnd("ide");
  48119. messageSends: []
  48120. }),
  48121. $globals.AIContext);
  48122. $core.addMethod(
  48123. $core.method({
  48124. selector: "selector:",
  48125. protocol: 'accessing',
  48126. fn: function (aString){
  48127. var self=this;
  48128. self["@selector"]=aString;
  48129. return self;
  48130. },
  48131. //>>excludeStart("ide", pragmas.excludeIdeData);
  48132. args: ["aString"],
  48133. source: "selector: aString\x0a\x09selector := aString",
  48134. referencedClasses: [],
  48135. //>>excludeEnd("ide");
  48136. messageSends: []
  48137. }),
  48138. $globals.AIContext);
  48139. $core.addMethod(
  48140. $core.method({
  48141. selector: "sendIndexAt:",
  48142. protocol: 'accessing',
  48143. fn: function (aString){
  48144. var self=this;
  48145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48146. return $core.withContext(function($ctx1) {
  48147. //>>excludeEnd("ctx");
  48148. var $1;
  48149. $1=$recv(self._sendIndexes())._at_ifAbsent_(aString,(function(){
  48150. return (0);
  48151. }));
  48152. return $1;
  48153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48154. }, function($ctx1) {$ctx1.fill(self,"sendIndexAt:",{aString:aString},$globals.AIContext)});
  48155. //>>excludeEnd("ctx");
  48156. },
  48157. //>>excludeStart("ide", pragmas.excludeIdeData);
  48158. args: ["aString"],
  48159. source: "sendIndexAt: aString\x0a\x09^ self sendIndexes at: aString ifAbsent: [ 0 ]",
  48160. referencedClasses: [],
  48161. //>>excludeEnd("ide");
  48162. messageSends: ["at:ifAbsent:", "sendIndexes"]
  48163. }),
  48164. $globals.AIContext);
  48165. $core.addMethod(
  48166. $core.method({
  48167. selector: "sendIndexes",
  48168. protocol: 'accessing',
  48169. fn: function (){
  48170. var self=this;
  48171. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  48172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48173. return $core.withContext(function($ctx1) {
  48174. //>>excludeEnd("ctx");
  48175. var $2,$1,$receiver;
  48176. $2=self["@sendIndexes"];
  48177. if(($receiver = $2) == null || $receiver.isNil){
  48178. $1=$recv($Dictionary())._new();
  48179. } else {
  48180. $1=$2;
  48181. };
  48182. return $1;
  48183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48184. }, function($ctx1) {$ctx1.fill(self,"sendIndexes",{},$globals.AIContext)});
  48185. //>>excludeEnd("ctx");
  48186. },
  48187. //>>excludeStart("ide", pragmas.excludeIdeData);
  48188. args: [],
  48189. source: "sendIndexes\x0a\x09^ sendIndexes ifNil: [ Dictionary new ]",
  48190. referencedClasses: ["Dictionary"],
  48191. //>>excludeEnd("ide");
  48192. messageSends: ["ifNil:", "new"]
  48193. }),
  48194. $globals.AIContext);
  48195. $core.addMethod(
  48196. $core.method({
  48197. selector: "sendIndexes:",
  48198. protocol: 'accessing',
  48199. fn: function (aDictionary){
  48200. var self=this;
  48201. self["@sendIndexes"]=aDictionary;
  48202. return self;
  48203. },
  48204. //>>excludeStart("ide", pragmas.excludeIdeData);
  48205. args: ["aDictionary"],
  48206. source: "sendIndexes: aDictionary\x0a\x09sendIndexes := aDictionary",
  48207. referencedClasses: [],
  48208. //>>excludeEnd("ide");
  48209. messageSends: []
  48210. }),
  48211. $globals.AIContext);
  48212. $core.addMethod(
  48213. $core.method({
  48214. selector: "setupInterpreter:",
  48215. protocol: 'interpreting',
  48216. fn: function (anInterpreter){
  48217. var self=this;
  48218. var currentNode;
  48219. function $ASTPCNodeVisitor(){return $globals.ASTPCNodeVisitor||(typeof ASTPCNodeVisitor=="undefined"?nil:ASTPCNodeVisitor)}
  48220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48221. return $core.withContext(function($ctx1) {
  48222. //>>excludeEnd("ctx");
  48223. var $1,$2,$3,$4,$5,$8,$7,$6,$receiver;
  48224. $1=$recv($ASTPCNodeVisitor())._new();
  48225. $recv($1)._selector_(self._evaluatedSelector());
  48226. $recv($1)._context_(self);
  48227. $2=$1;
  48228. $3=self._ast();
  48229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48230. $ctx1.sendIdx["ast"]=1;
  48231. //>>excludeEnd("ctx");
  48232. $recv($2)._visit_($3);
  48233. $4=$recv($1)._currentNode();
  48234. currentNode=$4;
  48235. $5=$recv(self._ast())._sequenceNode();
  48236. if(($receiver = $5) == null || $receiver.isNil){
  48237. $5;
  48238. } else {
  48239. var sequence;
  48240. sequence=$receiver;
  48241. $recv($recv(sequence)._temps())._do_((function(each){
  48242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48243. return $core.withContext(function($ctx2) {
  48244. //>>excludeEnd("ctx");
  48245. return self._defineLocal_(each);
  48246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48247. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  48248. //>>excludeEnd("ctx");
  48249. }));
  48250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48251. $ctx1.sendIdx["do:"]=1;
  48252. //>>excludeEnd("ctx");
  48253. };
  48254. $recv(anInterpreter)._node_(currentNode);
  48255. $8=self._innerContext();
  48256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48257. $ctx1.sendIdx["innerContext"]=1;
  48258. //>>excludeEnd("ctx");
  48259. $7=$recv($8)._arguments();
  48260. $6=$recv($7)._reversed();
  48261. $recv($6)._do_((function(each){
  48262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48263. return $core.withContext(function($ctx2) {
  48264. //>>excludeEnd("ctx");
  48265. return $recv(anInterpreter)._push_(each);
  48266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48267. $ctx2.sendIdx["push:"]=1;
  48268. //>>excludeEnd("ctx");
  48269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48270. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  48271. //>>excludeEnd("ctx");
  48272. }));
  48273. $recv(anInterpreter)._push_($recv(self._innerContext())._receiver());
  48274. return self;
  48275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48276. }, function($ctx1) {$ctx1.fill(self,"setupInterpreter:",{anInterpreter:anInterpreter,currentNode:currentNode},$globals.AIContext)});
  48277. //>>excludeEnd("ctx");
  48278. },
  48279. //>>excludeStart("ide", pragmas.excludeIdeData);
  48280. args: ["anInterpreter"],
  48281. 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)",
  48282. referencedClasses: ["ASTPCNodeVisitor"],
  48283. //>>excludeEnd("ide");
  48284. messageSends: ["selector:", "new", "evaluatedSelector", "context:", "visit:", "ast", "currentNode", "ifNotNil:", "sequenceNode", "do:", "temps", "defineLocal:", "node:", "reversed", "arguments", "innerContext", "push:", "receiver"]
  48285. }),
  48286. $globals.AIContext);
  48287. $core.addMethod(
  48288. $core.method({
  48289. selector: "supercall",
  48290. protocol: 'interpreting',
  48291. fn: function (){
  48292. var self=this;
  48293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48294. return $core.withContext(function($ctx1) {
  48295. //>>excludeEnd("ctx");
  48296. var $2,$1,$receiver;
  48297. $2=self["@supercall"];
  48298. if(($receiver = $2) == null || $receiver.isNil){
  48299. $1=false;
  48300. } else {
  48301. $1=$2;
  48302. };
  48303. return $1;
  48304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48305. }, function($ctx1) {$ctx1.fill(self,"supercall",{},$globals.AIContext)});
  48306. //>>excludeEnd("ctx");
  48307. },
  48308. //>>excludeStart("ide", pragmas.excludeIdeData);
  48309. args: [],
  48310. source: "supercall\x0a\x09^ supercall ifNil: [ false ]",
  48311. referencedClasses: [],
  48312. //>>excludeEnd("ide");
  48313. messageSends: ["ifNil:"]
  48314. }),
  48315. $globals.AIContext);
  48316. $core.addMethod(
  48317. $core.method({
  48318. selector: "supercall:",
  48319. protocol: 'interpreting',
  48320. fn: function (aBoolean){
  48321. var self=this;
  48322. self["@supercall"]=aBoolean;
  48323. return self;
  48324. },
  48325. //>>excludeStart("ide", pragmas.excludeIdeData);
  48326. args: ["aBoolean"],
  48327. source: "supercall: aBoolean\x0a\x09supercall := aBoolean",
  48328. referencedClasses: [],
  48329. //>>excludeEnd("ide");
  48330. messageSends: []
  48331. }),
  48332. $globals.AIContext);
  48333. $core.addMethod(
  48334. $core.method({
  48335. selector: "variableNotFound",
  48336. protocol: 'error handling',
  48337. fn: function (){
  48338. var self=this;
  48339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48340. return $core.withContext(function($ctx1) {
  48341. //>>excludeEnd("ctx");
  48342. self._error_("Variable missing");
  48343. return self;
  48344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48345. }, function($ctx1) {$ctx1.fill(self,"variableNotFound",{},$globals.AIContext)});
  48346. //>>excludeEnd("ctx");
  48347. },
  48348. //>>excludeStart("ide", pragmas.excludeIdeData);
  48349. args: [],
  48350. source: "variableNotFound\x0a\x09\x22Error thrown whenever a variable lookup fails\x22\x0a\x09\x0a\x09self error: 'Variable missing'",
  48351. referencedClasses: [],
  48352. //>>excludeEnd("ide");
  48353. messageSends: ["error:"]
  48354. }),
  48355. $globals.AIContext);
  48356. $core.addMethod(
  48357. $core.method({
  48358. selector: "fromMethodContext:",
  48359. protocol: 'instance creation',
  48360. fn: function (aMethodContext){
  48361. var self=this;
  48362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48363. return $core.withContext(function($ctx1) {
  48364. //>>excludeEnd("ctx");
  48365. var $2,$3,$1;
  48366. $2=self._new();
  48367. $recv($2)._initializeFromMethodContext_(aMethodContext);
  48368. $3=$recv($2)._yourself();
  48369. $1=$3;
  48370. return $1;
  48371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48372. }, function($ctx1) {$ctx1.fill(self,"fromMethodContext:",{aMethodContext:aMethodContext},$globals.AIContext.klass)});
  48373. //>>excludeEnd("ctx");
  48374. },
  48375. //>>excludeStart("ide", pragmas.excludeIdeData);
  48376. args: ["aMethodContext"],
  48377. source: "fromMethodContext: aMethodContext\x0a\x09^ self new\x0a\x09\x09initializeFromMethodContext: aMethodContext;\x0a\x09\x09yourself",
  48378. referencedClasses: [],
  48379. //>>excludeEnd("ide");
  48380. messageSends: ["initializeFromMethodContext:", "new", "yourself"]
  48381. }),
  48382. $globals.AIContext.klass);
  48383. $core.addClass('AISemanticAnalyzer', $globals.SemanticAnalyzer, ['context'], 'Compiler-Interpreter');
  48384. //>>excludeStart("ide", pragmas.excludeIdeData);
  48385. $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.";
  48386. //>>excludeEnd("ide");
  48387. $core.addMethod(
  48388. $core.method({
  48389. selector: "context",
  48390. protocol: 'accessing',
  48391. fn: function (){
  48392. var self=this;
  48393. var $1;
  48394. $1=self["@context"];
  48395. return $1;
  48396. },
  48397. //>>excludeStart("ide", pragmas.excludeIdeData);
  48398. args: [],
  48399. source: "context\x0a\x09^ context",
  48400. referencedClasses: [],
  48401. //>>excludeEnd("ide");
  48402. messageSends: []
  48403. }),
  48404. $globals.AISemanticAnalyzer);
  48405. $core.addMethod(
  48406. $core.method({
  48407. selector: "context:",
  48408. protocol: 'accessing',
  48409. fn: function (anAIContext){
  48410. var self=this;
  48411. self["@context"]=anAIContext;
  48412. return self;
  48413. },
  48414. //>>excludeStart("ide", pragmas.excludeIdeData);
  48415. args: ["anAIContext"],
  48416. source: "context: anAIContext\x0a\x09context := anAIContext",
  48417. referencedClasses: [],
  48418. //>>excludeEnd("ide");
  48419. messageSends: []
  48420. }),
  48421. $globals.AISemanticAnalyzer);
  48422. $core.addMethod(
  48423. $core.method({
  48424. selector: "visitVariableNode:",
  48425. protocol: 'visiting',
  48426. fn: function (aNode){
  48427. var self=this;
  48428. function $ASTContextVar(){return $globals.ASTContextVar||(typeof ASTContextVar=="undefined"?nil:ASTContextVar)}
  48429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48430. return $core.withContext(function($ctx1) {
  48431. //>>excludeEnd("ctx");
  48432. var $1;
  48433. var $early={};
  48434. try {
  48435. $recv(self._context())._localAt_ifAbsent_($recv(aNode)._value(),(function(){
  48436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48437. return $core.withContext(function($ctx2) {
  48438. //>>excludeEnd("ctx");
  48439. $1=(
  48440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48441. $ctx2.supercall = true,
  48442. //>>excludeEnd("ctx");
  48443. $globals.AISemanticAnalyzer.superclass.fn.prototype._visitVariableNode_.apply($recv(self), [aNode]));
  48444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48445. $ctx2.supercall = false;
  48446. //>>excludeEnd("ctx");;
  48447. throw $early=[$1];
  48448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48449. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  48450. //>>excludeEnd("ctx");
  48451. }));
  48452. $recv(aNode)._binding_($recv($ASTContextVar())._new());
  48453. return self;
  48454. }
  48455. catch(e) {if(e===$early)return e[0]; throw e}
  48456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48457. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},$globals.AISemanticAnalyzer)});
  48458. //>>excludeEnd("ctx");
  48459. },
  48460. //>>excludeStart("ide", pragmas.excludeIdeData);
  48461. args: ["aNode"],
  48462. source: "visitVariableNode: aNode\x0a\x09self context \x0a\x09\x09localAt: aNode value \x0a\x09\x09ifAbsent: [ ^ super visitVariableNode: aNode ].\x0a\x0a\x09aNode binding: ASTContextVar new",
  48463. referencedClasses: ["ASTContextVar"],
  48464. //>>excludeEnd("ide");
  48465. messageSends: ["localAt:ifAbsent:", "context", "value", "visitVariableNode:", "binding:", "new"]
  48466. }),
  48467. $globals.AISemanticAnalyzer);
  48468. $core.addClass('ASTContextVar', $globals.ScopeVar, ['context'], 'Compiler-Interpreter');
  48469. //>>excludeStart("ide", pragmas.excludeIdeData);
  48470. $globals.ASTContextVar.comment="I am a variable defined in a `context`.";
  48471. //>>excludeEnd("ide");
  48472. $core.addMethod(
  48473. $core.method({
  48474. selector: "context",
  48475. protocol: 'accessing',
  48476. fn: function (){
  48477. var self=this;
  48478. var $1;
  48479. $1=self["@context"];
  48480. return $1;
  48481. },
  48482. //>>excludeStart("ide", pragmas.excludeIdeData);
  48483. args: [],
  48484. source: "context\x0a\x09^ context",
  48485. referencedClasses: [],
  48486. //>>excludeEnd("ide");
  48487. messageSends: []
  48488. }),
  48489. $globals.ASTContextVar);
  48490. $core.addMethod(
  48491. $core.method({
  48492. selector: "context:",
  48493. protocol: 'accessing',
  48494. fn: function (anObject){
  48495. var self=this;
  48496. self["@context"]=anObject;
  48497. return self;
  48498. },
  48499. //>>excludeStart("ide", pragmas.excludeIdeData);
  48500. args: ["anObject"],
  48501. source: "context: anObject\x0a\x09context := anObject",
  48502. referencedClasses: [],
  48503. //>>excludeEnd("ide");
  48504. messageSends: []
  48505. }),
  48506. $globals.ASTContextVar);
  48507. $core.addClass('ASTDebugger', $globals.Object, ['interpreter', 'context', 'result'], 'Compiler-Interpreter');
  48508. //>>excludeStart("ide", pragmas.excludeIdeData);
  48509. $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.";
  48510. //>>excludeEnd("ide");
  48511. $core.addMethod(
  48512. $core.method({
  48513. selector: "atEnd",
  48514. protocol: 'testing',
  48515. fn: function (){
  48516. var self=this;
  48517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48518. return $core.withContext(function($ctx1) {
  48519. //>>excludeEnd("ctx");
  48520. var $1,$2,$receiver;
  48521. $1=self._context();
  48522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48523. $ctx1.sendIdx["context"]=1;
  48524. //>>excludeEnd("ctx");
  48525. if(($receiver = $1) == null || $receiver.isNil){
  48526. return true;
  48527. } else {
  48528. $1;
  48529. };
  48530. $2=$recv($recv(self._interpreter())._atEnd())._and_((function(){
  48531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48532. return $core.withContext(function($ctx2) {
  48533. //>>excludeEnd("ctx");
  48534. return $recv(self._context())._isTopContext();
  48535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48536. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  48537. //>>excludeEnd("ctx");
  48538. }));
  48539. return $2;
  48540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48541. }, function($ctx1) {$ctx1.fill(self,"atEnd",{},$globals.ASTDebugger)});
  48542. //>>excludeEnd("ctx");
  48543. },
  48544. //>>excludeStart("ide", pragmas.excludeIdeData);
  48545. args: [],
  48546. source: "atEnd\x09\x0a\x09self context ifNil: [ ^ true ].\x0a\x09\x0a\x09^ self interpreter atEnd and: [ \x0a\x09\x09self context isTopContext ]",
  48547. referencedClasses: [],
  48548. //>>excludeEnd("ide");
  48549. messageSends: ["ifNil:", "context", "and:", "atEnd", "interpreter", "isTopContext"]
  48550. }),
  48551. $globals.ASTDebugger);
  48552. $core.addMethod(
  48553. $core.method({
  48554. selector: "context",
  48555. protocol: 'accessing',
  48556. fn: function (){
  48557. var self=this;
  48558. var $1;
  48559. $1=self["@context"];
  48560. return $1;
  48561. },
  48562. //>>excludeStart("ide", pragmas.excludeIdeData);
  48563. args: [],
  48564. source: "context\x0a\x09^ context",
  48565. referencedClasses: [],
  48566. //>>excludeEnd("ide");
  48567. messageSends: []
  48568. }),
  48569. $globals.ASTDebugger);
  48570. $core.addMethod(
  48571. $core.method({
  48572. selector: "context:",
  48573. protocol: 'accessing',
  48574. fn: function (aContext){
  48575. var self=this;
  48576. self["@context"]=aContext;
  48577. return self;
  48578. },
  48579. //>>excludeStart("ide", pragmas.excludeIdeData);
  48580. args: ["aContext"],
  48581. source: "context: aContext\x0a\x09context := aContext",
  48582. referencedClasses: [],
  48583. //>>excludeEnd("ide");
  48584. messageSends: []
  48585. }),
  48586. $globals.ASTDebugger);
  48587. $core.addMethod(
  48588. $core.method({
  48589. selector: "flushInnerContexts",
  48590. protocol: 'actions',
  48591. fn: function (){
  48592. var self=this;
  48593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48594. return $core.withContext(function($ctx1) {
  48595. //>>excludeEnd("ctx");
  48596. var $1,$receiver;
  48597. $1=self._context();
  48598. if(($receiver = $1) == null || $receiver.isNil){
  48599. $1;
  48600. } else {
  48601. var cxt;
  48602. cxt=$receiver;
  48603. $recv(cxt)._innerContext_(nil);
  48604. };
  48605. return self;
  48606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48607. }, function($ctx1) {$ctx1.fill(self,"flushInnerContexts",{},$globals.ASTDebugger)});
  48608. //>>excludeEnd("ctx");
  48609. },
  48610. //>>excludeStart("ide", pragmas.excludeIdeData);
  48611. args: [],
  48612. 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 ]",
  48613. referencedClasses: [],
  48614. //>>excludeEnd("ide");
  48615. messageSends: ["ifNotNil:", "context", "innerContext:"]
  48616. }),
  48617. $globals.ASTDebugger);
  48618. $core.addMethod(
  48619. $core.method({
  48620. selector: "interpreter",
  48621. protocol: 'accessing',
  48622. fn: function (){
  48623. var self=this;
  48624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48625. return $core.withContext(function($ctx1) {
  48626. //>>excludeEnd("ctx");
  48627. var $2,$1,$receiver;
  48628. $2=self._context();
  48629. if(($receiver = $2) == null || $receiver.isNil){
  48630. $1=$2;
  48631. } else {
  48632. var ctx;
  48633. ctx=$receiver;
  48634. $1=$recv(ctx)._interpreter();
  48635. };
  48636. return $1;
  48637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48638. }, function($ctx1) {$ctx1.fill(self,"interpreter",{},$globals.ASTDebugger)});
  48639. //>>excludeEnd("ctx");
  48640. },
  48641. //>>excludeStart("ide", pragmas.excludeIdeData);
  48642. args: [],
  48643. source: "interpreter\x0a\x09^ self context ifNotNil: [ :ctx | \x0a\x09\x09ctx interpreter ]",
  48644. referencedClasses: [],
  48645. //>>excludeEnd("ide");
  48646. messageSends: ["ifNotNil:", "context", "interpreter"]
  48647. }),
  48648. $globals.ASTDebugger);
  48649. $core.addMethod(
  48650. $core.method({
  48651. selector: "method",
  48652. protocol: 'accessing',
  48653. fn: function (){
  48654. var self=this;
  48655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48656. return $core.withContext(function($ctx1) {
  48657. //>>excludeEnd("ctx");
  48658. var $1;
  48659. $1=$recv(self._context())._method();
  48660. return $1;
  48661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48662. }, function($ctx1) {$ctx1.fill(self,"method",{},$globals.ASTDebugger)});
  48663. //>>excludeEnd("ctx");
  48664. },
  48665. //>>excludeStart("ide", pragmas.excludeIdeData);
  48666. args: [],
  48667. source: "method\x0a\x09^ self context method",
  48668. referencedClasses: [],
  48669. //>>excludeEnd("ide");
  48670. messageSends: ["method", "context"]
  48671. }),
  48672. $globals.ASTDebugger);
  48673. $core.addMethod(
  48674. $core.method({
  48675. selector: "node",
  48676. protocol: 'accessing',
  48677. fn: function (){
  48678. var self=this;
  48679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48680. return $core.withContext(function($ctx1) {
  48681. //>>excludeEnd("ctx");
  48682. var $2,$1,$receiver;
  48683. $2=self._interpreter();
  48684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48685. $ctx1.sendIdx["interpreter"]=1;
  48686. //>>excludeEnd("ctx");
  48687. if(($receiver = $2) == null || $receiver.isNil){
  48688. $1=$2;
  48689. } else {
  48690. $1=$recv(self._interpreter())._node();
  48691. };
  48692. return $1;
  48693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48694. }, function($ctx1) {$ctx1.fill(self,"node",{},$globals.ASTDebugger)});
  48695. //>>excludeEnd("ctx");
  48696. },
  48697. //>>excludeStart("ide", pragmas.excludeIdeData);
  48698. args: [],
  48699. source: "node\x0a\x09^ self interpreter ifNotNil: [\x0a\x09\x09self interpreter node ]",
  48700. referencedClasses: [],
  48701. //>>excludeEnd("ide");
  48702. messageSends: ["ifNotNil:", "interpreter", "node"]
  48703. }),
  48704. $globals.ASTDebugger);
  48705. $core.addMethod(
  48706. $core.method({
  48707. selector: "onStep",
  48708. protocol: 'private',
  48709. fn: function (){
  48710. var self=this;
  48711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48712. return $core.withContext(function($ctx1) {
  48713. //>>excludeEnd("ctx");
  48714. var $1,$3,$2,$4,$6,$5,$receiver;
  48715. $1=self._interpreter();
  48716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48717. $ctx1.sendIdx["interpreter"]=1;
  48718. //>>excludeEnd("ctx");
  48719. self["@result"]=$recv($1)._result();
  48720. $3=self._interpreter();
  48721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48722. $ctx1.sendIdx["interpreter"]=2;
  48723. //>>excludeEnd("ctx");
  48724. $2=$recv($3)._atEnd();
  48725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48726. $ctx1.sendIdx["atEnd"]=1;
  48727. //>>excludeEnd("ctx");
  48728. if($core.assert($2)){
  48729. $4=$recv(self._context())._outerContext();
  48730. if(($receiver = $4) == null || $receiver.isNil){
  48731. $4;
  48732. } else {
  48733. var outerContext;
  48734. outerContext=$receiver;
  48735. self._context_(outerContext);
  48736. };
  48737. $6=self._interpreter();
  48738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48739. $ctx1.sendIdx["interpreter"]=3;
  48740. //>>excludeEnd("ctx");
  48741. $5=$recv($6)._atEnd();
  48742. if(!$core.assert($5)){
  48743. $recv(self._interpreter())._skip();
  48744. };
  48745. };
  48746. self._flushInnerContexts();
  48747. return self;
  48748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48749. }, function($ctx1) {$ctx1.fill(self,"onStep",{},$globals.ASTDebugger)});
  48750. //>>excludeEnd("ctx");
  48751. },
  48752. //>>excludeStart("ide", pragmas.excludeIdeData);
  48753. args: [],
  48754. 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",
  48755. referencedClasses: [],
  48756. //>>excludeEnd("ide");
  48757. messageSends: ["result", "interpreter", "ifTrue:", "atEnd", "ifNotNil:", "outerContext", "context", "context:", "ifFalse:", "skip", "flushInnerContexts"]
  48758. }),
  48759. $globals.ASTDebugger);
  48760. $core.addMethod(
  48761. $core.method({
  48762. selector: "proceed",
  48763. protocol: 'stepping',
  48764. fn: function (){
  48765. var self=this;
  48766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48767. return $core.withContext(function($ctx1) {
  48768. //>>excludeEnd("ctx");
  48769. $recv((function(){
  48770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48771. return $core.withContext(function($ctx2) {
  48772. //>>excludeEnd("ctx");
  48773. return self._atEnd();
  48774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48775. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  48776. //>>excludeEnd("ctx");
  48777. }))._whileFalse_((function(){
  48778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48779. return $core.withContext(function($ctx2) {
  48780. //>>excludeEnd("ctx");
  48781. return self._stepOver();
  48782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48783. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  48784. //>>excludeEnd("ctx");
  48785. }));
  48786. return self;
  48787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48788. }, function($ctx1) {$ctx1.fill(self,"proceed",{},$globals.ASTDebugger)});
  48789. //>>excludeEnd("ctx");
  48790. },
  48791. //>>excludeStart("ide", pragmas.excludeIdeData);
  48792. args: [],
  48793. source: "proceed\x0a\x09[ self atEnd ] whileFalse: [ self stepOver ]",
  48794. referencedClasses: [],
  48795. //>>excludeEnd("ide");
  48796. messageSends: ["whileFalse:", "atEnd", "stepOver"]
  48797. }),
  48798. $globals.ASTDebugger);
  48799. $core.addMethod(
  48800. $core.method({
  48801. selector: "restart",
  48802. protocol: 'stepping',
  48803. fn: function (){
  48804. var self=this;
  48805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48806. return $core.withContext(function($ctx1) {
  48807. //>>excludeEnd("ctx");
  48808. $recv(self._interpreter())._restart();
  48809. self._flushInnerContexts();
  48810. return self;
  48811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48812. }, function($ctx1) {$ctx1.fill(self,"restart",{},$globals.ASTDebugger)});
  48813. //>>excludeEnd("ctx");
  48814. },
  48815. //>>excludeStart("ide", pragmas.excludeIdeData);
  48816. args: [],
  48817. source: "restart\x0a\x09self interpreter restart.\x0a\x09self flushInnerContexts",
  48818. referencedClasses: [],
  48819. //>>excludeEnd("ide");
  48820. messageSends: ["restart", "interpreter", "flushInnerContexts"]
  48821. }),
  48822. $globals.ASTDebugger);
  48823. $core.addMethod(
  48824. $core.method({
  48825. selector: "result",
  48826. protocol: 'accessing',
  48827. fn: function (){
  48828. var self=this;
  48829. var $1;
  48830. $1=self["@result"];
  48831. return $1;
  48832. },
  48833. //>>excludeStart("ide", pragmas.excludeIdeData);
  48834. args: [],
  48835. source: "result\x0a\x09^ result",
  48836. referencedClasses: [],
  48837. //>>excludeEnd("ide");
  48838. messageSends: []
  48839. }),
  48840. $globals.ASTDebugger);
  48841. $core.addMethod(
  48842. $core.method({
  48843. selector: "stepInto",
  48844. protocol: 'stepping',
  48845. fn: function (){
  48846. var self=this;
  48847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48848. return $core.withContext(function($ctx1) {
  48849. //>>excludeEnd("ctx");
  48850. self._shouldBeImplemented();
  48851. return self;
  48852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48853. }, function($ctx1) {$ctx1.fill(self,"stepInto",{},$globals.ASTDebugger)});
  48854. //>>excludeEnd("ctx");
  48855. },
  48856. //>>excludeStart("ide", pragmas.excludeIdeData);
  48857. args: [],
  48858. source: "stepInto\x0a\x09self shouldBeImplemented",
  48859. referencedClasses: [],
  48860. //>>excludeEnd("ide");
  48861. messageSends: ["shouldBeImplemented"]
  48862. }),
  48863. $globals.ASTDebugger);
  48864. $core.addMethod(
  48865. $core.method({
  48866. selector: "stepOver",
  48867. protocol: 'stepping',
  48868. fn: function (){
  48869. var self=this;
  48870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48871. return $core.withContext(function($ctx1) {
  48872. //>>excludeEnd("ctx");
  48873. var $1,$2;
  48874. $1=$recv(self._context())._isTopContext();
  48875. if($core.assert($1)){
  48876. $recv(self._interpreter())._stepOver();
  48877. } else {
  48878. $2=self._interpreter();
  48879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48880. $ctx1.sendIdx["interpreter"]=1;
  48881. //>>excludeEnd("ctx");
  48882. $recv($2)._skip();
  48883. };
  48884. self._onStep();
  48885. return self;
  48886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48887. }, function($ctx1) {$ctx1.fill(self,"stepOver",{},$globals.ASTDebugger)});
  48888. //>>excludeEnd("ctx");
  48889. },
  48890. //>>excludeStart("ide", pragmas.excludeIdeData);
  48891. args: [],
  48892. source: "stepOver\x0a\x09self context isTopContext \x0a\x09\x09ifFalse: [ self interpreter skip ]\x0a\x09\x09ifTrue: [ self interpreter stepOver ].\x0a\x09self onStep",
  48893. referencedClasses: [],
  48894. //>>excludeEnd("ide");
  48895. messageSends: ["ifFalse:ifTrue:", "isTopContext", "context", "skip", "interpreter", "stepOver", "onStep"]
  48896. }),
  48897. $globals.ASTDebugger);
  48898. $core.addMethod(
  48899. $core.method({
  48900. selector: "context:",
  48901. protocol: 'instance creation',
  48902. fn: function (aContext){
  48903. var self=this;
  48904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48905. return $core.withContext(function($ctx1) {
  48906. //>>excludeEnd("ctx");
  48907. var $2,$3,$1;
  48908. $2=self._new();
  48909. $recv($2)._context_(aContext);
  48910. $3=$recv($2)._yourself();
  48911. $1=$3;
  48912. return $1;
  48913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48914. }, function($ctx1) {$ctx1.fill(self,"context:",{aContext:aContext},$globals.ASTDebugger.klass)});
  48915. //>>excludeEnd("ctx");
  48916. },
  48917. //>>excludeStart("ide", pragmas.excludeIdeData);
  48918. args: ["aContext"],
  48919. source: "context: aContext\x0a\x09^ self new\x0a\x09\x09context: aContext;\x0a\x09\x09yourself",
  48920. referencedClasses: [],
  48921. //>>excludeEnd("ide");
  48922. messageSends: ["context:", "new", "yourself"]
  48923. }),
  48924. $globals.ASTDebugger.klass);
  48925. $core.addClass('ASTInterpreter', $globals.NodeVisitor, ['node', 'context', 'stack', 'returnValue', 'returned', 'forceAtEnd'], 'Compiler-Interpreter');
  48926. //>>excludeStart("ide", pragmas.excludeIdeData);
  48927. $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";
  48928. //>>excludeEnd("ide");
  48929. $core.addMethod(
  48930. $core.method({
  48931. selector: "assign:to:",
  48932. protocol: 'private',
  48933. fn: function (aNode,anObject){
  48934. var self=this;
  48935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48936. return $core.withContext(function($ctx1) {
  48937. //>>excludeEnd("ctx");
  48938. var $1,$3,$2,$4;
  48939. $1=$recv($recv(aNode)._binding())._isInstanceVar();
  48940. if($core.assert($1)){
  48941. $3=self._context();
  48942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48943. $ctx1.sendIdx["context"]=1;
  48944. //>>excludeEnd("ctx");
  48945. $2=$recv($3)._receiver();
  48946. $4=$recv(aNode)._value();
  48947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48948. $ctx1.sendIdx["value"]=1;
  48949. //>>excludeEnd("ctx");
  48950. $recv($2)._instVarAt_put_($4,anObject);
  48951. } else {
  48952. $recv(self._context())._localAt_put_($recv(aNode)._value(),anObject);
  48953. };
  48954. return self;
  48955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48956. }, function($ctx1) {$ctx1.fill(self,"assign:to:",{aNode:aNode,anObject:anObject},$globals.ASTInterpreter)});
  48957. //>>excludeEnd("ctx");
  48958. },
  48959. //>>excludeStart("ide", pragmas.excludeIdeData);
  48960. args: ["aNode", "anObject"],
  48961. 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 ]",
  48962. referencedClasses: [],
  48963. //>>excludeEnd("ide");
  48964. messageSends: ["ifTrue:ifFalse:", "isInstanceVar", "binding", "instVarAt:put:", "receiver", "context", "value", "localAt:put:"]
  48965. }),
  48966. $globals.ASTInterpreter);
  48967. $core.addMethod(
  48968. $core.method({
  48969. selector: "atEnd",
  48970. protocol: 'testing',
  48971. fn: function (){
  48972. var self=this;
  48973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48974. return $core.withContext(function($ctx1) {
  48975. //>>excludeEnd("ctx");
  48976. var $1,$2;
  48977. $1=self["@forceAtEnd"];
  48978. if($core.assert($1)){
  48979. return true;
  48980. };
  48981. $2=$recv(self._hasReturned())._or_((function(){
  48982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48983. return $core.withContext(function($ctx2) {
  48984. //>>excludeEnd("ctx");
  48985. return $recv(self._node())._isNil();
  48986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48987. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  48988. //>>excludeEnd("ctx");
  48989. }));
  48990. return $2;
  48991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48992. }, function($ctx1) {$ctx1.fill(self,"atEnd",{},$globals.ASTInterpreter)});
  48993. //>>excludeEnd("ctx");
  48994. },
  48995. //>>excludeStart("ide", pragmas.excludeIdeData);
  48996. args: [],
  48997. source: "atEnd\x0a\x09forceAtEnd ifTrue: [ ^ true ].\x0a\x09\x0a\x09^ self hasReturned or: [ self node isNil ]",
  48998. referencedClasses: [],
  48999. //>>excludeEnd("ide");
  49000. messageSends: ["ifTrue:", "or:", "hasReturned", "isNil", "node"]
  49001. }),
  49002. $globals.ASTInterpreter);
  49003. $core.addMethod(
  49004. $core.method({
  49005. selector: "context",
  49006. protocol: 'accessing',
  49007. fn: function (){
  49008. var self=this;
  49009. var $1;
  49010. $1=self["@context"];
  49011. return $1;
  49012. },
  49013. //>>excludeStart("ide", pragmas.excludeIdeData);
  49014. args: [],
  49015. source: "context\x0a\x09^ context",
  49016. referencedClasses: [],
  49017. //>>excludeEnd("ide");
  49018. messageSends: []
  49019. }),
  49020. $globals.ASTInterpreter);
  49021. $core.addMethod(
  49022. $core.method({
  49023. selector: "context:",
  49024. protocol: 'accessing',
  49025. fn: function (aContext){
  49026. var self=this;
  49027. self["@context"]=aContext;
  49028. return self;
  49029. },
  49030. //>>excludeStart("ide", pragmas.excludeIdeData);
  49031. args: ["aContext"],
  49032. source: "context: aContext\x0a\x09context := aContext",
  49033. referencedClasses: [],
  49034. //>>excludeEnd("ide");
  49035. messageSends: []
  49036. }),
  49037. $globals.ASTInterpreter);
  49038. $core.addMethod(
  49039. $core.method({
  49040. selector: "eval:",
  49041. protocol: 'private',
  49042. fn: function (aString){
  49043. var self=this;
  49044. var source,function_;
  49045. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  49046. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  49047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49048. return $core.withContext(function($ctx1) {
  49049. //>>excludeEnd("ctx");
  49050. var $3,$2,$1,$4,$5;
  49051. source=$recv($String())._streamContents_((function(str){
  49052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49053. return $core.withContext(function($ctx2) {
  49054. //>>excludeEnd("ctx");
  49055. $recv(str)._nextPutAll_("0,(function(");
  49056. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49057. $ctx2.sendIdx["nextPutAll:"]=1;
  49058. //>>excludeEnd("ctx");
  49059. $3=self._context();
  49060. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49061. $ctx2.sendIdx["context"]=1;
  49062. //>>excludeEnd("ctx");
  49063. $2=$recv($3)._locals();
  49064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49065. $ctx2.sendIdx["locals"]=1;
  49066. //>>excludeEnd("ctx");
  49067. $1=$recv($2)._keys();
  49068. $recv($1)._do_separatedBy_((function(each){
  49069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49070. return $core.withContext(function($ctx3) {
  49071. //>>excludeEnd("ctx");
  49072. return $recv(str)._nextPutAll_(each);
  49073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49074. $ctx3.sendIdx["nextPutAll:"]=2;
  49075. //>>excludeEnd("ctx");
  49076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49077. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  49078. //>>excludeEnd("ctx");
  49079. }),(function(){
  49080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49081. return $core.withContext(function($ctx3) {
  49082. //>>excludeEnd("ctx");
  49083. return $recv(str)._nextPutAll_(",");
  49084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49085. $ctx3.sendIdx["nextPutAll:"]=3;
  49086. //>>excludeEnd("ctx");
  49087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49088. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  49089. //>>excludeEnd("ctx");
  49090. }));
  49091. $recv(str)._nextPutAll_("){ return (function() {");
  49092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49093. $ctx2.sendIdx["nextPutAll:"]=4;
  49094. //>>excludeEnd("ctx");
  49095. $recv(str)._nextPutAll_(aString);
  49096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49097. $ctx2.sendIdx["nextPutAll:"]=5;
  49098. //>>excludeEnd("ctx");
  49099. $4=$recv(str)._nextPutAll_("})()})");
  49100. return $4;
  49101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49102. }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)});
  49103. //>>excludeEnd("ctx");
  49104. }));
  49105. function_=$recv($recv($Compiler())._new())._eval_(source);
  49106. $5=$recv(function_)._valueWithPossibleArguments_($recv($recv(self._context())._locals())._values());
  49107. return $5;
  49108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49109. }, function($ctx1) {$ctx1.fill(self,"eval:",{aString:aString,source:source,function_:function_},$globals.ASTInterpreter)});
  49110. //>>excludeEnd("ctx");
  49111. },
  49112. //>>excludeStart("ide", pragmas.excludeIdeData);
  49113. args: ["aString"],
  49114. 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",
  49115. referencedClasses: ["String", "Compiler"],
  49116. //>>excludeEnd("ide");
  49117. messageSends: ["streamContents:", "nextPutAll:", "do:separatedBy:", "keys", "locals", "context", "eval:", "new", "valueWithPossibleArguments:", "values"]
  49118. }),
  49119. $globals.ASTInterpreter);
  49120. $core.addMethod(
  49121. $core.method({
  49122. selector: "hasReturned",
  49123. protocol: 'testing',
  49124. fn: function (){
  49125. var self=this;
  49126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49127. return $core.withContext(function($ctx1) {
  49128. //>>excludeEnd("ctx");
  49129. var $2,$1,$receiver;
  49130. $2=self["@returned"];
  49131. if(($receiver = $2) == null || $receiver.isNil){
  49132. $1=false;
  49133. } else {
  49134. $1=$2;
  49135. };
  49136. return $1;
  49137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49138. }, function($ctx1) {$ctx1.fill(self,"hasReturned",{},$globals.ASTInterpreter)});
  49139. //>>excludeEnd("ctx");
  49140. },
  49141. //>>excludeStart("ide", pragmas.excludeIdeData);
  49142. args: [],
  49143. source: "hasReturned\x0a\x09^ returned ifNil: [ false ]",
  49144. referencedClasses: [],
  49145. //>>excludeEnd("ide");
  49146. messageSends: ["ifNil:"]
  49147. }),
  49148. $globals.ASTInterpreter);
  49149. $core.addMethod(
  49150. $core.method({
  49151. selector: "initialize",
  49152. protocol: 'initialization',
  49153. fn: function (){
  49154. var self=this;
  49155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49156. return $core.withContext(function($ctx1) {
  49157. //>>excludeEnd("ctx");
  49158. (
  49159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49160. $ctx1.supercall = true,
  49161. //>>excludeEnd("ctx");
  49162. $globals.ASTInterpreter.superclass.fn.prototype._initialize.apply($recv(self), []));
  49163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49164. $ctx1.supercall = false;
  49165. //>>excludeEnd("ctx");;
  49166. self["@forceAtEnd"]=false;
  49167. return self;
  49168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49169. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ASTInterpreter)});
  49170. //>>excludeEnd("ctx");
  49171. },
  49172. //>>excludeStart("ide", pragmas.excludeIdeData);
  49173. args: [],
  49174. source: "initialize\x0a\x09super initialize.\x0a\x0a\x09forceAtEnd := false",
  49175. referencedClasses: [],
  49176. //>>excludeEnd("ide");
  49177. messageSends: ["initialize"]
  49178. }),
  49179. $globals.ASTInterpreter);
  49180. $core.addMethod(
  49181. $core.method({
  49182. selector: "interpret",
  49183. protocol: 'interpreting',
  49184. fn: function (){
  49185. var self=this;
  49186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49187. return $core.withContext(function($ctx1) {
  49188. //>>excludeEnd("ctx");
  49189. self._visit_(self._node());
  49190. return self;
  49191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49192. }, function($ctx1) {$ctx1.fill(self,"interpret",{},$globals.ASTInterpreter)});
  49193. //>>excludeEnd("ctx");
  49194. },
  49195. //>>excludeStart("ide", pragmas.excludeIdeData);
  49196. args: [],
  49197. source: "interpret\x0a\x09\x22Interpret the next node to be evaluated\x22\x0a\x09\x0a\x09self visit: self node",
  49198. referencedClasses: [],
  49199. //>>excludeEnd("ide");
  49200. messageSends: ["visit:", "node"]
  49201. }),
  49202. $globals.ASTInterpreter);
  49203. $core.addMethod(
  49204. $core.method({
  49205. selector: "interpret:",
  49206. protocol: 'interpreting',
  49207. fn: function (aNode){
  49208. var self=this;
  49209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49210. return $core.withContext(function($ctx1) {
  49211. //>>excludeEnd("ctx");
  49212. self._node_(aNode);
  49213. self._interpret();
  49214. return self;
  49215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49216. }, function($ctx1) {$ctx1.fill(self,"interpret:",{aNode:aNode},$globals.ASTInterpreter)});
  49217. //>>excludeEnd("ctx");
  49218. },
  49219. //>>excludeStart("ide", pragmas.excludeIdeData);
  49220. args: ["aNode"],
  49221. source: "interpret: aNode\x0a\x09self node: aNode.\x0a\x09self interpret",
  49222. referencedClasses: [],
  49223. //>>excludeEnd("ide");
  49224. messageSends: ["node:", "interpret"]
  49225. }),
  49226. $globals.ASTInterpreter);
  49227. $core.addMethod(
  49228. $core.method({
  49229. selector: "messageFromSendNode:arguments:",
  49230. protocol: 'private',
  49231. fn: function (aSendNode,aCollection){
  49232. var self=this;
  49233. function $Message(){return $globals.Message||(typeof Message=="undefined"?nil:Message)}
  49234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49235. return $core.withContext(function($ctx1) {
  49236. //>>excludeEnd("ctx");
  49237. var $2,$3,$1;
  49238. $2=$recv($Message())._new();
  49239. $recv($2)._selector_($recv(aSendNode)._selector());
  49240. $recv($2)._arguments_(aCollection);
  49241. $3=$recv($2)._yourself();
  49242. $1=$3;
  49243. return $1;
  49244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49245. }, function($ctx1) {$ctx1.fill(self,"messageFromSendNode:arguments:",{aSendNode:aSendNode,aCollection:aCollection},$globals.ASTInterpreter)});
  49246. //>>excludeEnd("ctx");
  49247. },
  49248. //>>excludeStart("ide", pragmas.excludeIdeData);
  49249. args: ["aSendNode", "aCollection"],
  49250. source: "messageFromSendNode: aSendNode arguments: aCollection\x0a\x09^ Message new\x0a\x09\x09selector: aSendNode selector;\x0a\x09\x09arguments: aCollection;\x0a\x09\x09yourself",
  49251. referencedClasses: ["Message"],
  49252. //>>excludeEnd("ide");
  49253. messageSends: ["selector:", "new", "selector", "arguments:", "yourself"]
  49254. }),
  49255. $globals.ASTInterpreter);
  49256. $core.addMethod(
  49257. $core.method({
  49258. selector: "messageNotUnderstood:receiver:",
  49259. protocol: 'private',
  49260. fn: function (aMessage,anObject){
  49261. var self=this;
  49262. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  49263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49264. return $core.withContext(function($ctx1) {
  49265. //>>excludeEnd("ctx");
  49266. var $1,$2;
  49267. $1=$recv($MessageNotUnderstood())._new();
  49268. $recv($1)._meesage_(aMessage);
  49269. $recv($1)._receiver_(anObject);
  49270. $2=$recv($1)._signal();
  49271. return self;
  49272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49273. }, function($ctx1) {$ctx1.fill(self,"messageNotUnderstood:receiver:",{aMessage:aMessage,anObject:anObject},$globals.ASTInterpreter)});
  49274. //>>excludeEnd("ctx");
  49275. },
  49276. //>>excludeStart("ide", pragmas.excludeIdeData);
  49277. args: ["aMessage", "anObject"],
  49278. source: "messageNotUnderstood: aMessage receiver: anObject\x0a\x09MessageNotUnderstood new\x0a\x09\x09meesage: aMessage;\x0a\x09\x09receiver: anObject;\x0a\x09\x09signal",
  49279. referencedClasses: ["MessageNotUnderstood"],
  49280. //>>excludeEnd("ide");
  49281. messageSends: ["meesage:", "new", "receiver:", "signal"]
  49282. }),
  49283. $globals.ASTInterpreter);
  49284. $core.addMethod(
  49285. $core.method({
  49286. selector: "next",
  49287. protocol: 'interpreting',
  49288. fn: function (){
  49289. var self=this;
  49290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49291. return $core.withContext(function($ctx1) {
  49292. //>>excludeEnd("ctx");
  49293. self._node_($recv(self._node())._nextNode());
  49294. return self;
  49295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49296. }, function($ctx1) {$ctx1.fill(self,"next",{},$globals.ASTInterpreter)});
  49297. //>>excludeEnd("ctx");
  49298. },
  49299. //>>excludeStart("ide", pragmas.excludeIdeData);
  49300. args: [],
  49301. source: "next\x0a\x09self node: self node nextNode",
  49302. referencedClasses: [],
  49303. //>>excludeEnd("ide");
  49304. messageSends: ["node:", "nextNode", "node"]
  49305. }),
  49306. $globals.ASTInterpreter);
  49307. $core.addMethod(
  49308. $core.method({
  49309. selector: "node",
  49310. protocol: 'accessing',
  49311. fn: function (){
  49312. var self=this;
  49313. var $1;
  49314. $1=self["@node"];
  49315. return $1;
  49316. },
  49317. //>>excludeStart("ide", pragmas.excludeIdeData);
  49318. args: [],
  49319. source: "node\x0a\x09\x22Answer the next node, ie the node to be evaluated in the next step\x22\x0a\x09\x0a\x09^ node",
  49320. referencedClasses: [],
  49321. //>>excludeEnd("ide");
  49322. messageSends: []
  49323. }),
  49324. $globals.ASTInterpreter);
  49325. $core.addMethod(
  49326. $core.method({
  49327. selector: "node:",
  49328. protocol: 'accessing',
  49329. fn: function (aNode){
  49330. var self=this;
  49331. self["@node"]=aNode;
  49332. return self;
  49333. },
  49334. //>>excludeStart("ide", pragmas.excludeIdeData);
  49335. args: ["aNode"],
  49336. source: "node: aNode\x0a\x09node := aNode",
  49337. referencedClasses: [],
  49338. //>>excludeEnd("ide");
  49339. messageSends: []
  49340. }),
  49341. $globals.ASTInterpreter);
  49342. $core.addMethod(
  49343. $core.method({
  49344. selector: "peek",
  49345. protocol: 'stack',
  49346. fn: function (){
  49347. var self=this;
  49348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49349. return $core.withContext(function($ctx1) {
  49350. //>>excludeEnd("ctx");
  49351. var $1,$2;
  49352. var $early={};
  49353. try {
  49354. $1=self._stack();
  49355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49356. $ctx1.sendIdx["stack"]=1;
  49357. //>>excludeEnd("ctx");
  49358. $recv($1)._ifEmpty_((function(){
  49359. throw $early=[nil];
  49360. }));
  49361. $2=$recv(self._stack())._last();
  49362. return $2;
  49363. }
  49364. catch(e) {if(e===$early)return e[0]; throw e}
  49365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49366. }, function($ctx1) {$ctx1.fill(self,"peek",{},$globals.ASTInterpreter)});
  49367. //>>excludeEnd("ctx");
  49368. },
  49369. //>>excludeStart("ide", pragmas.excludeIdeData);
  49370. args: [],
  49371. 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",
  49372. referencedClasses: [],
  49373. //>>excludeEnd("ide");
  49374. messageSends: ["ifEmpty:", "stack", "last"]
  49375. }),
  49376. $globals.ASTInterpreter);
  49377. $core.addMethod(
  49378. $core.method({
  49379. selector: "pop",
  49380. protocol: 'stack',
  49381. fn: function (){
  49382. var self=this;
  49383. var peekedValue;
  49384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49385. return $core.withContext(function($ctx1) {
  49386. //>>excludeEnd("ctx");
  49387. var $1;
  49388. peekedValue=self._peek();
  49389. $recv(self._stack())._removeLast();
  49390. $1=peekedValue;
  49391. return $1;
  49392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49393. }, function($ctx1) {$ctx1.fill(self,"pop",{peekedValue:peekedValue},$globals.ASTInterpreter)});
  49394. //>>excludeEnd("ctx");
  49395. },
  49396. //>>excludeStart("ide", pragmas.excludeIdeData);
  49397. args: [],
  49398. 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",
  49399. referencedClasses: [],
  49400. //>>excludeEnd("ide");
  49401. messageSends: ["peek", "removeLast", "stack"]
  49402. }),
  49403. $globals.ASTInterpreter);
  49404. $core.addMethod(
  49405. $core.method({
  49406. selector: "proceed",
  49407. protocol: 'interpreting',
  49408. fn: function (){
  49409. var self=this;
  49410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49411. return $core.withContext(function($ctx1) {
  49412. //>>excludeEnd("ctx");
  49413. $recv((function(){
  49414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49415. return $core.withContext(function($ctx2) {
  49416. //>>excludeEnd("ctx");
  49417. return self._atEnd();
  49418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49419. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  49420. //>>excludeEnd("ctx");
  49421. }))._whileFalse_((function(){
  49422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49423. return $core.withContext(function($ctx2) {
  49424. //>>excludeEnd("ctx");
  49425. return self._step();
  49426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49427. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  49428. //>>excludeEnd("ctx");
  49429. }));
  49430. return self;
  49431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49432. }, function($ctx1) {$ctx1.fill(self,"proceed",{},$globals.ASTInterpreter)});
  49433. //>>excludeEnd("ctx");
  49434. },
  49435. //>>excludeStart("ide", pragmas.excludeIdeData);
  49436. args: [],
  49437. source: "proceed\x0a\x09\x22Eagerly evaluate the ast\x22\x0a\x09\x0a\x09[ self atEnd ] \x0a\x09\x09whileFalse: [ self step ]",
  49438. referencedClasses: [],
  49439. //>>excludeEnd("ide");
  49440. messageSends: ["whileFalse:", "atEnd", "step"]
  49441. }),
  49442. $globals.ASTInterpreter);
  49443. $core.addMethod(
  49444. $core.method({
  49445. selector: "push:",
  49446. protocol: 'stack',
  49447. fn: function (anObject){
  49448. var self=this;
  49449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49450. return $core.withContext(function($ctx1) {
  49451. //>>excludeEnd("ctx");
  49452. var $1;
  49453. $1=$recv(self._stack())._add_(anObject);
  49454. return $1;
  49455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49456. }, function($ctx1) {$ctx1.fill(self,"push:",{anObject:anObject},$globals.ASTInterpreter)});
  49457. //>>excludeEnd("ctx");
  49458. },
  49459. //>>excludeStart("ide", pragmas.excludeIdeData);
  49460. args: ["anObject"],
  49461. source: "push: anObject\x0a\x09\x22Push an object to the context stack\x22\x0a\x09\x0a\x09^ self stack add: anObject",
  49462. referencedClasses: [],
  49463. //>>excludeEnd("ide");
  49464. messageSends: ["add:", "stack"]
  49465. }),
  49466. $globals.ASTInterpreter);
  49467. $core.addMethod(
  49468. $core.method({
  49469. selector: "restart",
  49470. protocol: 'interpreting',
  49471. fn: function (){
  49472. var self=this;
  49473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49474. return $core.withContext(function($ctx1) {
  49475. //>>excludeEnd("ctx");
  49476. self._node_($recv($recv(self._context())._ast())._nextChild());
  49477. return self;
  49478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49479. }, function($ctx1) {$ctx1.fill(self,"restart",{},$globals.ASTInterpreter)});
  49480. //>>excludeEnd("ctx");
  49481. },
  49482. //>>excludeStart("ide", pragmas.excludeIdeData);
  49483. args: [],
  49484. source: "restart\x0a\x09self node: self context ast nextChild",
  49485. referencedClasses: [],
  49486. //>>excludeEnd("ide");
  49487. messageSends: ["node:", "nextChild", "ast", "context"]
  49488. }),
  49489. $globals.ASTInterpreter);
  49490. $core.addMethod(
  49491. $core.method({
  49492. selector: "result",
  49493. protocol: 'accessing',
  49494. fn: function (){
  49495. var self=this;
  49496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49497. return $core.withContext(function($ctx1) {
  49498. //>>excludeEnd("ctx");
  49499. var $2,$1;
  49500. $2=self._hasReturned();
  49501. if($core.assert($2)){
  49502. $1=self._returnValue();
  49503. } else {
  49504. $1=$recv(self._context())._receiver();
  49505. };
  49506. return $1;
  49507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49508. }, function($ctx1) {$ctx1.fill(self,"result",{},$globals.ASTInterpreter)});
  49509. //>>excludeEnd("ctx");
  49510. },
  49511. //>>excludeStart("ide", pragmas.excludeIdeData);
  49512. args: [],
  49513. source: "result\x0a\x09^ self hasReturned \x0a\x09\x09ifTrue: [ self returnValue ] \x0a\x09\x09ifFalse: [ self context receiver ]",
  49514. referencedClasses: [],
  49515. //>>excludeEnd("ide");
  49516. messageSends: ["ifTrue:ifFalse:", "hasReturned", "returnValue", "receiver", "context"]
  49517. }),
  49518. $globals.ASTInterpreter);
  49519. $core.addMethod(
  49520. $core.method({
  49521. selector: "returnValue",
  49522. protocol: 'accessing',
  49523. fn: function (){
  49524. var self=this;
  49525. var $1;
  49526. $1=self["@returnValue"];
  49527. return $1;
  49528. },
  49529. //>>excludeStart("ide", pragmas.excludeIdeData);
  49530. args: [],
  49531. source: "returnValue\x0a\x09^ returnValue",
  49532. referencedClasses: [],
  49533. //>>excludeEnd("ide");
  49534. messageSends: []
  49535. }),
  49536. $globals.ASTInterpreter);
  49537. $core.addMethod(
  49538. $core.method({
  49539. selector: "returnValue:",
  49540. protocol: 'accessing',
  49541. fn: function (anObject){
  49542. var self=this;
  49543. self["@returnValue"]=anObject;
  49544. return self;
  49545. },
  49546. //>>excludeStart("ide", pragmas.excludeIdeData);
  49547. args: ["anObject"],
  49548. source: "returnValue: anObject\x0a\x09returnValue := anObject",
  49549. referencedClasses: [],
  49550. //>>excludeEnd("ide");
  49551. messageSends: []
  49552. }),
  49553. $globals.ASTInterpreter);
  49554. $core.addMethod(
  49555. $core.method({
  49556. selector: "sendMessage:to:superSend:",
  49557. protocol: 'private',
  49558. fn: function (aMessage,anObject,aBoolean){
  49559. var self=this;
  49560. var method;
  49561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49562. return $core.withContext(function($ctx1) {
  49563. //>>excludeEnd("ctx");
  49564. var $1,$3,$2,$4,$5,$6,$receiver;
  49565. var $early={};
  49566. try {
  49567. if(!$core.assert(aBoolean)){
  49568. $1=$recv(aMessage)._sendTo_(anObject);
  49569. return $1;
  49570. };
  49571. $3=$recv(anObject)._class();
  49572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49573. $ctx1.sendIdx["class"]=1;
  49574. //>>excludeEnd("ctx");
  49575. $2=$recv($3)._superclass();
  49576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49577. $ctx1.sendIdx["superclass"]=1;
  49578. //>>excludeEnd("ctx");
  49579. if(($receiver = $2) == null || $receiver.isNil){
  49580. $4=self._messageNotUnderstood_receiver_(aMessage,anObject);
  49581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49582. $ctx1.sendIdx["messageNotUnderstood:receiver:"]=1;
  49583. //>>excludeEnd("ctx");
  49584. return $4;
  49585. } else {
  49586. $2;
  49587. };
  49588. method=$recv($recv($recv($recv(anObject)._class())._superclass())._methodDictionary())._at_ifAbsent_($recv(aMessage)._selector(),(function(){
  49589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49590. return $core.withContext(function($ctx2) {
  49591. //>>excludeEnd("ctx");
  49592. $5=self._messageNotUnderstood_receiver_(aMessage,anObject);
  49593. throw $early=[$5];
  49594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49595. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  49596. //>>excludeEnd("ctx");
  49597. }));
  49598. $6=$recv(method)._sendTo_arguments_(anObject,$recv(aMessage)._arguments());
  49599. return $6;
  49600. }
  49601. catch(e) {if(e===$early)return e[0]; throw e}
  49602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49603. }, function($ctx1) {$ctx1.fill(self,"sendMessage:to:superSend:",{aMessage:aMessage,anObject:anObject,aBoolean:aBoolean,method:method},$globals.ASTInterpreter)});
  49604. //>>excludeEnd("ctx");
  49605. },
  49606. //>>excludeStart("ide", pragmas.excludeIdeData);
  49607. args: ["aMessage", "anObject", "aBoolean"],
  49608. 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",
  49609. referencedClasses: [],
  49610. //>>excludeEnd("ide");
  49611. messageSends: ["ifFalse:", "sendTo:", "ifNil:", "superclass", "class", "messageNotUnderstood:receiver:", "at:ifAbsent:", "methodDictionary", "selector", "sendTo:arguments:", "arguments"]
  49612. }),
  49613. $globals.ASTInterpreter);
  49614. $core.addMethod(
  49615. $core.method({
  49616. selector: "setNonLocalReturnFromContext:",
  49617. protocol: 'interpreting',
  49618. fn: function (aContext){
  49619. var self=this;
  49620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49621. return $core.withContext(function($ctx1) {
  49622. //>>excludeEnd("ctx");
  49623. var $2,$1;
  49624. $2=$recv(aContext)._interpreter();
  49625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49626. $ctx1.sendIdx["interpreter"]=1;
  49627. //>>excludeEnd("ctx");
  49628. $1=$recv($2)._hasReturned();
  49629. if($core.assert($1)){
  49630. self["@returned"]=true;
  49631. self["@returned"];
  49632. self._returnValue_($recv($recv(aContext)._interpreter())._returnValue());
  49633. };
  49634. return self;
  49635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49636. }, function($ctx1) {$ctx1.fill(self,"setNonLocalReturnFromContext:",{aContext:aContext},$globals.ASTInterpreter)});
  49637. //>>excludeEnd("ctx");
  49638. },
  49639. //>>excludeStart("ide", pragmas.excludeIdeData);
  49640. args: ["aContext"],
  49641. source: "setNonLocalReturnFromContext: aContext\x0a\x09aContext interpreter hasReturned ifTrue: [\x0a\x09\x09returned := true.\x0a\x09\x09self returnValue: aContext interpreter returnValue ]",
  49642. referencedClasses: [],
  49643. //>>excludeEnd("ide");
  49644. messageSends: ["ifTrue:", "hasReturned", "interpreter", "returnValue:", "returnValue"]
  49645. }),
  49646. $globals.ASTInterpreter);
  49647. $core.addMethod(
  49648. $core.method({
  49649. selector: "skip",
  49650. protocol: 'interpreting',
  49651. fn: function (){
  49652. var self=this;
  49653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49654. return $core.withContext(function($ctx1) {
  49655. //>>excludeEnd("ctx");
  49656. self._next();
  49657. return self;
  49658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49659. }, function($ctx1) {$ctx1.fill(self,"skip",{},$globals.ASTInterpreter)});
  49660. //>>excludeEnd("ctx");
  49661. },
  49662. //>>excludeStart("ide", pragmas.excludeIdeData);
  49663. args: [],
  49664. source: "skip\x0a\x09self next",
  49665. referencedClasses: [],
  49666. //>>excludeEnd("ide");
  49667. messageSends: ["next"]
  49668. }),
  49669. $globals.ASTInterpreter);
  49670. $core.addMethod(
  49671. $core.method({
  49672. selector: "stack",
  49673. protocol: 'accessing',
  49674. fn: function (){
  49675. var self=this;
  49676. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  49677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49678. return $core.withContext(function($ctx1) {
  49679. //>>excludeEnd("ctx");
  49680. var $2,$1,$receiver;
  49681. $2=self["@stack"];
  49682. if(($receiver = $2) == null || $receiver.isNil){
  49683. self["@stack"]=$recv($OrderedCollection())._new();
  49684. $1=self["@stack"];
  49685. } else {
  49686. $1=$2;
  49687. };
  49688. return $1;
  49689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49690. }, function($ctx1) {$ctx1.fill(self,"stack",{},$globals.ASTInterpreter)});
  49691. //>>excludeEnd("ctx");
  49692. },
  49693. //>>excludeStart("ide", pragmas.excludeIdeData);
  49694. args: [],
  49695. source: "stack\x0a\x09^ stack ifNil: [ stack := OrderedCollection new ]",
  49696. referencedClasses: ["OrderedCollection"],
  49697. //>>excludeEnd("ide");
  49698. messageSends: ["ifNil:", "new"]
  49699. }),
  49700. $globals.ASTInterpreter);
  49701. $core.addMethod(
  49702. $core.method({
  49703. selector: "step",
  49704. protocol: 'interpreting',
  49705. fn: function (){
  49706. var self=this;
  49707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49708. return $core.withContext(function($ctx1) {
  49709. //>>excludeEnd("ctx");
  49710. var $1;
  49711. self._interpret();
  49712. $1=self._next();
  49713. return self;
  49714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49715. }, function($ctx1) {$ctx1.fill(self,"step",{},$globals.ASTInterpreter)});
  49716. //>>excludeEnd("ctx");
  49717. },
  49718. //>>excludeStart("ide", pragmas.excludeIdeData);
  49719. args: [],
  49720. source: "step\x0a\x09self \x0a\x09\x09interpret; \x0a\x09\x09next",
  49721. referencedClasses: [],
  49722. //>>excludeEnd("ide");
  49723. messageSends: ["interpret", "next"]
  49724. }),
  49725. $globals.ASTInterpreter);
  49726. $core.addMethod(
  49727. $core.method({
  49728. selector: "stepOver",
  49729. protocol: 'interpreting',
  49730. fn: function (){
  49731. var self=this;
  49732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49733. return $core.withContext(function($ctx1) {
  49734. //>>excludeEnd("ctx");
  49735. var $2,$1;
  49736. self._step();
  49737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49738. $ctx1.sendIdx["step"]=1;
  49739. //>>excludeEnd("ctx");
  49740. $recv((function(){
  49741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49742. return $core.withContext(function($ctx2) {
  49743. //>>excludeEnd("ctx");
  49744. $2=self._node();
  49745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49746. $ctx2.sendIdx["node"]=1;
  49747. //>>excludeEnd("ctx");
  49748. $1=$recv($2)._isNil();
  49749. return $recv($1)._or_((function(){
  49750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49751. return $core.withContext(function($ctx3) {
  49752. //>>excludeEnd("ctx");
  49753. return $recv(self._node())._isSteppingNode();
  49754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49755. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  49756. //>>excludeEnd("ctx");
  49757. }));
  49758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49759. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  49760. //>>excludeEnd("ctx");
  49761. }))._whileFalse_((function(){
  49762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49763. return $core.withContext(function($ctx2) {
  49764. //>>excludeEnd("ctx");
  49765. return self._step();
  49766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49767. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  49768. //>>excludeEnd("ctx");
  49769. }));
  49770. return self;
  49771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49772. }, function($ctx1) {$ctx1.fill(self,"stepOver",{},$globals.ASTInterpreter)});
  49773. //>>excludeEnd("ctx");
  49774. },
  49775. //>>excludeStart("ide", pragmas.excludeIdeData);
  49776. args: [],
  49777. source: "stepOver\x0a\x09self step.\x0a\x09\x0a\x09[ self node isNil or: [ self node isSteppingNode ] ] whileFalse: [ \x0a\x09\x09self step ]",
  49778. referencedClasses: [],
  49779. //>>excludeEnd("ide");
  49780. messageSends: ["step", "whileFalse:", "or:", "isNil", "node", "isSteppingNode"]
  49781. }),
  49782. $globals.ASTInterpreter);
  49783. $core.addMethod(
  49784. $core.method({
  49785. selector: "visit:",
  49786. protocol: 'visiting',
  49787. fn: function (aNode){
  49788. var self=this;
  49789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49790. return $core.withContext(function($ctx1) {
  49791. //>>excludeEnd("ctx");
  49792. var $1;
  49793. $1=self._hasReturned();
  49794. if(!$core.assert($1)){
  49795. (
  49796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49797. $ctx1.supercall = true,
  49798. //>>excludeEnd("ctx");
  49799. $globals.ASTInterpreter.superclass.fn.prototype._visit_.apply($recv(self), [aNode]));
  49800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49801. $ctx1.supercall = false;
  49802. //>>excludeEnd("ctx");;
  49803. };
  49804. return self;
  49805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49806. }, function($ctx1) {$ctx1.fill(self,"visit:",{aNode:aNode},$globals.ASTInterpreter)});
  49807. //>>excludeEnd("ctx");
  49808. },
  49809. //>>excludeStart("ide", pragmas.excludeIdeData);
  49810. args: ["aNode"],
  49811. source: "visit: aNode\x0a\x09self hasReturned ifFalse: [ super visit: aNode ]",
  49812. referencedClasses: [],
  49813. //>>excludeEnd("ide");
  49814. messageSends: ["ifFalse:", "hasReturned", "visit:"]
  49815. }),
  49816. $globals.ASTInterpreter);
  49817. $core.addMethod(
  49818. $core.method({
  49819. selector: "visitAssignmentNode:",
  49820. protocol: 'visiting',
  49821. fn: function (aNode){
  49822. var self=this;
  49823. var poppedValue;
  49824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49825. return $core.withContext(function($ctx1) {
  49826. //>>excludeEnd("ctx");
  49827. poppedValue=self._pop();
  49828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49829. $ctx1.sendIdx["pop"]=1;
  49830. //>>excludeEnd("ctx");
  49831. self._pop();
  49832. self._push_(poppedValue);
  49833. self._assign_to_($recv(aNode)._left(),poppedValue);
  49834. return self;
  49835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49836. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode,poppedValue:poppedValue},$globals.ASTInterpreter)});
  49837. //>>excludeEnd("ctx");
  49838. },
  49839. //>>excludeStart("ide", pragmas.excludeIdeData);
  49840. args: ["aNode"],
  49841. 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",
  49842. referencedClasses: [],
  49843. //>>excludeEnd("ide");
  49844. messageSends: ["pop", "push:", "assign:to:", "left"]
  49845. }),
  49846. $globals.ASTInterpreter);
  49847. $core.addMethod(
  49848. $core.method({
  49849. selector: "visitBlockNode:",
  49850. protocol: 'visiting',
  49851. fn: function (aNode){
  49852. var self=this;
  49853. var block;
  49854. function $AIBlockClosure(){return $globals.AIBlockClosure||(typeof AIBlockClosure=="undefined"?nil:AIBlockClosure)}
  49855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49856. return $core.withContext(function($ctx1) {
  49857. //>>excludeEnd("ctx");
  49858. block=$recv($AIBlockClosure())._forContext_node_(self._context(),aNode);
  49859. self._push_(block);
  49860. return self;
  49861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49862. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode,block:block},$globals.ASTInterpreter)});
  49863. //>>excludeEnd("ctx");
  49864. },
  49865. //>>excludeStart("ide", pragmas.excludeIdeData);
  49866. args: ["aNode"],
  49867. 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",
  49868. referencedClasses: ["AIBlockClosure"],
  49869. //>>excludeEnd("ide");
  49870. messageSends: ["forContext:node:", "context", "push:"]
  49871. }),
  49872. $globals.ASTInterpreter);
  49873. $core.addMethod(
  49874. $core.method({
  49875. selector: "visitBlockSequenceNode:",
  49876. protocol: 'visiting',
  49877. fn: function (aNode){
  49878. var self=this;
  49879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49880. return $core.withContext(function($ctx1) {
  49881. //>>excludeEnd("ctx");
  49882. (
  49883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49884. $ctx1.supercall = true,
  49885. //>>excludeEnd("ctx");
  49886. $globals.ASTInterpreter.superclass.fn.prototype._visitBlockSequenceNode_.apply($recv(self), [aNode]));
  49887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49888. $ctx1.supercall = false;
  49889. //>>excludeEnd("ctx");;
  49890. self["@forceAtEnd"]=true;
  49891. return self;
  49892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49893. }, function($ctx1) {$ctx1.fill(self,"visitBlockSequenceNode:",{aNode:aNode},$globals.ASTInterpreter)});
  49894. //>>excludeEnd("ctx");
  49895. },
  49896. //>>excludeStart("ide", pragmas.excludeIdeData);
  49897. args: ["aNode"],
  49898. 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",
  49899. referencedClasses: [],
  49900. //>>excludeEnd("ide");
  49901. messageSends: ["visitBlockSequenceNode:"]
  49902. }),
  49903. $globals.ASTInterpreter);
  49904. $core.addMethod(
  49905. $core.method({
  49906. selector: "visitDynamicArrayNode:",
  49907. protocol: 'visiting',
  49908. fn: function (aNode){
  49909. var self=this;
  49910. var array;
  49911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49912. return $core.withContext(function($ctx1) {
  49913. //>>excludeEnd("ctx");
  49914. array=[];
  49915. $recv($recv(aNode)._nodes())._do_((function(each){
  49916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49917. return $core.withContext(function($ctx2) {
  49918. //>>excludeEnd("ctx");
  49919. return $recv(array)._addFirst_(self._pop());
  49920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49921. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  49922. //>>excludeEnd("ctx");
  49923. }));
  49924. self._push_(array);
  49925. return self;
  49926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49927. }, function($ctx1) {$ctx1.fill(self,"visitDynamicArrayNode:",{aNode:aNode,array:array},$globals.ASTInterpreter)});
  49928. //>>excludeEnd("ctx");
  49929. },
  49930. //>>excludeStart("ide", pragmas.excludeIdeData);
  49931. args: ["aNode"],
  49932. 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",
  49933. referencedClasses: [],
  49934. //>>excludeEnd("ide");
  49935. messageSends: ["do:", "nodes", "addFirst:", "pop", "push:"]
  49936. }),
  49937. $globals.ASTInterpreter);
  49938. $core.addMethod(
  49939. $core.method({
  49940. selector: "visitDynamicDictionaryNode:",
  49941. protocol: 'visiting',
  49942. fn: function (aNode){
  49943. var self=this;
  49944. var keyValueList;
  49945. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  49946. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  49947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49948. return $core.withContext(function($ctx1) {
  49949. //>>excludeEnd("ctx");
  49950. keyValueList=$recv($OrderedCollection())._new();
  49951. $recv($recv(aNode)._nodes())._do_((function(each){
  49952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49953. return $core.withContext(function($ctx2) {
  49954. //>>excludeEnd("ctx");
  49955. return $recv(keyValueList)._add_(self._pop());
  49956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49957. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  49958. //>>excludeEnd("ctx");
  49959. }));
  49960. self._push_($recv($HashedCollection())._newFromPairs_($recv(keyValueList)._reversed()));
  49961. return self;
  49962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49963. }, function($ctx1) {$ctx1.fill(self,"visitDynamicDictionaryNode:",{aNode:aNode,keyValueList:keyValueList},$globals.ASTInterpreter)});
  49964. //>>excludeEnd("ctx");
  49965. },
  49966. //>>excludeStart("ide", pragmas.excludeIdeData);
  49967. args: ["aNode"],
  49968. 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)",
  49969. referencedClasses: ["OrderedCollection", "HashedCollection"],
  49970. //>>excludeEnd("ide");
  49971. messageSends: ["new", "do:", "nodes", "add:", "pop", "push:", "newFromPairs:", "reversed"]
  49972. }),
  49973. $globals.ASTInterpreter);
  49974. $core.addMethod(
  49975. $core.method({
  49976. selector: "visitJSStatementNode:",
  49977. protocol: 'visiting',
  49978. fn: function (aNode){
  49979. var self=this;
  49980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49981. return $core.withContext(function($ctx1) {
  49982. //>>excludeEnd("ctx");
  49983. self["@returned"]=true;
  49984. self._returnValue_(self._eval_($recv(aNode)._source()));
  49985. return self;
  49986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49987. }, function($ctx1) {$ctx1.fill(self,"visitJSStatementNode:",{aNode:aNode},$globals.ASTInterpreter)});
  49988. //>>excludeEnd("ctx");
  49989. },
  49990. //>>excludeStart("ide", pragmas.excludeIdeData);
  49991. args: ["aNode"],
  49992. source: "visitJSStatementNode: aNode\x0a\x09returned := true.\x0a\x09self returnValue: (self eval: aNode source)",
  49993. referencedClasses: [],
  49994. //>>excludeEnd("ide");
  49995. messageSends: ["returnValue:", "eval:", "source"]
  49996. }),
  49997. $globals.ASTInterpreter);
  49998. $core.addMethod(
  49999. $core.method({
  50000. selector: "visitNode:",
  50001. protocol: 'visiting',
  50002. fn: function (aNode){
  50003. var self=this;
  50004. return self;
  50005. },
  50006. //>>excludeStart("ide", pragmas.excludeIdeData);
  50007. args: ["aNode"],
  50008. source: "visitNode: aNode\x0a\x09\x22Do nothing by default. Especially, do not visit children recursively.\x22",
  50009. referencedClasses: [],
  50010. //>>excludeEnd("ide");
  50011. messageSends: []
  50012. }),
  50013. $globals.ASTInterpreter);
  50014. $core.addMethod(
  50015. $core.method({
  50016. selector: "visitReturnNode:",
  50017. protocol: 'visiting',
  50018. fn: function (aNode){
  50019. var self=this;
  50020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50021. return $core.withContext(function($ctx1) {
  50022. //>>excludeEnd("ctx");
  50023. self["@returned"]=true;
  50024. self._returnValue_(self._pop());
  50025. return self;
  50026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50027. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode},$globals.ASTInterpreter)});
  50028. //>>excludeEnd("ctx");
  50029. },
  50030. //>>excludeStart("ide", pragmas.excludeIdeData);
  50031. args: ["aNode"],
  50032. source: "visitReturnNode: aNode\x0a\x09returned := true.\x0a\x09self returnValue: self pop",
  50033. referencedClasses: [],
  50034. //>>excludeEnd("ide");
  50035. messageSends: ["returnValue:", "pop"]
  50036. }),
  50037. $globals.ASTInterpreter);
  50038. $core.addMethod(
  50039. $core.method({
  50040. selector: "visitSendNode:",
  50041. protocol: 'visiting',
  50042. fn: function (aNode){
  50043. var self=this;
  50044. var receiver,args,message,result;
  50045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50046. return $core.withContext(function($ctx1) {
  50047. //>>excludeEnd("ctx");
  50048. var $1;
  50049. args=$recv($recv(aNode)._arguments())._collect_((function(each){
  50050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50051. return $core.withContext(function($ctx2) {
  50052. //>>excludeEnd("ctx");
  50053. return self._pop();
  50054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50055. $ctx2.sendIdx["pop"]=1;
  50056. //>>excludeEnd("ctx");
  50057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50058. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  50059. //>>excludeEnd("ctx");
  50060. }));
  50061. receiver=self._pop();
  50062. message=self._messageFromSendNode_arguments_(aNode,$recv(args)._reversed());
  50063. result=self._sendMessage_to_superSend_(message,receiver,$recv(aNode)._superSend());
  50064. $1=$recv($recv(aNode)._isCascadeSendNode())._and_((function(){
  50065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50066. return $core.withContext(function($ctx2) {
  50067. //>>excludeEnd("ctx");
  50068. return $recv($recv(aNode)._isLastChild())._not();
  50069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50070. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  50071. //>>excludeEnd("ctx");
  50072. }));
  50073. if($core.assert($1)){
  50074. self._push_(receiver);
  50075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50076. $ctx1.sendIdx["push:"]=1;
  50077. //>>excludeEnd("ctx");
  50078. } else {
  50079. self._push_(result);
  50080. };
  50081. return self;
  50082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50083. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode,receiver:receiver,args:args,message:message,result:result},$globals.ASTInterpreter)});
  50084. //>>excludeEnd("ctx");
  50085. },
  50086. //>>excludeStart("ide", pragmas.excludeIdeData);
  50087. args: ["aNode"],
  50088. 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 ]",
  50089. referencedClasses: [],
  50090. //>>excludeEnd("ide");
  50091. messageSends: ["collect:", "arguments", "pop", "messageFromSendNode:arguments:", "reversed", "sendMessage:to:superSend:", "superSend", "ifTrue:ifFalse:", "and:", "isCascadeSendNode", "not", "isLastChild", "push:"]
  50092. }),
  50093. $globals.ASTInterpreter);
  50094. $core.addMethod(
  50095. $core.method({
  50096. selector: "visitSequenceNode:",
  50097. protocol: 'visiting',
  50098. fn: function (aNode){
  50099. var self=this;
  50100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50101. return $core.withContext(function($ctx1) {
  50102. //>>excludeEnd("ctx");
  50103. $recv($recv(aNode)._temps())._do_((function(each){
  50104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50105. return $core.withContext(function($ctx2) {
  50106. //>>excludeEnd("ctx");
  50107. return $recv(self._context())._defineLocal_(each);
  50108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50109. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  50110. //>>excludeEnd("ctx");
  50111. }));
  50112. return self;
  50113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50114. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},$globals.ASTInterpreter)});
  50115. //>>excludeEnd("ctx");
  50116. },
  50117. //>>excludeStart("ide", pragmas.excludeIdeData);
  50118. args: ["aNode"],
  50119. source: "visitSequenceNode: aNode\x0a\x09aNode temps do: [ :each |\x0a\x09\x09self context defineLocal: each ]",
  50120. referencedClasses: [],
  50121. //>>excludeEnd("ide");
  50122. messageSends: ["do:", "temps", "defineLocal:", "context"]
  50123. }),
  50124. $globals.ASTInterpreter);
  50125. $core.addMethod(
  50126. $core.method({
  50127. selector: "visitValueNode:",
  50128. protocol: 'visiting',
  50129. fn: function (aNode){
  50130. var self=this;
  50131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50132. return $core.withContext(function($ctx1) {
  50133. //>>excludeEnd("ctx");
  50134. self._push_($recv(aNode)._value());
  50135. return self;
  50136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50137. }, function($ctx1) {$ctx1.fill(self,"visitValueNode:",{aNode:aNode},$globals.ASTInterpreter)});
  50138. //>>excludeEnd("ctx");
  50139. },
  50140. //>>excludeStart("ide", pragmas.excludeIdeData);
  50141. args: ["aNode"],
  50142. source: "visitValueNode: aNode\x0a\x09self push: aNode value",
  50143. referencedClasses: [],
  50144. //>>excludeEnd("ide");
  50145. messageSends: ["push:", "value"]
  50146. }),
  50147. $globals.ASTInterpreter);
  50148. $core.addMethod(
  50149. $core.method({
  50150. selector: "visitVariableNode:",
  50151. protocol: 'visiting',
  50152. fn: function (aNode){
  50153. var self=this;
  50154. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  50155. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  50156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50157. return $core.withContext(function($ctx1) {
  50158. //>>excludeEnd("ctx");
  50159. var $2,$1,$5,$6,$4,$3,$8,$10,$9,$11,$12,$13,$15,$14,$16,$17,$7;
  50160. $2=$recv(aNode)._binding();
  50161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50162. $ctx1.sendIdx["binding"]=1;
  50163. //>>excludeEnd("ctx");
  50164. $1=$recv($2)._isUnknownVar();
  50165. if($core.assert($1)){
  50166. $5=$recv($PlatformInterface())._globals();
  50167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50168. $ctx1.sendIdx["globals"]=1;
  50169. //>>excludeEnd("ctx");
  50170. $6=$recv(aNode)._value();
  50171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50172. $ctx1.sendIdx["value"]=1;
  50173. //>>excludeEnd("ctx");
  50174. $4=$recv($5)._at_ifAbsent_($6,(function(){
  50175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50176. return $core.withContext(function($ctx2) {
  50177. //>>excludeEnd("ctx");
  50178. return self._error_("Unknown variable");
  50179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50180. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  50181. //>>excludeEnd("ctx");
  50182. }));
  50183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50184. $ctx1.sendIdx["at:ifAbsent:"]=1;
  50185. //>>excludeEnd("ctx");
  50186. $3=self._push_($4);
  50187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50188. $ctx1.sendIdx["push:"]=1;
  50189. //>>excludeEnd("ctx");
  50190. return $3;
  50191. };
  50192. $8=$recv($recv(aNode)._binding())._isInstanceVar();
  50193. if($core.assert($8)){
  50194. $10=self._context();
  50195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50196. $ctx1.sendIdx["context"]=1;
  50197. //>>excludeEnd("ctx");
  50198. $9=$recv($10)._receiver();
  50199. $11=$recv(aNode)._value();
  50200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50201. $ctx1.sendIdx["value"]=2;
  50202. //>>excludeEnd("ctx");
  50203. $7=$recv($9)._instVarAt_($11);
  50204. } else {
  50205. $12=self._context();
  50206. $13=$recv(aNode)._value();
  50207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50208. $ctx1.sendIdx["value"]=3;
  50209. //>>excludeEnd("ctx");
  50210. $7=$recv($12)._localAt_ifAbsent_($13,(function(){
  50211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50212. return $core.withContext(function($ctx2) {
  50213. //>>excludeEnd("ctx");
  50214. $15=$recv(aNode)._value();
  50215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50216. $ctx2.sendIdx["value"]=4;
  50217. //>>excludeEnd("ctx");
  50218. $14=$recv($15)._isCapitalized();
  50219. if($core.assert($14)){
  50220. $16=$recv($Smalltalk())._globals();
  50221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50222. $ctx2.sendIdx["globals"]=2;
  50223. //>>excludeEnd("ctx");
  50224. $17=$recv(aNode)._value();
  50225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50226. $ctx2.sendIdx["value"]=5;
  50227. //>>excludeEnd("ctx");
  50228. return $recv($16)._at_ifAbsent_($17,(function(){
  50229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50230. return $core.withContext(function($ctx3) {
  50231. //>>excludeEnd("ctx");
  50232. return $recv($recv($PlatformInterface())._globals())._at_($recv(aNode)._value());
  50233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50234. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,7)});
  50235. //>>excludeEnd("ctx");
  50236. }));
  50237. };
  50238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50239. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  50240. //>>excludeEnd("ctx");
  50241. }));
  50242. };
  50243. self._push_($7);
  50244. return self;
  50245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50246. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},$globals.ASTInterpreter)});
  50247. //>>excludeEnd("ctx");
  50248. },
  50249. //>>excludeStart("ide", pragmas.excludeIdeData);
  50250. args: ["aNode"],
  50251. 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 ] ] ] ])",
  50252. referencedClasses: ["PlatformInterface", "Smalltalk"],
  50253. //>>excludeEnd("ide");
  50254. messageSends: ["ifTrue:", "isUnknownVar", "binding", "push:", "at:ifAbsent:", "globals", "value", "error:", "ifTrue:ifFalse:", "isInstanceVar", "instVarAt:", "receiver", "context", "localAt:ifAbsent:", "isCapitalized", "at:"]
  50255. }),
  50256. $globals.ASTInterpreter);
  50257. $core.addClass('ASTInterpreterError', $globals.Error, [], 'Compiler-Interpreter');
  50258. //>>excludeStart("ide", pragmas.excludeIdeData);
  50259. $globals.ASTInterpreterError.comment="I get signaled when an AST interpreter is unable to interpret a node.";
  50260. //>>excludeEnd("ide");
  50261. $core.addClass('ASTPCNodeVisitor', $globals.NodeVisitor, ['context', 'index', 'selector', 'currentNode'], 'Compiler-Interpreter');
  50262. //>>excludeStart("ide", pragmas.excludeIdeData);
  50263. $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`";
  50264. //>>excludeEnd("ide");
  50265. $core.addMethod(
  50266. $core.method({
  50267. selector: "context",
  50268. protocol: 'accessing',
  50269. fn: function (){
  50270. var self=this;
  50271. var $1;
  50272. $1=self["@context"];
  50273. return $1;
  50274. },
  50275. //>>excludeStart("ide", pragmas.excludeIdeData);
  50276. args: [],
  50277. source: "context\x0a\x09^ context",
  50278. referencedClasses: [],
  50279. //>>excludeEnd("ide");
  50280. messageSends: []
  50281. }),
  50282. $globals.ASTPCNodeVisitor);
  50283. $core.addMethod(
  50284. $core.method({
  50285. selector: "context:",
  50286. protocol: 'accessing',
  50287. fn: function (aContext){
  50288. var self=this;
  50289. self["@context"]=aContext;
  50290. return self;
  50291. },
  50292. //>>excludeStart("ide", pragmas.excludeIdeData);
  50293. args: ["aContext"],
  50294. source: "context: aContext\x0a\x09context := aContext",
  50295. referencedClasses: [],
  50296. //>>excludeEnd("ide");
  50297. messageSends: []
  50298. }),
  50299. $globals.ASTPCNodeVisitor);
  50300. $core.addMethod(
  50301. $core.method({
  50302. selector: "currentNode",
  50303. protocol: 'accessing',
  50304. fn: function (){
  50305. var self=this;
  50306. var $1;
  50307. $1=self["@currentNode"];
  50308. return $1;
  50309. },
  50310. //>>excludeStart("ide", pragmas.excludeIdeData);
  50311. args: [],
  50312. source: "currentNode\x0a\x09^ currentNode",
  50313. referencedClasses: [],
  50314. //>>excludeEnd("ide");
  50315. messageSends: []
  50316. }),
  50317. $globals.ASTPCNodeVisitor);
  50318. $core.addMethod(
  50319. $core.method({
  50320. selector: "increaseIndex",
  50321. protocol: 'accessing',
  50322. fn: function (){
  50323. var self=this;
  50324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50325. return $core.withContext(function($ctx1) {
  50326. //>>excludeEnd("ctx");
  50327. self["@index"]=$recv(self._index()).__plus((1));
  50328. return self;
  50329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50330. }, function($ctx1) {$ctx1.fill(self,"increaseIndex",{},$globals.ASTPCNodeVisitor)});
  50331. //>>excludeEnd("ctx");
  50332. },
  50333. //>>excludeStart("ide", pragmas.excludeIdeData);
  50334. args: [],
  50335. source: "increaseIndex\x0a\x09index := self index + 1",
  50336. referencedClasses: [],
  50337. //>>excludeEnd("ide");
  50338. messageSends: ["+", "index"]
  50339. }),
  50340. $globals.ASTPCNodeVisitor);
  50341. $core.addMethod(
  50342. $core.method({
  50343. selector: "index",
  50344. protocol: 'accessing',
  50345. fn: function (){
  50346. var self=this;
  50347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50348. return $core.withContext(function($ctx1) {
  50349. //>>excludeEnd("ctx");
  50350. var $2,$1,$receiver;
  50351. $2=self["@index"];
  50352. if(($receiver = $2) == null || $receiver.isNil){
  50353. self["@index"]=(0);
  50354. $1=self["@index"];
  50355. } else {
  50356. $1=$2;
  50357. };
  50358. return $1;
  50359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50360. }, function($ctx1) {$ctx1.fill(self,"index",{},$globals.ASTPCNodeVisitor)});
  50361. //>>excludeEnd("ctx");
  50362. },
  50363. //>>excludeStart("ide", pragmas.excludeIdeData);
  50364. args: [],
  50365. source: "index\x0a\x09^ index ifNil: [ index := 0 ]",
  50366. referencedClasses: [],
  50367. //>>excludeEnd("ide");
  50368. messageSends: ["ifNil:"]
  50369. }),
  50370. $globals.ASTPCNodeVisitor);
  50371. $core.addMethod(
  50372. $core.method({
  50373. selector: "selector",
  50374. protocol: 'accessing',
  50375. fn: function (){
  50376. var self=this;
  50377. var $1;
  50378. $1=self["@selector"];
  50379. return $1;
  50380. },
  50381. //>>excludeStart("ide", pragmas.excludeIdeData);
  50382. args: [],
  50383. source: "selector\x0a\x09^ selector",
  50384. referencedClasses: [],
  50385. //>>excludeEnd("ide");
  50386. messageSends: []
  50387. }),
  50388. $globals.ASTPCNodeVisitor);
  50389. $core.addMethod(
  50390. $core.method({
  50391. selector: "selector:",
  50392. protocol: 'accessing',
  50393. fn: function (aString){
  50394. var self=this;
  50395. self["@selector"]=aString;
  50396. return self;
  50397. },
  50398. //>>excludeStart("ide", pragmas.excludeIdeData);
  50399. args: ["aString"],
  50400. source: "selector: aString\x0a\x09selector := aString",
  50401. referencedClasses: [],
  50402. //>>excludeEnd("ide");
  50403. messageSends: []
  50404. }),
  50405. $globals.ASTPCNodeVisitor);
  50406. $core.addMethod(
  50407. $core.method({
  50408. selector: "visitJSStatementNode:",
  50409. protocol: 'visiting',
  50410. fn: function (aNode){
  50411. var self=this;
  50412. self["@currentNode"]=aNode;
  50413. return self;
  50414. },
  50415. //>>excludeStart("ide", pragmas.excludeIdeData);
  50416. args: ["aNode"],
  50417. 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",
  50418. referencedClasses: [],
  50419. //>>excludeEnd("ide");
  50420. messageSends: []
  50421. }),
  50422. $globals.ASTPCNodeVisitor);
  50423. $core.addMethod(
  50424. $core.method({
  50425. selector: "visitSendNode:",
  50426. protocol: 'visiting',
  50427. fn: function (aNode){
  50428. var self=this;
  50429. var sendIndex;
  50430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50431. return $core.withContext(function($ctx1) {
  50432. //>>excludeEnd("ctx");
  50433. var $1,$2,$4,$3,$5;
  50434. $1=self._context();
  50435. $2=self._selector();
  50436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50437. $ctx1.sendIdx["selector"]=1;
  50438. //>>excludeEnd("ctx");
  50439. sendIndex=$recv($1)._sendIndexAt_($2);
  50440. (
  50441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50442. $ctx1.supercall = true,
  50443. //>>excludeEnd("ctx");
  50444. $globals.ASTPCNodeVisitor.superclass.fn.prototype._visitSendNode_.apply($recv(self), [aNode]));
  50445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50446. $ctx1.supercall = false;
  50447. //>>excludeEnd("ctx");;
  50448. $4=self._selector();
  50449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50450. $ctx1.sendIdx["selector"]=2;
  50451. //>>excludeEnd("ctx");
  50452. $3=$recv($4).__eq($recv(aNode)._selector());
  50453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50454. $ctx1.sendIdx["="]=1;
  50455. //>>excludeEnd("ctx");
  50456. if($core.assert($3)){
  50457. $5=$recv(self._index()).__eq(sendIndex);
  50458. if($core.assert($5)){
  50459. self["@currentNode"]=aNode;
  50460. self["@currentNode"];
  50461. };
  50462. self._increaseIndex();
  50463. };
  50464. return self;
  50465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50466. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode,sendIndex:sendIndex},$globals.ASTPCNodeVisitor)});
  50467. //>>excludeEnd("ctx");
  50468. },
  50469. //>>excludeStart("ide", pragmas.excludeIdeData);
  50470. args: ["aNode"],
  50471. 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 ]",
  50472. referencedClasses: [],
  50473. //>>excludeEnd("ide");
  50474. messageSends: ["sendIndexAt:", "context", "selector", "visitSendNode:", "ifTrue:", "=", "index", "increaseIndex"]
  50475. }),
  50476. $globals.ASTPCNodeVisitor);
  50477. $core.addMethod(
  50478. $core.method({
  50479. selector: "isSteppingNode",
  50480. protocol: '*Compiler-Interpreter',
  50481. fn: function (){
  50482. var self=this;
  50483. return true;
  50484. },
  50485. //>>excludeStart("ide", pragmas.excludeIdeData);
  50486. args: [],
  50487. source: "isSteppingNode\x0a\x09^ true",
  50488. referencedClasses: [],
  50489. //>>excludeEnd("ide");
  50490. messageSends: []
  50491. }),
  50492. $globals.AssignmentNode);
  50493. $core.addMethod(
  50494. $core.method({
  50495. selector: "isSteppingNode",
  50496. protocol: '*Compiler-Interpreter',
  50497. fn: function (){
  50498. var self=this;
  50499. return true;
  50500. },
  50501. //>>excludeStart("ide", pragmas.excludeIdeData);
  50502. args: [],
  50503. source: "isSteppingNode\x0a\x09^ true",
  50504. referencedClasses: [],
  50505. //>>excludeEnd("ide");
  50506. messageSends: []
  50507. }),
  50508. $globals.BlockNode);
  50509. $core.addMethod(
  50510. $core.method({
  50511. selector: "isSteppingNode",
  50512. protocol: '*Compiler-Interpreter',
  50513. fn: function (){
  50514. var self=this;
  50515. return true;
  50516. },
  50517. //>>excludeStart("ide", pragmas.excludeIdeData);
  50518. args: [],
  50519. source: "isSteppingNode\x0a\x09^ true",
  50520. referencedClasses: [],
  50521. //>>excludeEnd("ide");
  50522. messageSends: []
  50523. }),
  50524. $globals.DynamicArrayNode);
  50525. $core.addMethod(
  50526. $core.method({
  50527. selector: "isSteppingNode",
  50528. protocol: '*Compiler-Interpreter',
  50529. fn: function (){
  50530. var self=this;
  50531. return true;
  50532. },
  50533. //>>excludeStart("ide", pragmas.excludeIdeData);
  50534. args: [],
  50535. source: "isSteppingNode\x0a\x09^ true",
  50536. referencedClasses: [],
  50537. //>>excludeEnd("ide");
  50538. messageSends: []
  50539. }),
  50540. $globals.DynamicDictionaryNode);
  50541. $core.addMethod(
  50542. $core.method({
  50543. selector: "isSteppingNode",
  50544. protocol: '*Compiler-Interpreter',
  50545. fn: function (){
  50546. var self=this;
  50547. return true;
  50548. },
  50549. //>>excludeStart("ide", pragmas.excludeIdeData);
  50550. args: [],
  50551. source: "isSteppingNode\x0a\x09^ true",
  50552. referencedClasses: [],
  50553. //>>excludeEnd("ide");
  50554. messageSends: []
  50555. }),
  50556. $globals.JSStatementNode);
  50557. $core.addMethod(
  50558. $core.method({
  50559. selector: "isSteppingNode",
  50560. protocol: '*Compiler-Interpreter',
  50561. fn: function (){
  50562. var self=this;
  50563. return false;
  50564. },
  50565. //>>excludeStart("ide", pragmas.excludeIdeData);
  50566. args: [],
  50567. source: "isSteppingNode\x0a\x09^ false",
  50568. referencedClasses: [],
  50569. //>>excludeEnd("ide");
  50570. messageSends: []
  50571. }),
  50572. $globals.Node);
  50573. $core.addMethod(
  50574. $core.method({
  50575. selector: "isSteppingNode",
  50576. protocol: '*Compiler-Interpreter',
  50577. fn: function (){
  50578. var self=this;
  50579. return true;
  50580. },
  50581. //>>excludeStart("ide", pragmas.excludeIdeData);
  50582. args: [],
  50583. source: "isSteppingNode\x0a\x09^ true",
  50584. referencedClasses: [],
  50585. //>>excludeEnd("ide");
  50586. messageSends: []
  50587. }),
  50588. $globals.SendNode);
  50589. });
  50590. define("amber/parser", ["./boot"], function($boot) {
  50591. var $globals = $boot.globals, nil = $boot.nil;
  50592. $globals.SmalltalkParser = (function() {
  50593. /*
  50594. * Generated by PEG.js 0.8.0.
  50595. *
  50596. * http://pegjs.majda.cz/
  50597. */
  50598. function peg$subclass(child, parent) {
  50599. function ctor() { this.constructor = child; }
  50600. ctor.prototype = parent.prototype;
  50601. child.prototype = new ctor();
  50602. }
  50603. function SyntaxError(message, expected, found, offset, line, column) {
  50604. this.message = message;
  50605. this.expected = expected;
  50606. this.found = found;
  50607. this.offset = offset;
  50608. this.line = line;
  50609. this.column = column;
  50610. this.name = "SyntaxError";
  50611. }
  50612. peg$subclass(SyntaxError, Error);
  50613. function parse(input) {
  50614. var options = arguments.length > 1 ? arguments[1] : {},
  50615. peg$FAILED = {},
  50616. peg$startRuleFunctions = { start: peg$parsestart },
  50617. peg$startRuleFunction = peg$parsestart,
  50618. peg$c0 = [],
  50619. peg$c1 = peg$FAILED,
  50620. peg$c2 = /^[ \t\x0B\f\xA0\uFEFF\n\r\u2028\u2029]/,
  50621. peg$c3 = { type: "class", value: "[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]", description: "[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]" },
  50622. peg$c4 = "\"",
  50623. peg$c5 = { type: "literal", value: "\"", description: "\"\\\"\"" },
  50624. peg$c6 = /^[^"]/,
  50625. peg$c7 = { type: "class", value: "[^\"]", description: "[^\"]" },
  50626. peg$c8 = /^[a-zA-Z]/,
  50627. peg$c9 = { type: "class", value: "[a-zA-Z]", description: "[a-zA-Z]" },
  50628. peg$c10 = /^[a-zA-Z0-9]/,
  50629. peg$c11 = { type: "class", value: "[a-zA-Z0-9]", description: "[a-zA-Z0-9]" },
  50630. peg$c12 = function(first, others) {return first + others.join("");},
  50631. peg$c13 = ":",
  50632. peg$c14 = { type: "literal", value: ":", description: "\":\"" },
  50633. peg$c15 = function(first, last) {return first + last;},
  50634. peg$c16 = /^[a-zA-Z0-9:]/,
  50635. peg$c17 = { type: "class", value: "[a-zA-Z0-9:]", description: "[a-zA-Z0-9:]" },
  50636. peg$c18 = /^[A-Z]/,
  50637. peg$c19 = { type: "class", value: "[A-Z]", description: "[A-Z]" },
  50638. peg$c20 = "'",
  50639. peg$c21 = { type: "literal", value: "'", description: "\"'\"" },
  50640. peg$c22 = "''",
  50641. peg$c23 = { type: "literal", value: "''", description: "\"''\"" },
  50642. peg$c24 = function() {return "'";},
  50643. peg$c25 = /^[^']/,
  50644. peg$c26 = { type: "class", value: "[^']", description: "[^']" },
  50645. peg$c27 = function(val) {
  50646. return $globals.ValueNode._new()
  50647. ._position_((line()).__at(column()))
  50648. ._source_(text())
  50649. ._value_(val.join(""));
  50650. },
  50651. peg$c28 = "$",
  50652. peg$c29 = { type: "literal", value: "$", description: "\"$\"" },
  50653. peg$c30 = { type: "any", description: "any character" },
  50654. peg$c31 = function(char) {
  50655. return $globals.ValueNode._new()
  50656. ._position_((line()).__at(column()))
  50657. ._source_(text())
  50658. ._value_(char);
  50659. },
  50660. peg$c32 = "#",
  50661. peg$c33 = { type: "literal", value: "#", description: "\"#\"" },
  50662. peg$c34 = function(rest) {return rest;},
  50663. peg$c35 = function(node) {return node._value();},
  50664. peg$c36 = function(val) {
  50665. return $globals.ValueNode._new()
  50666. ._position_((line()).__at(column()))
  50667. ._source_(text())
  50668. ._value_(val);
  50669. },
  50670. peg$c37 = function(n) {
  50671. return $globals.ValueNode._new()
  50672. ._position_((line()).__at(column()))
  50673. ._source_(text())
  50674. ._value_(n);
  50675. },
  50676. peg$c38 = "e",
  50677. peg$c39 = { type: "literal", value: "e", description: "\"e\"" },
  50678. peg$c40 = function(n) {return parseFloat(n.join(""));},
  50679. peg$c41 = null,
  50680. peg$c42 = "-",
  50681. peg$c43 = { type: "literal", value: "-", description: "\"-\"" },
  50682. peg$c44 = "16r",
  50683. peg$c45 = { type: "literal", value: "16r", description: "\"16r\"" },
  50684. peg$c46 = /^[0-9a-fA-F]/,
  50685. peg$c47 = { type: "class", value: "[0-9a-fA-F]", description: "[0-9a-fA-F]" },
  50686. peg$c48 = function(neg, num) {return parseInt(((neg || '') + num.join("")), 16);},
  50687. peg$c49 = /^[0-9]/,
  50688. peg$c50 = { type: "class", value: "[0-9]", description: "[0-9]" },
  50689. peg$c51 = ".",
  50690. peg$c52 = { type: "literal", value: ".", description: "\".\"" },
  50691. peg$c53 = function(neg, digits, dec) {return parseFloat(((neg || '') + digits.join("") + "." + dec.join("")), 10);},
  50692. peg$c54 = function(neg, digits) {return (parseInt((neg || '') + digits.join(""), 10));},
  50693. peg$c55 = "#(",
  50694. peg$c56 = { type: "literal", value: "#(", description: "\"#(\"" },
  50695. peg$c57 = "(",
  50696. peg$c58 = { type: "literal", value: "(", description: "\"(\"" },
  50697. peg$c59 = function(lit) {return lit._value();},
  50698. peg$c60 = ")",
  50699. peg$c61 = { type: "literal", value: ")", description: "\")\"" },
  50700. peg$c62 = function(lits) {
  50701. return $globals.ValueNode._new()
  50702. ._position_((line()).__at(column()))
  50703. ._source_(text())
  50704. ._value_(lits);
  50705. },
  50706. peg$c63 = "{",
  50707. peg$c64 = { type: "literal", value: "{", description: "\"{\"" },
  50708. peg$c65 = "}",
  50709. peg$c66 = { type: "literal", value: "}", description: "\"}\"" },
  50710. peg$c67 = function(expressions) {
  50711. return $globals.DynamicArrayNode._new()
  50712. ._position_((line()).__at(column()))
  50713. ._source_(text())
  50714. ._nodes_(expressions || []);
  50715. },
  50716. peg$c68 = "#{",
  50717. peg$c69 = { type: "literal", value: "#{", description: "\"#{\"" },
  50718. peg$c70 = function(expressions) {
  50719. return $globals.DynamicDictionaryNode._new()
  50720. ._position_((line()).__at(column()))
  50721. ._source_(text())
  50722. ._nodes_(expressions || []);
  50723. },
  50724. peg$c71 = "true",
  50725. peg$c72 = { type: "literal", value: "true", description: "\"true\"" },
  50726. peg$c73 = function() {return true;},
  50727. peg$c74 = "false",
  50728. peg$c75 = { type: "literal", value: "false", description: "\"false\"" },
  50729. peg$c76 = function() {return false;},
  50730. peg$c77 = "nil",
  50731. peg$c78 = { type: "literal", value: "nil", description: "\"nil\"" },
  50732. peg$c79 = function() {return nil;},
  50733. peg$c80 = function(val) {
  50734. return $globals.ValueNode._new()
  50735. ._position_((line()).__at(column()))
  50736. ._source_(text())
  50737. ._value_(val);
  50738. },
  50739. peg$c81 = function(identifier) {
  50740. return $globals.VariableNode._new()
  50741. ._position_((line()).__at(column()))
  50742. ._source_(text())
  50743. ._value_(identifier);
  50744. },
  50745. peg$c82 = function(key, arg) {return {key:key, arg:arg};},
  50746. peg$c83 = /^[\\+*\/=><,@%~|&\-]/,
  50747. peg$c84 = { type: "class", value: "[\\\\+*\\/=><,@%~|&\\-]", description: "[\\\\+*\\/=><,@%~|&\\-]" },
  50748. peg$c85 = function(bin) {return bin.join("");},
  50749. peg$c86 = function(pairs) {
  50750. var keywords = [];
  50751. var params = [];
  50752. var i = 0;
  50753. for(i = 0; i < pairs.length; i++){
  50754. keywords.push(pairs[i].key);
  50755. }
  50756. for(i = 0; i < pairs.length; i++){
  50757. params.push(pairs[i].arg);
  50758. }
  50759. return [keywords.join(""), params];
  50760. },
  50761. peg$c87 = function(selector, arg) {return [selector, [arg]];},
  50762. peg$c88 = function(selector) {return [selector, []];},
  50763. peg$c89 = function(expression) {return expression;},
  50764. peg$c90 = function(first, others) { return [first].concat(others); },
  50765. peg$c91 = ":=",
  50766. peg$c92 = { type: "literal", value: ":=", description: "\":=\"" },
  50767. peg$c93 = function(variable, expression) {
  50768. return $globals.AssignmentNode._new()
  50769. ._position_((line()).__at(column()))
  50770. ._source_(text())
  50771. ._left_(variable)
  50772. ._right_(expression);
  50773. },
  50774. peg$c94 = "^",
  50775. peg$c95 = { type: "literal", value: "^", description: "\"^\"" },
  50776. peg$c96 = function(expression) {
  50777. return $globals.ReturnNode._new()
  50778. ._position_((line()).__at(column()))
  50779. ._source_(text())
  50780. ._nodes_([expression]);
  50781. },
  50782. peg$c97 = "|",
  50783. peg$c98 = { type: "literal", value: "|", description: "\"|\"" },
  50784. peg$c99 = function(variable) {return variable;},
  50785. peg$c100 = function(vars) {return vars;},
  50786. peg$c101 = function(param) {return param;},
  50787. peg$c102 = function(params) {return params;},
  50788. peg$c103 = function(ret) {return [ret];},
  50789. peg$c104 = function(exps, ret) {
  50790. var expressions = exps;
  50791. expressions.push(ret);
  50792. return expressions;
  50793. },
  50794. peg$c105 = function(expressions) {
  50795. return expressions || [];
  50796. },
  50797. peg$c106 = function(temps, statements) {
  50798. return $globals.SequenceNode._new()
  50799. ._position_((line()).__at(column()))
  50800. ._source_(text())
  50801. ._temps_(temps || [])
  50802. ._nodes_(statements || []);
  50803. },
  50804. peg$c107 = "[",
  50805. peg$c108 = { type: "literal", value: "[", description: "\"[\"" },
  50806. peg$c109 = "]",
  50807. peg$c110 = { type: "literal", value: "]", description: "\"]\"" },
  50808. peg$c111 = function(params, sequence) {
  50809. return $globals.BlockNode._new()
  50810. ._position_((line()).__at(column()))
  50811. ._source_(text())
  50812. ._parameters_(params || [])
  50813. ._nodes_([sequence._asBlockSequenceNode()]);
  50814. },
  50815. peg$c112 = void 0,
  50816. peg$c113 = function(selector) {
  50817. return $globals.SendNode._new()
  50818. ._position_((line()).__at(column()))
  50819. ._source_(text())
  50820. ._selector_(selector);
  50821. },
  50822. peg$c114 = function(message, tail) {
  50823. if(tail) {
  50824. return tail._valueForReceiver_(message);
  50825. }
  50826. else {
  50827. return message;
  50828. }
  50829. },
  50830. peg$c115 = function(receiver, tail) {
  50831. if(tail) {
  50832. return tail._valueForReceiver_(receiver);
  50833. }
  50834. else {
  50835. return receiver;
  50836. }
  50837. },
  50838. peg$c116 = function(selector, arg) {
  50839. return $globals.SendNode._new()
  50840. ._position_((line()).__at(column()))
  50841. ._source_(text())
  50842. ._selector_(selector)
  50843. ._arguments_([arg]);
  50844. },
  50845. peg$c117 = function(message, tail) {
  50846. if(tail) {
  50847. return tail._valueForReceiver_(message);
  50848. }
  50849. else {
  50850. return message;
  50851. }
  50852. },
  50853. peg$c118 = function(pairs) {
  50854. var selector = [];
  50855. var args = [];
  50856. for(var i = 0; i < pairs.length; i++) {
  50857. selector.push(pairs[i].key);
  50858. args.push(pairs[i].arg);
  50859. }
  50860. return $globals.SendNode._new()
  50861. ._position_((line()).__at(column()))
  50862. ._source_(text())
  50863. ._selector_(selector.join(""))
  50864. ._arguments_(args);
  50865. },
  50866. peg$c119 = function(receiver, tail) {
  50867. return tail._valueForReceiver_(receiver);
  50868. },
  50869. peg$c120 = ";",
  50870. peg$c121 = { type: "literal", value: ";", description: "\";\"" },
  50871. peg$c122 = function(mess) {return mess;},
  50872. peg$c123 = function(send, messages) {
  50873. var cascade = [];
  50874. cascade.push(send);
  50875. for(var i = 0; i < messages.length; i++) {
  50876. cascade.push(messages[i]);
  50877. }
  50878. return $globals.CascadeNode._new()
  50879. ._position_((line()).__at(column()))
  50880. ._source_(text())
  50881. ._receiver_(send._receiver())
  50882. ._nodes_(cascade);
  50883. },
  50884. peg$c124 = "<",
  50885. peg$c125 = { type: "literal", value: "<", description: "\"<\"" },
  50886. peg$c126 = ">>",
  50887. peg$c127 = { type: "literal", value: ">>", description: "\">>\"" },
  50888. peg$c128 = function() {return ">";},
  50889. peg$c129 = /^[^>]/,
  50890. peg$c130 = { type: "class", value: "[^>]", description: "[^>]" },
  50891. peg$c131 = ">",
  50892. peg$c132 = { type: "literal", value: ">", description: "\">\"" },
  50893. peg$c133 = function(val) {
  50894. return $globals.JSStatementNode._new()
  50895. ._position_((line()).__at(column()))
  50896. ._source_(val.join(""))
  50897. },
  50898. peg$c134 = function(pattern, sequence) {
  50899. return $globals.MethodNode._new()
  50900. ._position_((line()).__at(column()))
  50901. ._source_(text())
  50902. ._selector_(pattern[0])
  50903. ._arguments_(pattern[1])
  50904. ._nodes_([sequence]);
  50905. },
  50906. peg$c135 = function(send) { return send._selector() === "->" },
  50907. peg$c136 = function(send) { return [send._receiver(), send._arguments()[0]]; },
  50908. peg$c137 = function(first, others) { return first.concat.apply(first, others); },
  50909. peg$currPos = 0,
  50910. peg$reportedPos = 0,
  50911. peg$cachedPos = 0,
  50912. peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
  50913. peg$maxFailPos = 0,
  50914. peg$maxFailExpected = [],
  50915. peg$silentFails = 0,
  50916. peg$cache = {},
  50917. peg$result;
  50918. if ("startRule" in options) {
  50919. if (!(options.startRule in peg$startRuleFunctions)) {
  50920. throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
  50921. }
  50922. peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
  50923. }
  50924. function text() {
  50925. return input.substring(peg$reportedPos, peg$currPos);
  50926. }
  50927. function offset() {
  50928. return peg$reportedPos;
  50929. }
  50930. function line() {
  50931. return peg$computePosDetails(peg$reportedPos).line;
  50932. }
  50933. function column() {
  50934. return peg$computePosDetails(peg$reportedPos).column;
  50935. }
  50936. function expected(description) {
  50937. throw peg$buildException(
  50938. null,
  50939. [{ type: "other", description: description }],
  50940. peg$reportedPos
  50941. );
  50942. }
  50943. function error(message) {
  50944. throw peg$buildException(message, null, peg$reportedPos);
  50945. }
  50946. function peg$computePosDetails(pos) {
  50947. function advance(details, startPos, endPos) {
  50948. var p, ch;
  50949. for (p = startPos; p < endPos; p++) {
  50950. ch = input.charAt(p);
  50951. if (ch === "\n") {
  50952. if (!details.seenCR) { details.line++; }
  50953. details.column = 1;
  50954. details.seenCR = false;
  50955. } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
  50956. details.line++;
  50957. details.column = 1;
  50958. details.seenCR = true;
  50959. } else {
  50960. details.column++;
  50961. details.seenCR = false;
  50962. }
  50963. }
  50964. }
  50965. if (peg$cachedPos !== pos) {
  50966. if (peg$cachedPos > pos) {
  50967. peg$cachedPos = 0;
  50968. peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };
  50969. }
  50970. advance(peg$cachedPosDetails, peg$cachedPos, pos);
  50971. peg$cachedPos = pos;
  50972. }
  50973. return peg$cachedPosDetails;
  50974. }
  50975. function peg$fail(expected) {
  50976. if (peg$currPos < peg$maxFailPos) { return; }
  50977. if (peg$currPos > peg$maxFailPos) {
  50978. peg$maxFailPos = peg$currPos;
  50979. peg$maxFailExpected = [];
  50980. }
  50981. peg$maxFailExpected.push(expected);
  50982. }
  50983. function peg$buildException(message, expected, pos) {
  50984. function cleanupExpected(expected) {
  50985. var i = 1;
  50986. expected.sort(function(a, b) {
  50987. if (a.description < b.description) {
  50988. return -1;
  50989. } else if (a.description > b.description) {
  50990. return 1;
  50991. } else {
  50992. return 0;
  50993. }
  50994. });
  50995. while (i < expected.length) {
  50996. if (expected[i - 1] === expected[i]) {
  50997. expected.splice(i, 1);
  50998. } else {
  50999. i++;
  51000. }
  51001. }
  51002. }
  51003. function buildMessage(expected, found) {
  51004. function stringEscape(s) {
  51005. function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
  51006. return s
  51007. .replace(/\\/g, '\\\\')
  51008. .replace(/"/g, '\\"')
  51009. .replace(/\x08/g, '\\b')
  51010. .replace(/\t/g, '\\t')
  51011. .replace(/\n/g, '\\n')
  51012. .replace(/\f/g, '\\f')
  51013. .replace(/\r/g, '\\r')
  51014. .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
  51015. .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); })
  51016. .replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); })
  51017. .replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); });
  51018. }
  51019. var expectedDescs = new Array(expected.length),
  51020. expectedDesc, foundDesc, i;
  51021. for (i = 0; i < expected.length; i++) {
  51022. expectedDescs[i] = expected[i].description;
  51023. }
  51024. expectedDesc = expected.length > 1
  51025. ? expectedDescs.slice(0, -1).join(", ")
  51026. + " or "
  51027. + expectedDescs[expected.length - 1]
  51028. : expectedDescs[0];
  51029. foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
  51030. return "Expected " + expectedDesc + " but " + foundDesc + " found.";
  51031. }
  51032. var posDetails = peg$computePosDetails(pos),
  51033. found = pos < input.length ? input.charAt(pos) : null;
  51034. if (expected !== null) {
  51035. cleanupExpected(expected);
  51036. }
  51037. return new SyntaxError(
  51038. message !== null ? message : buildMessage(expected, found),
  51039. expected,
  51040. found,
  51041. pos,
  51042. posDetails.line,
  51043. posDetails.column
  51044. );
  51045. }
  51046. function peg$parsestart() {
  51047. var s0;
  51048. var key = peg$currPos * 60 + 0,
  51049. cached = peg$cache[key];
  51050. if (cached) {
  51051. peg$currPos = cached.nextPos;
  51052. return cached.result;
  51053. }
  51054. s0 = peg$parsemethod();
  51055. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51056. return s0;
  51057. }
  51058. function peg$parseseparator() {
  51059. var s0, s1;
  51060. var key = peg$currPos * 60 + 1,
  51061. cached = peg$cache[key];
  51062. if (cached) {
  51063. peg$currPos = cached.nextPos;
  51064. return cached.result;
  51065. }
  51066. s0 = [];
  51067. if (peg$c2.test(input.charAt(peg$currPos))) {
  51068. s1 = input.charAt(peg$currPos);
  51069. peg$currPos++;
  51070. } else {
  51071. s1 = peg$FAILED;
  51072. if (peg$silentFails === 0) { peg$fail(peg$c3); }
  51073. }
  51074. if (s1 !== peg$FAILED) {
  51075. while (s1 !== peg$FAILED) {
  51076. s0.push(s1);
  51077. if (peg$c2.test(input.charAt(peg$currPos))) {
  51078. s1 = input.charAt(peg$currPos);
  51079. peg$currPos++;
  51080. } else {
  51081. s1 = peg$FAILED;
  51082. if (peg$silentFails === 0) { peg$fail(peg$c3); }
  51083. }
  51084. }
  51085. } else {
  51086. s0 = peg$c1;
  51087. }
  51088. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51089. return s0;
  51090. }
  51091. function peg$parsecomments() {
  51092. var s0, s1, s2, s3, s4;
  51093. var key = peg$currPos * 60 + 2,
  51094. cached = peg$cache[key];
  51095. if (cached) {
  51096. peg$currPos = cached.nextPos;
  51097. return cached.result;
  51098. }
  51099. s0 = [];
  51100. s1 = peg$currPos;
  51101. if (input.charCodeAt(peg$currPos) === 34) {
  51102. s2 = peg$c4;
  51103. peg$currPos++;
  51104. } else {
  51105. s2 = peg$FAILED;
  51106. if (peg$silentFails === 0) { peg$fail(peg$c5); }
  51107. }
  51108. if (s2 !== peg$FAILED) {
  51109. s3 = [];
  51110. if (peg$c6.test(input.charAt(peg$currPos))) {
  51111. s4 = input.charAt(peg$currPos);
  51112. peg$currPos++;
  51113. } else {
  51114. s4 = peg$FAILED;
  51115. if (peg$silentFails === 0) { peg$fail(peg$c7); }
  51116. }
  51117. while (s4 !== peg$FAILED) {
  51118. s3.push(s4);
  51119. if (peg$c6.test(input.charAt(peg$currPos))) {
  51120. s4 = input.charAt(peg$currPos);
  51121. peg$currPos++;
  51122. } else {
  51123. s4 = peg$FAILED;
  51124. if (peg$silentFails === 0) { peg$fail(peg$c7); }
  51125. }
  51126. }
  51127. if (s3 !== peg$FAILED) {
  51128. if (input.charCodeAt(peg$currPos) === 34) {
  51129. s4 = peg$c4;
  51130. peg$currPos++;
  51131. } else {
  51132. s4 = peg$FAILED;
  51133. if (peg$silentFails === 0) { peg$fail(peg$c5); }
  51134. }
  51135. if (s4 !== peg$FAILED) {
  51136. s2 = [s2, s3, s4];
  51137. s1 = s2;
  51138. } else {
  51139. peg$currPos = s1;
  51140. s1 = peg$c1;
  51141. }
  51142. } else {
  51143. peg$currPos = s1;
  51144. s1 = peg$c1;
  51145. }
  51146. } else {
  51147. peg$currPos = s1;
  51148. s1 = peg$c1;
  51149. }
  51150. if (s1 !== peg$FAILED) {
  51151. while (s1 !== peg$FAILED) {
  51152. s0.push(s1);
  51153. s1 = peg$currPos;
  51154. if (input.charCodeAt(peg$currPos) === 34) {
  51155. s2 = peg$c4;
  51156. peg$currPos++;
  51157. } else {
  51158. s2 = peg$FAILED;
  51159. if (peg$silentFails === 0) { peg$fail(peg$c5); }
  51160. }
  51161. if (s2 !== peg$FAILED) {
  51162. s3 = [];
  51163. if (peg$c6.test(input.charAt(peg$currPos))) {
  51164. s4 = input.charAt(peg$currPos);
  51165. peg$currPos++;
  51166. } else {
  51167. s4 = peg$FAILED;
  51168. if (peg$silentFails === 0) { peg$fail(peg$c7); }
  51169. }
  51170. while (s4 !== peg$FAILED) {
  51171. s3.push(s4);
  51172. if (peg$c6.test(input.charAt(peg$currPos))) {
  51173. s4 = input.charAt(peg$currPos);
  51174. peg$currPos++;
  51175. } else {
  51176. s4 = peg$FAILED;
  51177. if (peg$silentFails === 0) { peg$fail(peg$c7); }
  51178. }
  51179. }
  51180. if (s3 !== peg$FAILED) {
  51181. if (input.charCodeAt(peg$currPos) === 34) {
  51182. s4 = peg$c4;
  51183. peg$currPos++;
  51184. } else {
  51185. s4 = peg$FAILED;
  51186. if (peg$silentFails === 0) { peg$fail(peg$c5); }
  51187. }
  51188. if (s4 !== peg$FAILED) {
  51189. s2 = [s2, s3, s4];
  51190. s1 = s2;
  51191. } else {
  51192. peg$currPos = s1;
  51193. s1 = peg$c1;
  51194. }
  51195. } else {
  51196. peg$currPos = s1;
  51197. s1 = peg$c1;
  51198. }
  51199. } else {
  51200. peg$currPos = s1;
  51201. s1 = peg$c1;
  51202. }
  51203. }
  51204. } else {
  51205. s0 = peg$c1;
  51206. }
  51207. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51208. return s0;
  51209. }
  51210. function peg$parsews() {
  51211. var s0, s1;
  51212. var key = peg$currPos * 60 + 3,
  51213. cached = peg$cache[key];
  51214. if (cached) {
  51215. peg$currPos = cached.nextPos;
  51216. return cached.result;
  51217. }
  51218. s0 = [];
  51219. s1 = peg$parseseparator();
  51220. if (s1 === peg$FAILED) {
  51221. s1 = peg$parsecomments();
  51222. }
  51223. while (s1 !== peg$FAILED) {
  51224. s0.push(s1);
  51225. s1 = peg$parseseparator();
  51226. if (s1 === peg$FAILED) {
  51227. s1 = peg$parsecomments();
  51228. }
  51229. }
  51230. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51231. return s0;
  51232. }
  51233. function peg$parseidentifier() {
  51234. var s0, s1, s2, s3;
  51235. var key = peg$currPos * 60 + 4,
  51236. cached = peg$cache[key];
  51237. if (cached) {
  51238. peg$currPos = cached.nextPos;
  51239. return cached.result;
  51240. }
  51241. s0 = peg$currPos;
  51242. if (peg$c8.test(input.charAt(peg$currPos))) {
  51243. s1 = input.charAt(peg$currPos);
  51244. peg$currPos++;
  51245. } else {
  51246. s1 = peg$FAILED;
  51247. if (peg$silentFails === 0) { peg$fail(peg$c9); }
  51248. }
  51249. if (s1 !== peg$FAILED) {
  51250. s2 = [];
  51251. if (peg$c10.test(input.charAt(peg$currPos))) {
  51252. s3 = input.charAt(peg$currPos);
  51253. peg$currPos++;
  51254. } else {
  51255. s3 = peg$FAILED;
  51256. if (peg$silentFails === 0) { peg$fail(peg$c11); }
  51257. }
  51258. while (s3 !== peg$FAILED) {
  51259. s2.push(s3);
  51260. if (peg$c10.test(input.charAt(peg$currPos))) {
  51261. s3 = input.charAt(peg$currPos);
  51262. peg$currPos++;
  51263. } else {
  51264. s3 = peg$FAILED;
  51265. if (peg$silentFails === 0) { peg$fail(peg$c11); }
  51266. }
  51267. }
  51268. if (s2 !== peg$FAILED) {
  51269. peg$reportedPos = s0;
  51270. s1 = peg$c12(s1, s2);
  51271. s0 = s1;
  51272. } else {
  51273. peg$currPos = s0;
  51274. s0 = peg$c1;
  51275. }
  51276. } else {
  51277. peg$currPos = s0;
  51278. s0 = peg$c1;
  51279. }
  51280. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51281. return s0;
  51282. }
  51283. function peg$parsekeyword() {
  51284. var s0, s1, s2;
  51285. var key = peg$currPos * 60 + 5,
  51286. cached = peg$cache[key];
  51287. if (cached) {
  51288. peg$currPos = cached.nextPos;
  51289. return cached.result;
  51290. }
  51291. s0 = peg$currPos;
  51292. s1 = peg$parseidentifier();
  51293. if (s1 !== peg$FAILED) {
  51294. if (input.charCodeAt(peg$currPos) === 58) {
  51295. s2 = peg$c13;
  51296. peg$currPos++;
  51297. } else {
  51298. s2 = peg$FAILED;
  51299. if (peg$silentFails === 0) { peg$fail(peg$c14); }
  51300. }
  51301. if (s2 !== peg$FAILED) {
  51302. peg$reportedPos = s0;
  51303. s1 = peg$c15(s1, s2);
  51304. s0 = s1;
  51305. } else {
  51306. peg$currPos = s0;
  51307. s0 = peg$c1;
  51308. }
  51309. } else {
  51310. peg$currPos = s0;
  51311. s0 = peg$c1;
  51312. }
  51313. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51314. return s0;
  51315. }
  51316. function peg$parseselector() {
  51317. var s0, s1, s2, s3;
  51318. var key = peg$currPos * 60 + 6,
  51319. cached = peg$cache[key];
  51320. if (cached) {
  51321. peg$currPos = cached.nextPos;
  51322. return cached.result;
  51323. }
  51324. s0 = peg$currPos;
  51325. if (peg$c8.test(input.charAt(peg$currPos))) {
  51326. s1 = input.charAt(peg$currPos);
  51327. peg$currPos++;
  51328. } else {
  51329. s1 = peg$FAILED;
  51330. if (peg$silentFails === 0) { peg$fail(peg$c9); }
  51331. }
  51332. if (s1 !== peg$FAILED) {
  51333. s2 = [];
  51334. if (peg$c16.test(input.charAt(peg$currPos))) {
  51335. s3 = input.charAt(peg$currPos);
  51336. peg$currPos++;
  51337. } else {
  51338. s3 = peg$FAILED;
  51339. if (peg$silentFails === 0) { peg$fail(peg$c17); }
  51340. }
  51341. while (s3 !== peg$FAILED) {
  51342. s2.push(s3);
  51343. if (peg$c16.test(input.charAt(peg$currPos))) {
  51344. s3 = input.charAt(peg$currPos);
  51345. peg$currPos++;
  51346. } else {
  51347. s3 = peg$FAILED;
  51348. if (peg$silentFails === 0) { peg$fail(peg$c17); }
  51349. }
  51350. }
  51351. if (s2 !== peg$FAILED) {
  51352. peg$reportedPos = s0;
  51353. s1 = peg$c12(s1, s2);
  51354. s0 = s1;
  51355. } else {
  51356. peg$currPos = s0;
  51357. s0 = peg$c1;
  51358. }
  51359. } else {
  51360. peg$currPos = s0;
  51361. s0 = peg$c1;
  51362. }
  51363. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51364. return s0;
  51365. }
  51366. function peg$parseclassName() {
  51367. var s0, s1, s2, s3;
  51368. var key = peg$currPos * 60 + 7,
  51369. cached = peg$cache[key];
  51370. if (cached) {
  51371. peg$currPos = cached.nextPos;
  51372. return cached.result;
  51373. }
  51374. s0 = peg$currPos;
  51375. if (peg$c18.test(input.charAt(peg$currPos))) {
  51376. s1 = input.charAt(peg$currPos);
  51377. peg$currPos++;
  51378. } else {
  51379. s1 = peg$FAILED;
  51380. if (peg$silentFails === 0) { peg$fail(peg$c19); }
  51381. }
  51382. if (s1 !== peg$FAILED) {
  51383. s2 = [];
  51384. if (peg$c10.test(input.charAt(peg$currPos))) {
  51385. s3 = input.charAt(peg$currPos);
  51386. peg$currPos++;
  51387. } else {
  51388. s3 = peg$FAILED;
  51389. if (peg$silentFails === 0) { peg$fail(peg$c11); }
  51390. }
  51391. while (s3 !== peg$FAILED) {
  51392. s2.push(s3);
  51393. if (peg$c10.test(input.charAt(peg$currPos))) {
  51394. s3 = input.charAt(peg$currPos);
  51395. peg$currPos++;
  51396. } else {
  51397. s3 = peg$FAILED;
  51398. if (peg$silentFails === 0) { peg$fail(peg$c11); }
  51399. }
  51400. }
  51401. if (s2 !== peg$FAILED) {
  51402. peg$reportedPos = s0;
  51403. s1 = peg$c12(s1, s2);
  51404. s0 = s1;
  51405. } else {
  51406. peg$currPos = s0;
  51407. s0 = peg$c1;
  51408. }
  51409. } else {
  51410. peg$currPos = s0;
  51411. s0 = peg$c1;
  51412. }
  51413. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51414. return s0;
  51415. }
  51416. function peg$parsestring() {
  51417. var s0, s1, s2, s3, s4;
  51418. var key = peg$currPos * 60 + 8,
  51419. cached = peg$cache[key];
  51420. if (cached) {
  51421. peg$currPos = cached.nextPos;
  51422. return cached.result;
  51423. }
  51424. s0 = peg$currPos;
  51425. if (input.charCodeAt(peg$currPos) === 39) {
  51426. s1 = peg$c20;
  51427. peg$currPos++;
  51428. } else {
  51429. s1 = peg$FAILED;
  51430. if (peg$silentFails === 0) { peg$fail(peg$c21); }
  51431. }
  51432. if (s1 !== peg$FAILED) {
  51433. s2 = [];
  51434. s3 = peg$currPos;
  51435. if (input.substr(peg$currPos, 2) === peg$c22) {
  51436. s4 = peg$c22;
  51437. peg$currPos += 2;
  51438. } else {
  51439. s4 = peg$FAILED;
  51440. if (peg$silentFails === 0) { peg$fail(peg$c23); }
  51441. }
  51442. if (s4 !== peg$FAILED) {
  51443. peg$reportedPos = s3;
  51444. s4 = peg$c24();
  51445. }
  51446. s3 = s4;
  51447. if (s3 === peg$FAILED) {
  51448. if (peg$c25.test(input.charAt(peg$currPos))) {
  51449. s3 = input.charAt(peg$currPos);
  51450. peg$currPos++;
  51451. } else {
  51452. s3 = peg$FAILED;
  51453. if (peg$silentFails === 0) { peg$fail(peg$c26); }
  51454. }
  51455. }
  51456. while (s3 !== peg$FAILED) {
  51457. s2.push(s3);
  51458. s3 = peg$currPos;
  51459. if (input.substr(peg$currPos, 2) === peg$c22) {
  51460. s4 = peg$c22;
  51461. peg$currPos += 2;
  51462. } else {
  51463. s4 = peg$FAILED;
  51464. if (peg$silentFails === 0) { peg$fail(peg$c23); }
  51465. }
  51466. if (s4 !== peg$FAILED) {
  51467. peg$reportedPos = s3;
  51468. s4 = peg$c24();
  51469. }
  51470. s3 = s4;
  51471. if (s3 === peg$FAILED) {
  51472. if (peg$c25.test(input.charAt(peg$currPos))) {
  51473. s3 = input.charAt(peg$currPos);
  51474. peg$currPos++;
  51475. } else {
  51476. s3 = peg$FAILED;
  51477. if (peg$silentFails === 0) { peg$fail(peg$c26); }
  51478. }
  51479. }
  51480. }
  51481. if (s2 !== peg$FAILED) {
  51482. if (input.charCodeAt(peg$currPos) === 39) {
  51483. s3 = peg$c20;
  51484. peg$currPos++;
  51485. } else {
  51486. s3 = peg$FAILED;
  51487. if (peg$silentFails === 0) { peg$fail(peg$c21); }
  51488. }
  51489. if (s3 !== peg$FAILED) {
  51490. peg$reportedPos = s0;
  51491. s1 = peg$c27(s2);
  51492. s0 = s1;
  51493. } else {
  51494. peg$currPos = s0;
  51495. s0 = peg$c1;
  51496. }
  51497. } else {
  51498. peg$currPos = s0;
  51499. s0 = peg$c1;
  51500. }
  51501. } else {
  51502. peg$currPos = s0;
  51503. s0 = peg$c1;
  51504. }
  51505. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51506. return s0;
  51507. }
  51508. function peg$parsecharacter() {
  51509. var s0, s1, s2;
  51510. var key = peg$currPos * 60 + 9,
  51511. cached = peg$cache[key];
  51512. if (cached) {
  51513. peg$currPos = cached.nextPos;
  51514. return cached.result;
  51515. }
  51516. s0 = peg$currPos;
  51517. if (input.charCodeAt(peg$currPos) === 36) {
  51518. s1 = peg$c28;
  51519. peg$currPos++;
  51520. } else {
  51521. s1 = peg$FAILED;
  51522. if (peg$silentFails === 0) { peg$fail(peg$c29); }
  51523. }
  51524. if (s1 !== peg$FAILED) {
  51525. if (input.length > peg$currPos) {
  51526. s2 = input.charAt(peg$currPos);
  51527. peg$currPos++;
  51528. } else {
  51529. s2 = peg$FAILED;
  51530. if (peg$silentFails === 0) { peg$fail(peg$c30); }
  51531. }
  51532. if (s2 !== peg$FAILED) {
  51533. peg$reportedPos = s0;
  51534. s1 = peg$c31(s2);
  51535. s0 = s1;
  51536. } else {
  51537. peg$currPos = s0;
  51538. s0 = peg$c1;
  51539. }
  51540. } else {
  51541. peg$currPos = s0;
  51542. s0 = peg$c1;
  51543. }
  51544. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51545. return s0;
  51546. }
  51547. function peg$parsesymbol() {
  51548. var s0, s1, s2;
  51549. var key = peg$currPos * 60 + 10,
  51550. cached = peg$cache[key];
  51551. if (cached) {
  51552. peg$currPos = cached.nextPos;
  51553. return cached.result;
  51554. }
  51555. s0 = peg$currPos;
  51556. if (input.charCodeAt(peg$currPos) === 35) {
  51557. s1 = peg$c32;
  51558. peg$currPos++;
  51559. } else {
  51560. s1 = peg$FAILED;
  51561. if (peg$silentFails === 0) { peg$fail(peg$c33); }
  51562. }
  51563. if (s1 !== peg$FAILED) {
  51564. s2 = peg$parsebareSymbol();
  51565. if (s2 !== peg$FAILED) {
  51566. peg$reportedPos = s0;
  51567. s1 = peg$c34(s2);
  51568. s0 = s1;
  51569. } else {
  51570. peg$currPos = s0;
  51571. s0 = peg$c1;
  51572. }
  51573. } else {
  51574. peg$currPos = s0;
  51575. s0 = peg$c1;
  51576. }
  51577. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51578. return s0;
  51579. }
  51580. function peg$parsebareSymbol() {
  51581. var s0, s1, s2;
  51582. var key = peg$currPos * 60 + 11,
  51583. cached = peg$cache[key];
  51584. if (cached) {
  51585. peg$currPos = cached.nextPos;
  51586. return cached.result;
  51587. }
  51588. s0 = peg$currPos;
  51589. s1 = peg$parseselector();
  51590. if (s1 === peg$FAILED) {
  51591. s1 = peg$parsebinarySelector();
  51592. if (s1 === peg$FAILED) {
  51593. s1 = peg$currPos;
  51594. s2 = peg$parsestring();
  51595. if (s2 !== peg$FAILED) {
  51596. peg$reportedPos = s1;
  51597. s2 = peg$c35(s2);
  51598. }
  51599. s1 = s2;
  51600. }
  51601. }
  51602. if (s1 !== peg$FAILED) {
  51603. peg$reportedPos = s0;
  51604. s1 = peg$c36(s1);
  51605. }
  51606. s0 = s1;
  51607. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51608. return s0;
  51609. }
  51610. function peg$parsenumber() {
  51611. var s0, s1;
  51612. var key = peg$currPos * 60 + 12,
  51613. cached = peg$cache[key];
  51614. if (cached) {
  51615. peg$currPos = cached.nextPos;
  51616. return cached.result;
  51617. }
  51618. s0 = peg$currPos;
  51619. s1 = peg$parsenumberExp();
  51620. if (s1 === peg$FAILED) {
  51621. s1 = peg$parsehex();
  51622. if (s1 === peg$FAILED) {
  51623. s1 = peg$parsefloat();
  51624. if (s1 === peg$FAILED) {
  51625. s1 = peg$parseinteger();
  51626. }
  51627. }
  51628. }
  51629. if (s1 !== peg$FAILED) {
  51630. peg$reportedPos = s0;
  51631. s1 = peg$c37(s1);
  51632. }
  51633. s0 = s1;
  51634. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51635. return s0;
  51636. }
  51637. function peg$parsenumberExp() {
  51638. var s0, s1, s2, s3, s4;
  51639. var key = peg$currPos * 60 + 13,
  51640. cached = peg$cache[key];
  51641. if (cached) {
  51642. peg$currPos = cached.nextPos;
  51643. return cached.result;
  51644. }
  51645. s0 = peg$currPos;
  51646. s1 = peg$currPos;
  51647. s2 = peg$parsefloat();
  51648. if (s2 === peg$FAILED) {
  51649. s2 = peg$parseinteger();
  51650. }
  51651. if (s2 !== peg$FAILED) {
  51652. if (input.charCodeAt(peg$currPos) === 101) {
  51653. s3 = peg$c38;
  51654. peg$currPos++;
  51655. } else {
  51656. s3 = peg$FAILED;
  51657. if (peg$silentFails === 0) { peg$fail(peg$c39); }
  51658. }
  51659. if (s3 !== peg$FAILED) {
  51660. s4 = peg$parseinteger();
  51661. if (s4 !== peg$FAILED) {
  51662. s2 = [s2, s3, s4];
  51663. s1 = s2;
  51664. } else {
  51665. peg$currPos = s1;
  51666. s1 = peg$c1;
  51667. }
  51668. } else {
  51669. peg$currPos = s1;
  51670. s1 = peg$c1;
  51671. }
  51672. } else {
  51673. peg$currPos = s1;
  51674. s1 = peg$c1;
  51675. }
  51676. if (s1 !== peg$FAILED) {
  51677. peg$reportedPos = s0;
  51678. s1 = peg$c40(s1);
  51679. }
  51680. s0 = s1;
  51681. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51682. return s0;
  51683. }
  51684. function peg$parsehex() {
  51685. var s0, s1, s2, s3, s4;
  51686. var key = peg$currPos * 60 + 14,
  51687. cached = peg$cache[key];
  51688. if (cached) {
  51689. peg$currPos = cached.nextPos;
  51690. return cached.result;
  51691. }
  51692. s0 = peg$currPos;
  51693. if (input.charCodeAt(peg$currPos) === 45) {
  51694. s1 = peg$c42;
  51695. peg$currPos++;
  51696. } else {
  51697. s1 = peg$FAILED;
  51698. if (peg$silentFails === 0) { peg$fail(peg$c43); }
  51699. }
  51700. if (s1 === peg$FAILED) {
  51701. s1 = peg$c41;
  51702. }
  51703. if (s1 !== peg$FAILED) {
  51704. if (input.substr(peg$currPos, 3) === peg$c44) {
  51705. s2 = peg$c44;
  51706. peg$currPos += 3;
  51707. } else {
  51708. s2 = peg$FAILED;
  51709. if (peg$silentFails === 0) { peg$fail(peg$c45); }
  51710. }
  51711. if (s2 !== peg$FAILED) {
  51712. s3 = [];
  51713. if (peg$c46.test(input.charAt(peg$currPos))) {
  51714. s4 = input.charAt(peg$currPos);
  51715. peg$currPos++;
  51716. } else {
  51717. s4 = peg$FAILED;
  51718. if (peg$silentFails === 0) { peg$fail(peg$c47); }
  51719. }
  51720. if (s4 !== peg$FAILED) {
  51721. while (s4 !== peg$FAILED) {
  51722. s3.push(s4);
  51723. if (peg$c46.test(input.charAt(peg$currPos))) {
  51724. s4 = input.charAt(peg$currPos);
  51725. peg$currPos++;
  51726. } else {
  51727. s4 = peg$FAILED;
  51728. if (peg$silentFails === 0) { peg$fail(peg$c47); }
  51729. }
  51730. }
  51731. } else {
  51732. s3 = peg$c1;
  51733. }
  51734. if (s3 !== peg$FAILED) {
  51735. peg$reportedPos = s0;
  51736. s1 = peg$c48(s1, s3);
  51737. s0 = s1;
  51738. } else {
  51739. peg$currPos = s0;
  51740. s0 = peg$c1;
  51741. }
  51742. } else {
  51743. peg$currPos = s0;
  51744. s0 = peg$c1;
  51745. }
  51746. } else {
  51747. peg$currPos = s0;
  51748. s0 = peg$c1;
  51749. }
  51750. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51751. return s0;
  51752. }
  51753. function peg$parsefloat() {
  51754. var s0, s1, s2, s3, s4, s5;
  51755. var key = peg$currPos * 60 + 15,
  51756. cached = peg$cache[key];
  51757. if (cached) {
  51758. peg$currPos = cached.nextPos;
  51759. return cached.result;
  51760. }
  51761. s0 = peg$currPos;
  51762. if (input.charCodeAt(peg$currPos) === 45) {
  51763. s1 = peg$c42;
  51764. peg$currPos++;
  51765. } else {
  51766. s1 = peg$FAILED;
  51767. if (peg$silentFails === 0) { peg$fail(peg$c43); }
  51768. }
  51769. if (s1 === peg$FAILED) {
  51770. s1 = peg$c41;
  51771. }
  51772. if (s1 !== peg$FAILED) {
  51773. s2 = [];
  51774. if (peg$c49.test(input.charAt(peg$currPos))) {
  51775. s3 = input.charAt(peg$currPos);
  51776. peg$currPos++;
  51777. } else {
  51778. s3 = peg$FAILED;
  51779. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  51780. }
  51781. if (s3 !== peg$FAILED) {
  51782. while (s3 !== peg$FAILED) {
  51783. s2.push(s3);
  51784. if (peg$c49.test(input.charAt(peg$currPos))) {
  51785. s3 = input.charAt(peg$currPos);
  51786. peg$currPos++;
  51787. } else {
  51788. s3 = peg$FAILED;
  51789. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  51790. }
  51791. }
  51792. } else {
  51793. s2 = peg$c1;
  51794. }
  51795. if (s2 !== peg$FAILED) {
  51796. if (input.charCodeAt(peg$currPos) === 46) {
  51797. s3 = peg$c51;
  51798. peg$currPos++;
  51799. } else {
  51800. s3 = peg$FAILED;
  51801. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  51802. }
  51803. if (s3 !== peg$FAILED) {
  51804. s4 = [];
  51805. if (peg$c49.test(input.charAt(peg$currPos))) {
  51806. s5 = input.charAt(peg$currPos);
  51807. peg$currPos++;
  51808. } else {
  51809. s5 = peg$FAILED;
  51810. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  51811. }
  51812. if (s5 !== peg$FAILED) {
  51813. while (s5 !== peg$FAILED) {
  51814. s4.push(s5);
  51815. if (peg$c49.test(input.charAt(peg$currPos))) {
  51816. s5 = input.charAt(peg$currPos);
  51817. peg$currPos++;
  51818. } else {
  51819. s5 = peg$FAILED;
  51820. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  51821. }
  51822. }
  51823. } else {
  51824. s4 = peg$c1;
  51825. }
  51826. if (s4 !== peg$FAILED) {
  51827. peg$reportedPos = s0;
  51828. s1 = peg$c53(s1, s2, s4);
  51829. s0 = s1;
  51830. } else {
  51831. peg$currPos = s0;
  51832. s0 = peg$c1;
  51833. }
  51834. } else {
  51835. peg$currPos = s0;
  51836. s0 = peg$c1;
  51837. }
  51838. } else {
  51839. peg$currPos = s0;
  51840. s0 = peg$c1;
  51841. }
  51842. } else {
  51843. peg$currPos = s0;
  51844. s0 = peg$c1;
  51845. }
  51846. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51847. return s0;
  51848. }
  51849. function peg$parseinteger() {
  51850. var s0, s1, s2, s3;
  51851. var key = peg$currPos * 60 + 16,
  51852. cached = peg$cache[key];
  51853. if (cached) {
  51854. peg$currPos = cached.nextPos;
  51855. return cached.result;
  51856. }
  51857. s0 = peg$currPos;
  51858. if (input.charCodeAt(peg$currPos) === 45) {
  51859. s1 = peg$c42;
  51860. peg$currPos++;
  51861. } else {
  51862. s1 = peg$FAILED;
  51863. if (peg$silentFails === 0) { peg$fail(peg$c43); }
  51864. }
  51865. if (s1 === peg$FAILED) {
  51866. s1 = peg$c41;
  51867. }
  51868. if (s1 !== peg$FAILED) {
  51869. s2 = [];
  51870. if (peg$c49.test(input.charAt(peg$currPos))) {
  51871. s3 = input.charAt(peg$currPos);
  51872. peg$currPos++;
  51873. } else {
  51874. s3 = peg$FAILED;
  51875. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  51876. }
  51877. if (s3 !== peg$FAILED) {
  51878. while (s3 !== peg$FAILED) {
  51879. s2.push(s3);
  51880. if (peg$c49.test(input.charAt(peg$currPos))) {
  51881. s3 = input.charAt(peg$currPos);
  51882. peg$currPos++;
  51883. } else {
  51884. s3 = peg$FAILED;
  51885. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  51886. }
  51887. }
  51888. } else {
  51889. s2 = peg$c1;
  51890. }
  51891. if (s2 !== peg$FAILED) {
  51892. peg$reportedPos = s0;
  51893. s1 = peg$c54(s1, s2);
  51894. s0 = s1;
  51895. } else {
  51896. peg$currPos = s0;
  51897. s0 = peg$c1;
  51898. }
  51899. } else {
  51900. peg$currPos = s0;
  51901. s0 = peg$c1;
  51902. }
  51903. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51904. return s0;
  51905. }
  51906. function peg$parseliteralArray() {
  51907. var s0, s1, s2;
  51908. var key = peg$currPos * 60 + 17,
  51909. cached = peg$cache[key];
  51910. if (cached) {
  51911. peg$currPos = cached.nextPos;
  51912. return cached.result;
  51913. }
  51914. s0 = peg$currPos;
  51915. if (input.substr(peg$currPos, 2) === peg$c55) {
  51916. s1 = peg$c55;
  51917. peg$currPos += 2;
  51918. } else {
  51919. s1 = peg$FAILED;
  51920. if (peg$silentFails === 0) { peg$fail(peg$c56); }
  51921. }
  51922. if (s1 !== peg$FAILED) {
  51923. s2 = peg$parseliteralArrayRest();
  51924. if (s2 !== peg$FAILED) {
  51925. peg$reportedPos = s0;
  51926. s1 = peg$c34(s2);
  51927. s0 = s1;
  51928. } else {
  51929. peg$currPos = s0;
  51930. s0 = peg$c1;
  51931. }
  51932. } else {
  51933. peg$currPos = s0;
  51934. s0 = peg$c1;
  51935. }
  51936. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51937. return s0;
  51938. }
  51939. function peg$parsebareLiteralArray() {
  51940. var s0, s1, s2;
  51941. var key = peg$currPos * 60 + 18,
  51942. cached = peg$cache[key];
  51943. if (cached) {
  51944. peg$currPos = cached.nextPos;
  51945. return cached.result;
  51946. }
  51947. s0 = peg$currPos;
  51948. if (input.charCodeAt(peg$currPos) === 40) {
  51949. s1 = peg$c57;
  51950. peg$currPos++;
  51951. } else {
  51952. s1 = peg$FAILED;
  51953. if (peg$silentFails === 0) { peg$fail(peg$c58); }
  51954. }
  51955. if (s1 !== peg$FAILED) {
  51956. s2 = peg$parseliteralArrayRest();
  51957. if (s2 !== peg$FAILED) {
  51958. peg$reportedPos = s0;
  51959. s1 = peg$c34(s2);
  51960. s0 = s1;
  51961. } else {
  51962. peg$currPos = s0;
  51963. s0 = peg$c1;
  51964. }
  51965. } else {
  51966. peg$currPos = s0;
  51967. s0 = peg$c1;
  51968. }
  51969. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51970. return s0;
  51971. }
  51972. function peg$parseliteralArrayRest() {
  51973. var s0, s1, s2, s3, s4;
  51974. var key = peg$currPos * 60 + 19,
  51975. cached = peg$cache[key];
  51976. if (cached) {
  51977. peg$currPos = cached.nextPos;
  51978. return cached.result;
  51979. }
  51980. s0 = peg$currPos;
  51981. s1 = [];
  51982. s2 = peg$currPos;
  51983. s3 = peg$parsews();
  51984. if (s3 !== peg$FAILED) {
  51985. s4 = peg$parseparseTimeLiteral();
  51986. if (s4 === peg$FAILED) {
  51987. s4 = peg$parsebareLiteralArray();
  51988. if (s4 === peg$FAILED) {
  51989. s4 = peg$parsebareSymbol();
  51990. }
  51991. }
  51992. if (s4 !== peg$FAILED) {
  51993. peg$reportedPos = s2;
  51994. s3 = peg$c59(s4);
  51995. s2 = s3;
  51996. } else {
  51997. peg$currPos = s2;
  51998. s2 = peg$c1;
  51999. }
  52000. } else {
  52001. peg$currPos = s2;
  52002. s2 = peg$c1;
  52003. }
  52004. while (s2 !== peg$FAILED) {
  52005. s1.push(s2);
  52006. s2 = peg$currPos;
  52007. s3 = peg$parsews();
  52008. if (s3 !== peg$FAILED) {
  52009. s4 = peg$parseparseTimeLiteral();
  52010. if (s4 === peg$FAILED) {
  52011. s4 = peg$parsebareLiteralArray();
  52012. if (s4 === peg$FAILED) {
  52013. s4 = peg$parsebareSymbol();
  52014. }
  52015. }
  52016. if (s4 !== peg$FAILED) {
  52017. peg$reportedPos = s2;
  52018. s3 = peg$c59(s4);
  52019. s2 = s3;
  52020. } else {
  52021. peg$currPos = s2;
  52022. s2 = peg$c1;
  52023. }
  52024. } else {
  52025. peg$currPos = s2;
  52026. s2 = peg$c1;
  52027. }
  52028. }
  52029. if (s1 !== peg$FAILED) {
  52030. s2 = peg$parsews();
  52031. if (s2 !== peg$FAILED) {
  52032. if (input.charCodeAt(peg$currPos) === 41) {
  52033. s3 = peg$c60;
  52034. peg$currPos++;
  52035. } else {
  52036. s3 = peg$FAILED;
  52037. if (peg$silentFails === 0) { peg$fail(peg$c61); }
  52038. }
  52039. if (s3 !== peg$FAILED) {
  52040. peg$reportedPos = s0;
  52041. s1 = peg$c62(s1);
  52042. s0 = s1;
  52043. } else {
  52044. peg$currPos = s0;
  52045. s0 = peg$c1;
  52046. }
  52047. } else {
  52048. peg$currPos = s0;
  52049. s0 = peg$c1;
  52050. }
  52051. } else {
  52052. peg$currPos = s0;
  52053. s0 = peg$c1;
  52054. }
  52055. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52056. return s0;
  52057. }
  52058. function peg$parsedynamicArray() {
  52059. var s0, s1, s2, s3, s4, s5, s6;
  52060. var key = peg$currPos * 60 + 20,
  52061. cached = peg$cache[key];
  52062. if (cached) {
  52063. peg$currPos = cached.nextPos;
  52064. return cached.result;
  52065. }
  52066. s0 = peg$currPos;
  52067. if (input.charCodeAt(peg$currPos) === 123) {
  52068. s1 = peg$c63;
  52069. peg$currPos++;
  52070. } else {
  52071. s1 = peg$FAILED;
  52072. if (peg$silentFails === 0) { peg$fail(peg$c64); }
  52073. }
  52074. if (s1 !== peg$FAILED) {
  52075. s2 = peg$parsews();
  52076. if (s2 !== peg$FAILED) {
  52077. s3 = peg$parseexpressions();
  52078. if (s3 === peg$FAILED) {
  52079. s3 = peg$c41;
  52080. }
  52081. if (s3 !== peg$FAILED) {
  52082. s4 = peg$parsews();
  52083. if (s4 !== peg$FAILED) {
  52084. if (input.charCodeAt(peg$currPos) === 46) {
  52085. s5 = peg$c51;
  52086. peg$currPos++;
  52087. } else {
  52088. s5 = peg$FAILED;
  52089. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52090. }
  52091. if (s5 === peg$FAILED) {
  52092. s5 = peg$c41;
  52093. }
  52094. if (s5 !== peg$FAILED) {
  52095. if (input.charCodeAt(peg$currPos) === 125) {
  52096. s6 = peg$c65;
  52097. peg$currPos++;
  52098. } else {
  52099. s6 = peg$FAILED;
  52100. if (peg$silentFails === 0) { peg$fail(peg$c66); }
  52101. }
  52102. if (s6 !== peg$FAILED) {
  52103. peg$reportedPos = s0;
  52104. s1 = peg$c67(s3);
  52105. s0 = s1;
  52106. } else {
  52107. peg$currPos = s0;
  52108. s0 = peg$c1;
  52109. }
  52110. } else {
  52111. peg$currPos = s0;
  52112. s0 = peg$c1;
  52113. }
  52114. } else {
  52115. peg$currPos = s0;
  52116. s0 = peg$c1;
  52117. }
  52118. } else {
  52119. peg$currPos = s0;
  52120. s0 = peg$c1;
  52121. }
  52122. } else {
  52123. peg$currPos = s0;
  52124. s0 = peg$c1;
  52125. }
  52126. } else {
  52127. peg$currPos = s0;
  52128. s0 = peg$c1;
  52129. }
  52130. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52131. return s0;
  52132. }
  52133. function peg$parsedynamicDictionary() {
  52134. var s0, s1, s2, s3, s4, s5;
  52135. var key = peg$currPos * 60 + 21,
  52136. cached = peg$cache[key];
  52137. if (cached) {
  52138. peg$currPos = cached.nextPos;
  52139. return cached.result;
  52140. }
  52141. s0 = peg$currPos;
  52142. if (input.substr(peg$currPos, 2) === peg$c68) {
  52143. s1 = peg$c68;
  52144. peg$currPos += 2;
  52145. } else {
  52146. s1 = peg$FAILED;
  52147. if (peg$silentFails === 0) { peg$fail(peg$c69); }
  52148. }
  52149. if (s1 !== peg$FAILED) {
  52150. s2 = peg$parsews();
  52151. if (s2 !== peg$FAILED) {
  52152. s3 = peg$parseassociations();
  52153. if (s3 === peg$FAILED) {
  52154. s3 = peg$c41;
  52155. }
  52156. if (s3 !== peg$FAILED) {
  52157. s4 = peg$parsews();
  52158. if (s4 !== peg$FAILED) {
  52159. if (input.charCodeAt(peg$currPos) === 125) {
  52160. s5 = peg$c65;
  52161. peg$currPos++;
  52162. } else {
  52163. s5 = peg$FAILED;
  52164. if (peg$silentFails === 0) { peg$fail(peg$c66); }
  52165. }
  52166. if (s5 !== peg$FAILED) {
  52167. peg$reportedPos = s0;
  52168. s1 = peg$c70(s3);
  52169. s0 = s1;
  52170. } else {
  52171. peg$currPos = s0;
  52172. s0 = peg$c1;
  52173. }
  52174. } else {
  52175. peg$currPos = s0;
  52176. s0 = peg$c1;
  52177. }
  52178. } else {
  52179. peg$currPos = s0;
  52180. s0 = peg$c1;
  52181. }
  52182. } else {
  52183. peg$currPos = s0;
  52184. s0 = peg$c1;
  52185. }
  52186. } else {
  52187. peg$currPos = s0;
  52188. s0 = peg$c1;
  52189. }
  52190. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52191. return s0;
  52192. }
  52193. function peg$parsepseudoVariable() {
  52194. var s0, s1, s2;
  52195. var key = peg$currPos * 60 + 22,
  52196. cached = peg$cache[key];
  52197. if (cached) {
  52198. peg$currPos = cached.nextPos;
  52199. return cached.result;
  52200. }
  52201. s0 = peg$currPos;
  52202. s1 = peg$currPos;
  52203. if (input.substr(peg$currPos, 4) === peg$c71) {
  52204. s2 = peg$c71;
  52205. peg$currPos += 4;
  52206. } else {
  52207. s2 = peg$FAILED;
  52208. if (peg$silentFails === 0) { peg$fail(peg$c72); }
  52209. }
  52210. if (s2 !== peg$FAILED) {
  52211. peg$reportedPos = s1;
  52212. s2 = peg$c73();
  52213. }
  52214. s1 = s2;
  52215. if (s1 === peg$FAILED) {
  52216. s1 = peg$currPos;
  52217. if (input.substr(peg$currPos, 5) === peg$c74) {
  52218. s2 = peg$c74;
  52219. peg$currPos += 5;
  52220. } else {
  52221. s2 = peg$FAILED;
  52222. if (peg$silentFails === 0) { peg$fail(peg$c75); }
  52223. }
  52224. if (s2 !== peg$FAILED) {
  52225. peg$reportedPos = s1;
  52226. s2 = peg$c76();
  52227. }
  52228. s1 = s2;
  52229. if (s1 === peg$FAILED) {
  52230. s1 = peg$currPos;
  52231. if (input.substr(peg$currPos, 3) === peg$c77) {
  52232. s2 = peg$c77;
  52233. peg$currPos += 3;
  52234. } else {
  52235. s2 = peg$FAILED;
  52236. if (peg$silentFails === 0) { peg$fail(peg$c78); }
  52237. }
  52238. if (s2 !== peg$FAILED) {
  52239. peg$reportedPos = s1;
  52240. s2 = peg$c79();
  52241. }
  52242. s1 = s2;
  52243. }
  52244. }
  52245. if (s1 !== peg$FAILED) {
  52246. peg$reportedPos = s0;
  52247. s1 = peg$c80(s1);
  52248. }
  52249. s0 = s1;
  52250. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52251. return s0;
  52252. }
  52253. function peg$parseparseTimeLiteral() {
  52254. var s0;
  52255. var key = peg$currPos * 60 + 23,
  52256. cached = peg$cache[key];
  52257. if (cached) {
  52258. peg$currPos = cached.nextPos;
  52259. return cached.result;
  52260. }
  52261. s0 = peg$parsepseudoVariable();
  52262. if (s0 === peg$FAILED) {
  52263. s0 = peg$parsenumber();
  52264. if (s0 === peg$FAILED) {
  52265. s0 = peg$parseliteralArray();
  52266. if (s0 === peg$FAILED) {
  52267. s0 = peg$parsestring();
  52268. if (s0 === peg$FAILED) {
  52269. s0 = peg$parsesymbol();
  52270. if (s0 === peg$FAILED) {
  52271. s0 = peg$parsecharacter();
  52272. }
  52273. }
  52274. }
  52275. }
  52276. }
  52277. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52278. return s0;
  52279. }
  52280. function peg$parseruntimeLiteral() {
  52281. var s0;
  52282. var key = peg$currPos * 60 + 24,
  52283. cached = peg$cache[key];
  52284. if (cached) {
  52285. peg$currPos = cached.nextPos;
  52286. return cached.result;
  52287. }
  52288. s0 = peg$parsedynamicDictionary();
  52289. if (s0 === peg$FAILED) {
  52290. s0 = peg$parsedynamicArray();
  52291. if (s0 === peg$FAILED) {
  52292. s0 = peg$parseblock();
  52293. }
  52294. }
  52295. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52296. return s0;
  52297. }
  52298. function peg$parseliteral() {
  52299. var s0;
  52300. var key = peg$currPos * 60 + 25,
  52301. cached = peg$cache[key];
  52302. if (cached) {
  52303. peg$currPos = cached.nextPos;
  52304. return cached.result;
  52305. }
  52306. s0 = peg$parseruntimeLiteral();
  52307. if (s0 === peg$FAILED) {
  52308. s0 = peg$parseparseTimeLiteral();
  52309. }
  52310. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52311. return s0;
  52312. }
  52313. function peg$parsevariable() {
  52314. var s0, s1;
  52315. var key = peg$currPos * 60 + 26,
  52316. cached = peg$cache[key];
  52317. if (cached) {
  52318. peg$currPos = cached.nextPos;
  52319. return cached.result;
  52320. }
  52321. s0 = peg$currPos;
  52322. s1 = peg$parseidentifier();
  52323. if (s1 !== peg$FAILED) {
  52324. peg$reportedPos = s0;
  52325. s1 = peg$c81(s1);
  52326. }
  52327. s0 = s1;
  52328. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52329. return s0;
  52330. }
  52331. function peg$parsekeywordPair() {
  52332. var s0, s1, s2, s3, s4;
  52333. var key = peg$currPos * 60 + 27,
  52334. cached = peg$cache[key];
  52335. if (cached) {
  52336. peg$currPos = cached.nextPos;
  52337. return cached.result;
  52338. }
  52339. s0 = peg$currPos;
  52340. s1 = peg$parsews();
  52341. if (s1 !== peg$FAILED) {
  52342. s2 = peg$parsekeyword();
  52343. if (s2 !== peg$FAILED) {
  52344. s3 = peg$parsews();
  52345. if (s3 !== peg$FAILED) {
  52346. s4 = peg$parsebinarySend();
  52347. if (s4 !== peg$FAILED) {
  52348. peg$reportedPos = s0;
  52349. s1 = peg$c82(s2, s4);
  52350. s0 = s1;
  52351. } else {
  52352. peg$currPos = s0;
  52353. s0 = peg$c1;
  52354. }
  52355. } else {
  52356. peg$currPos = s0;
  52357. s0 = peg$c1;
  52358. }
  52359. } else {
  52360. peg$currPos = s0;
  52361. s0 = peg$c1;
  52362. }
  52363. } else {
  52364. peg$currPos = s0;
  52365. s0 = peg$c1;
  52366. }
  52367. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52368. return s0;
  52369. }
  52370. function peg$parsebinarySelector() {
  52371. var s0, s1, s2;
  52372. var key = peg$currPos * 60 + 28,
  52373. cached = peg$cache[key];
  52374. if (cached) {
  52375. peg$currPos = cached.nextPos;
  52376. return cached.result;
  52377. }
  52378. s0 = peg$currPos;
  52379. s1 = [];
  52380. if (peg$c83.test(input.charAt(peg$currPos))) {
  52381. s2 = input.charAt(peg$currPos);
  52382. peg$currPos++;
  52383. } else {
  52384. s2 = peg$FAILED;
  52385. if (peg$silentFails === 0) { peg$fail(peg$c84); }
  52386. }
  52387. if (s2 !== peg$FAILED) {
  52388. while (s2 !== peg$FAILED) {
  52389. s1.push(s2);
  52390. if (peg$c83.test(input.charAt(peg$currPos))) {
  52391. s2 = input.charAt(peg$currPos);
  52392. peg$currPos++;
  52393. } else {
  52394. s2 = peg$FAILED;
  52395. if (peg$silentFails === 0) { peg$fail(peg$c84); }
  52396. }
  52397. }
  52398. } else {
  52399. s1 = peg$c1;
  52400. }
  52401. if (s1 !== peg$FAILED) {
  52402. peg$reportedPos = s0;
  52403. s1 = peg$c85(s1);
  52404. }
  52405. s0 = s1;
  52406. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52407. return s0;
  52408. }
  52409. function peg$parsekeywordPattern() {
  52410. var s0, s1, s2, s3, s4, s5, s6;
  52411. var key = peg$currPos * 60 + 29,
  52412. cached = peg$cache[key];
  52413. if (cached) {
  52414. peg$currPos = cached.nextPos;
  52415. return cached.result;
  52416. }
  52417. s0 = peg$currPos;
  52418. s1 = [];
  52419. s2 = peg$currPos;
  52420. s3 = peg$parsews();
  52421. if (s3 !== peg$FAILED) {
  52422. s4 = peg$parsekeyword();
  52423. if (s4 !== peg$FAILED) {
  52424. s5 = peg$parsews();
  52425. if (s5 !== peg$FAILED) {
  52426. s6 = peg$parseidentifier();
  52427. if (s6 !== peg$FAILED) {
  52428. peg$reportedPos = s2;
  52429. s3 = peg$c82(s4, s6);
  52430. s2 = s3;
  52431. } else {
  52432. peg$currPos = s2;
  52433. s2 = peg$c1;
  52434. }
  52435. } else {
  52436. peg$currPos = s2;
  52437. s2 = peg$c1;
  52438. }
  52439. } else {
  52440. peg$currPos = s2;
  52441. s2 = peg$c1;
  52442. }
  52443. } else {
  52444. peg$currPos = s2;
  52445. s2 = peg$c1;
  52446. }
  52447. if (s2 !== peg$FAILED) {
  52448. while (s2 !== peg$FAILED) {
  52449. s1.push(s2);
  52450. s2 = peg$currPos;
  52451. s3 = peg$parsews();
  52452. if (s3 !== peg$FAILED) {
  52453. s4 = peg$parsekeyword();
  52454. if (s4 !== peg$FAILED) {
  52455. s5 = peg$parsews();
  52456. if (s5 !== peg$FAILED) {
  52457. s6 = peg$parseidentifier();
  52458. if (s6 !== peg$FAILED) {
  52459. peg$reportedPos = s2;
  52460. s3 = peg$c82(s4, s6);
  52461. s2 = s3;
  52462. } else {
  52463. peg$currPos = s2;
  52464. s2 = peg$c1;
  52465. }
  52466. } else {
  52467. peg$currPos = s2;
  52468. s2 = peg$c1;
  52469. }
  52470. } else {
  52471. peg$currPos = s2;
  52472. s2 = peg$c1;
  52473. }
  52474. } else {
  52475. peg$currPos = s2;
  52476. s2 = peg$c1;
  52477. }
  52478. }
  52479. } else {
  52480. s1 = peg$c1;
  52481. }
  52482. if (s1 !== peg$FAILED) {
  52483. peg$reportedPos = s0;
  52484. s1 = peg$c86(s1);
  52485. }
  52486. s0 = s1;
  52487. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52488. return s0;
  52489. }
  52490. function peg$parsebinaryPattern() {
  52491. var s0, s1, s2, s3, s4;
  52492. var key = peg$currPos * 60 + 30,
  52493. cached = peg$cache[key];
  52494. if (cached) {
  52495. peg$currPos = cached.nextPos;
  52496. return cached.result;
  52497. }
  52498. s0 = peg$currPos;
  52499. s1 = peg$parsews();
  52500. if (s1 !== peg$FAILED) {
  52501. s2 = peg$parsebinarySelector();
  52502. if (s2 !== peg$FAILED) {
  52503. s3 = peg$parsews();
  52504. if (s3 !== peg$FAILED) {
  52505. s4 = peg$parseidentifier();
  52506. if (s4 !== peg$FAILED) {
  52507. peg$reportedPos = s0;
  52508. s1 = peg$c87(s2, s4);
  52509. s0 = s1;
  52510. } else {
  52511. peg$currPos = s0;
  52512. s0 = peg$c1;
  52513. }
  52514. } else {
  52515. peg$currPos = s0;
  52516. s0 = peg$c1;
  52517. }
  52518. } else {
  52519. peg$currPos = s0;
  52520. s0 = peg$c1;
  52521. }
  52522. } else {
  52523. peg$currPos = s0;
  52524. s0 = peg$c1;
  52525. }
  52526. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52527. return s0;
  52528. }
  52529. function peg$parseunaryPattern() {
  52530. var s0, s1, s2;
  52531. var key = peg$currPos * 60 + 31,
  52532. cached = peg$cache[key];
  52533. if (cached) {
  52534. peg$currPos = cached.nextPos;
  52535. return cached.result;
  52536. }
  52537. s0 = peg$currPos;
  52538. s1 = peg$parsews();
  52539. if (s1 !== peg$FAILED) {
  52540. s2 = peg$parseidentifier();
  52541. if (s2 !== peg$FAILED) {
  52542. peg$reportedPos = s0;
  52543. s1 = peg$c88(s2);
  52544. s0 = s1;
  52545. } else {
  52546. peg$currPos = s0;
  52547. s0 = peg$c1;
  52548. }
  52549. } else {
  52550. peg$currPos = s0;
  52551. s0 = peg$c1;
  52552. }
  52553. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52554. return s0;
  52555. }
  52556. function peg$parseexpression() {
  52557. var s0;
  52558. var key = peg$currPos * 60 + 32,
  52559. cached = peg$cache[key];
  52560. if (cached) {
  52561. peg$currPos = cached.nextPos;
  52562. return cached.result;
  52563. }
  52564. s0 = peg$parseassignment();
  52565. if (s0 === peg$FAILED) {
  52566. s0 = peg$parsecascade();
  52567. if (s0 === peg$FAILED) {
  52568. s0 = peg$parsekeywordSend();
  52569. if (s0 === peg$FAILED) {
  52570. s0 = peg$parsebinarySend();
  52571. }
  52572. }
  52573. }
  52574. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52575. return s0;
  52576. }
  52577. function peg$parseexpressionList() {
  52578. var s0, s1, s2, s3, s4;
  52579. var key = peg$currPos * 60 + 33,
  52580. cached = peg$cache[key];
  52581. if (cached) {
  52582. peg$currPos = cached.nextPos;
  52583. return cached.result;
  52584. }
  52585. s0 = peg$currPos;
  52586. s1 = peg$parsews();
  52587. if (s1 !== peg$FAILED) {
  52588. if (input.charCodeAt(peg$currPos) === 46) {
  52589. s2 = peg$c51;
  52590. peg$currPos++;
  52591. } else {
  52592. s2 = peg$FAILED;
  52593. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52594. }
  52595. if (s2 !== peg$FAILED) {
  52596. s3 = peg$parsews();
  52597. if (s3 !== peg$FAILED) {
  52598. s4 = peg$parseexpression();
  52599. if (s4 !== peg$FAILED) {
  52600. peg$reportedPos = s0;
  52601. s1 = peg$c89(s4);
  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. } else {
  52612. peg$currPos = s0;
  52613. s0 = peg$c1;
  52614. }
  52615. } else {
  52616. peg$currPos = s0;
  52617. s0 = peg$c1;
  52618. }
  52619. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52620. return s0;
  52621. }
  52622. function peg$parseexpressions() {
  52623. var s0, s1, s2, s3;
  52624. var key = peg$currPos * 60 + 34,
  52625. cached = peg$cache[key];
  52626. if (cached) {
  52627. peg$currPos = cached.nextPos;
  52628. return cached.result;
  52629. }
  52630. s0 = peg$currPos;
  52631. s1 = peg$parseexpression();
  52632. if (s1 !== peg$FAILED) {
  52633. s2 = [];
  52634. s3 = peg$parseexpressionList();
  52635. while (s3 !== peg$FAILED) {
  52636. s2.push(s3);
  52637. s3 = peg$parseexpressionList();
  52638. }
  52639. if (s2 !== peg$FAILED) {
  52640. peg$reportedPos = s0;
  52641. s1 = peg$c90(s1, s2);
  52642. s0 = s1;
  52643. } else {
  52644. peg$currPos = s0;
  52645. s0 = peg$c1;
  52646. }
  52647. } else {
  52648. peg$currPos = s0;
  52649. s0 = peg$c1;
  52650. }
  52651. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52652. return s0;
  52653. }
  52654. function peg$parseassignment() {
  52655. var s0, s1, s2, s3, s4, s5;
  52656. var key = peg$currPos * 60 + 35,
  52657. cached = peg$cache[key];
  52658. if (cached) {
  52659. peg$currPos = cached.nextPos;
  52660. return cached.result;
  52661. }
  52662. s0 = peg$currPos;
  52663. s1 = peg$parsevariable();
  52664. if (s1 !== peg$FAILED) {
  52665. s2 = peg$parsews();
  52666. if (s2 !== peg$FAILED) {
  52667. if (input.substr(peg$currPos, 2) === peg$c91) {
  52668. s3 = peg$c91;
  52669. peg$currPos += 2;
  52670. } else {
  52671. s3 = peg$FAILED;
  52672. if (peg$silentFails === 0) { peg$fail(peg$c92); }
  52673. }
  52674. if (s3 !== peg$FAILED) {
  52675. s4 = peg$parsews();
  52676. if (s4 !== peg$FAILED) {
  52677. s5 = peg$parseexpression();
  52678. if (s5 !== peg$FAILED) {
  52679. peg$reportedPos = s0;
  52680. s1 = peg$c93(s1, s5);
  52681. s0 = s1;
  52682. } else {
  52683. peg$currPos = s0;
  52684. s0 = peg$c1;
  52685. }
  52686. } else {
  52687. peg$currPos = s0;
  52688. s0 = peg$c1;
  52689. }
  52690. } else {
  52691. peg$currPos = s0;
  52692. s0 = peg$c1;
  52693. }
  52694. } else {
  52695. peg$currPos = s0;
  52696. s0 = peg$c1;
  52697. }
  52698. } else {
  52699. peg$currPos = s0;
  52700. s0 = peg$c1;
  52701. }
  52702. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52703. return s0;
  52704. }
  52705. function peg$parseret() {
  52706. var s0, s1, s2, s3, s4, s5;
  52707. var key = peg$currPos * 60 + 36,
  52708. cached = peg$cache[key];
  52709. if (cached) {
  52710. peg$currPos = cached.nextPos;
  52711. return cached.result;
  52712. }
  52713. s0 = peg$currPos;
  52714. if (input.charCodeAt(peg$currPos) === 94) {
  52715. s1 = peg$c94;
  52716. peg$currPos++;
  52717. } else {
  52718. s1 = peg$FAILED;
  52719. if (peg$silentFails === 0) { peg$fail(peg$c95); }
  52720. }
  52721. if (s1 !== peg$FAILED) {
  52722. s2 = peg$parsews();
  52723. if (s2 !== peg$FAILED) {
  52724. s3 = peg$parseexpression();
  52725. if (s3 !== peg$FAILED) {
  52726. s4 = peg$parsews();
  52727. if (s4 !== peg$FAILED) {
  52728. if (input.charCodeAt(peg$currPos) === 46) {
  52729. s5 = peg$c51;
  52730. peg$currPos++;
  52731. } else {
  52732. s5 = peg$FAILED;
  52733. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52734. }
  52735. if (s5 === peg$FAILED) {
  52736. s5 = peg$c41;
  52737. }
  52738. if (s5 !== peg$FAILED) {
  52739. peg$reportedPos = s0;
  52740. s1 = peg$c96(s3);
  52741. s0 = s1;
  52742. } else {
  52743. peg$currPos = s0;
  52744. s0 = peg$c1;
  52745. }
  52746. } else {
  52747. peg$currPos = s0;
  52748. s0 = peg$c1;
  52749. }
  52750. } else {
  52751. peg$currPos = s0;
  52752. s0 = peg$c1;
  52753. }
  52754. } else {
  52755. peg$currPos = s0;
  52756. s0 = peg$c1;
  52757. }
  52758. } else {
  52759. peg$currPos = s0;
  52760. s0 = peg$c1;
  52761. }
  52762. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52763. return s0;
  52764. }
  52765. function peg$parsetemps() {
  52766. var s0, s1, s2, s3, s4, s5;
  52767. var key = peg$currPos * 60 + 37,
  52768. cached = peg$cache[key];
  52769. if (cached) {
  52770. peg$currPos = cached.nextPos;
  52771. return cached.result;
  52772. }
  52773. s0 = peg$currPos;
  52774. if (input.charCodeAt(peg$currPos) === 124) {
  52775. s1 = peg$c97;
  52776. peg$currPos++;
  52777. } else {
  52778. s1 = peg$FAILED;
  52779. if (peg$silentFails === 0) { peg$fail(peg$c98); }
  52780. }
  52781. if (s1 !== peg$FAILED) {
  52782. s2 = [];
  52783. s3 = peg$currPos;
  52784. s4 = peg$parsews();
  52785. if (s4 !== peg$FAILED) {
  52786. s5 = peg$parseidentifier();
  52787. if (s5 !== peg$FAILED) {
  52788. peg$reportedPos = s3;
  52789. s4 = peg$c99(s5);
  52790. s3 = s4;
  52791. } else {
  52792. peg$currPos = s3;
  52793. s3 = peg$c1;
  52794. }
  52795. } else {
  52796. peg$currPos = s3;
  52797. s3 = peg$c1;
  52798. }
  52799. while (s3 !== peg$FAILED) {
  52800. s2.push(s3);
  52801. s3 = peg$currPos;
  52802. s4 = peg$parsews();
  52803. if (s4 !== peg$FAILED) {
  52804. s5 = peg$parseidentifier();
  52805. if (s5 !== peg$FAILED) {
  52806. peg$reportedPos = s3;
  52807. s4 = peg$c99(s5);
  52808. s3 = s4;
  52809. } else {
  52810. peg$currPos = s3;
  52811. s3 = peg$c1;
  52812. }
  52813. } else {
  52814. peg$currPos = s3;
  52815. s3 = peg$c1;
  52816. }
  52817. }
  52818. if (s2 !== peg$FAILED) {
  52819. s3 = peg$parsews();
  52820. if (s3 !== peg$FAILED) {
  52821. if (input.charCodeAt(peg$currPos) === 124) {
  52822. s4 = peg$c97;
  52823. peg$currPos++;
  52824. } else {
  52825. s4 = peg$FAILED;
  52826. if (peg$silentFails === 0) { peg$fail(peg$c98); }
  52827. }
  52828. if (s4 !== peg$FAILED) {
  52829. peg$reportedPos = s0;
  52830. s1 = peg$c100(s2);
  52831. s0 = s1;
  52832. } else {
  52833. peg$currPos = s0;
  52834. s0 = peg$c1;
  52835. }
  52836. } else {
  52837. peg$currPos = s0;
  52838. s0 = peg$c1;
  52839. }
  52840. } else {
  52841. peg$currPos = s0;
  52842. s0 = peg$c1;
  52843. }
  52844. } else {
  52845. peg$currPos = s0;
  52846. s0 = peg$c1;
  52847. }
  52848. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52849. return s0;
  52850. }
  52851. function peg$parseblockParamList() {
  52852. var s0, s1, s2, s3, s4, s5, s6;
  52853. var key = peg$currPos * 60 + 38,
  52854. cached = peg$cache[key];
  52855. if (cached) {
  52856. peg$currPos = cached.nextPos;
  52857. return cached.result;
  52858. }
  52859. s0 = peg$currPos;
  52860. s1 = [];
  52861. s2 = peg$currPos;
  52862. s3 = peg$parsews();
  52863. if (s3 !== peg$FAILED) {
  52864. if (input.charCodeAt(peg$currPos) === 58) {
  52865. s4 = peg$c13;
  52866. peg$currPos++;
  52867. } else {
  52868. s4 = peg$FAILED;
  52869. if (peg$silentFails === 0) { peg$fail(peg$c14); }
  52870. }
  52871. if (s4 !== peg$FAILED) {
  52872. s5 = peg$parsews();
  52873. if (s5 !== peg$FAILED) {
  52874. s6 = peg$parseidentifier();
  52875. if (s6 !== peg$FAILED) {
  52876. peg$reportedPos = s2;
  52877. s3 = peg$c101(s6);
  52878. s2 = s3;
  52879. } else {
  52880. peg$currPos = s2;
  52881. s2 = peg$c1;
  52882. }
  52883. } else {
  52884. peg$currPos = s2;
  52885. s2 = peg$c1;
  52886. }
  52887. } else {
  52888. peg$currPos = s2;
  52889. s2 = peg$c1;
  52890. }
  52891. } else {
  52892. peg$currPos = s2;
  52893. s2 = peg$c1;
  52894. }
  52895. if (s2 !== peg$FAILED) {
  52896. while (s2 !== peg$FAILED) {
  52897. s1.push(s2);
  52898. s2 = peg$currPos;
  52899. s3 = peg$parsews();
  52900. if (s3 !== peg$FAILED) {
  52901. if (input.charCodeAt(peg$currPos) === 58) {
  52902. s4 = peg$c13;
  52903. peg$currPos++;
  52904. } else {
  52905. s4 = peg$FAILED;
  52906. if (peg$silentFails === 0) { peg$fail(peg$c14); }
  52907. }
  52908. if (s4 !== peg$FAILED) {
  52909. s5 = peg$parsews();
  52910. if (s5 !== peg$FAILED) {
  52911. s6 = peg$parseidentifier();
  52912. if (s6 !== peg$FAILED) {
  52913. peg$reportedPos = s2;
  52914. s3 = peg$c101(s6);
  52915. s2 = s3;
  52916. } else {
  52917. peg$currPos = s2;
  52918. s2 = peg$c1;
  52919. }
  52920. } else {
  52921. peg$currPos = s2;
  52922. s2 = peg$c1;
  52923. }
  52924. } else {
  52925. peg$currPos = s2;
  52926. s2 = peg$c1;
  52927. }
  52928. } else {
  52929. peg$currPos = s2;
  52930. s2 = peg$c1;
  52931. }
  52932. }
  52933. } else {
  52934. s1 = peg$c1;
  52935. }
  52936. if (s1 !== peg$FAILED) {
  52937. s2 = peg$parsews();
  52938. if (s2 !== peg$FAILED) {
  52939. if (input.charCodeAt(peg$currPos) === 124) {
  52940. s3 = peg$c97;
  52941. peg$currPos++;
  52942. } else {
  52943. s3 = peg$FAILED;
  52944. if (peg$silentFails === 0) { peg$fail(peg$c98); }
  52945. }
  52946. if (s3 !== peg$FAILED) {
  52947. peg$reportedPos = s0;
  52948. s1 = peg$c102(s1);
  52949. s0 = s1;
  52950. } else {
  52951. peg$currPos = s0;
  52952. s0 = peg$c1;
  52953. }
  52954. } else {
  52955. peg$currPos = s0;
  52956. s0 = peg$c1;
  52957. }
  52958. } else {
  52959. peg$currPos = s0;
  52960. s0 = peg$c1;
  52961. }
  52962. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52963. return s0;
  52964. }
  52965. function peg$parsesubexpression() {
  52966. var s0, s1, s2, s3, s4, s5;
  52967. var key = peg$currPos * 60 + 39,
  52968. cached = peg$cache[key];
  52969. if (cached) {
  52970. peg$currPos = cached.nextPos;
  52971. return cached.result;
  52972. }
  52973. s0 = peg$currPos;
  52974. if (input.charCodeAt(peg$currPos) === 40) {
  52975. s1 = peg$c57;
  52976. peg$currPos++;
  52977. } else {
  52978. s1 = peg$FAILED;
  52979. if (peg$silentFails === 0) { peg$fail(peg$c58); }
  52980. }
  52981. if (s1 !== peg$FAILED) {
  52982. s2 = peg$parsews();
  52983. if (s2 !== peg$FAILED) {
  52984. s3 = peg$parseexpression();
  52985. if (s3 !== peg$FAILED) {
  52986. s4 = peg$parsews();
  52987. if (s4 !== peg$FAILED) {
  52988. if (input.charCodeAt(peg$currPos) === 41) {
  52989. s5 = peg$c60;
  52990. peg$currPos++;
  52991. } else {
  52992. s5 = peg$FAILED;
  52993. if (peg$silentFails === 0) { peg$fail(peg$c61); }
  52994. }
  52995. if (s5 !== peg$FAILED) {
  52996. peg$reportedPos = s0;
  52997. s1 = peg$c89(s3);
  52998. s0 = s1;
  52999. } else {
  53000. peg$currPos = s0;
  53001. s0 = peg$c1;
  53002. }
  53003. } else {
  53004. peg$currPos = s0;
  53005. s0 = peg$c1;
  53006. }
  53007. } else {
  53008. peg$currPos = s0;
  53009. s0 = peg$c1;
  53010. }
  53011. } else {
  53012. peg$currPos = s0;
  53013. s0 = peg$c1;
  53014. }
  53015. } else {
  53016. peg$currPos = s0;
  53017. s0 = peg$c1;
  53018. }
  53019. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53020. return s0;
  53021. }
  53022. function peg$parsestatements() {
  53023. var s0, s1, s2, s3, s4, s5, s6, s7;
  53024. var key = peg$currPos * 60 + 40,
  53025. cached = peg$cache[key];
  53026. if (cached) {
  53027. peg$currPos = cached.nextPos;
  53028. return cached.result;
  53029. }
  53030. s0 = peg$currPos;
  53031. s1 = peg$parseret();
  53032. if (s1 !== peg$FAILED) {
  53033. s2 = [];
  53034. if (input.charCodeAt(peg$currPos) === 46) {
  53035. s3 = peg$c51;
  53036. peg$currPos++;
  53037. } else {
  53038. s3 = peg$FAILED;
  53039. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53040. }
  53041. while (s3 !== peg$FAILED) {
  53042. s2.push(s3);
  53043. if (input.charCodeAt(peg$currPos) === 46) {
  53044. s3 = peg$c51;
  53045. peg$currPos++;
  53046. } else {
  53047. s3 = peg$FAILED;
  53048. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53049. }
  53050. }
  53051. if (s2 !== peg$FAILED) {
  53052. peg$reportedPos = s0;
  53053. s1 = peg$c103(s1);
  53054. s0 = s1;
  53055. } else {
  53056. peg$currPos = s0;
  53057. s0 = peg$c1;
  53058. }
  53059. } else {
  53060. peg$currPos = s0;
  53061. s0 = peg$c1;
  53062. }
  53063. if (s0 === peg$FAILED) {
  53064. s0 = peg$currPos;
  53065. s1 = peg$parseexpressions();
  53066. if (s1 !== peg$FAILED) {
  53067. s2 = peg$parsews();
  53068. if (s2 !== peg$FAILED) {
  53069. s3 = [];
  53070. if (input.charCodeAt(peg$currPos) === 46) {
  53071. s4 = peg$c51;
  53072. peg$currPos++;
  53073. } else {
  53074. s4 = peg$FAILED;
  53075. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53076. }
  53077. if (s4 !== peg$FAILED) {
  53078. while (s4 !== peg$FAILED) {
  53079. s3.push(s4);
  53080. if (input.charCodeAt(peg$currPos) === 46) {
  53081. s4 = peg$c51;
  53082. peg$currPos++;
  53083. } else {
  53084. s4 = peg$FAILED;
  53085. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53086. }
  53087. }
  53088. } else {
  53089. s3 = peg$c1;
  53090. }
  53091. if (s3 !== peg$FAILED) {
  53092. s4 = peg$parsews();
  53093. if (s4 !== peg$FAILED) {
  53094. s5 = peg$parseret();
  53095. if (s5 !== peg$FAILED) {
  53096. s6 = [];
  53097. if (input.charCodeAt(peg$currPos) === 46) {
  53098. s7 = peg$c51;
  53099. peg$currPos++;
  53100. } else {
  53101. s7 = peg$FAILED;
  53102. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53103. }
  53104. while (s7 !== peg$FAILED) {
  53105. s6.push(s7);
  53106. if (input.charCodeAt(peg$currPos) === 46) {
  53107. s7 = peg$c51;
  53108. peg$currPos++;
  53109. } else {
  53110. s7 = peg$FAILED;
  53111. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53112. }
  53113. }
  53114. if (s6 !== peg$FAILED) {
  53115. peg$reportedPos = s0;
  53116. s1 = peg$c104(s1, s5);
  53117. s0 = s1;
  53118. } else {
  53119. peg$currPos = s0;
  53120. s0 = peg$c1;
  53121. }
  53122. } else {
  53123. peg$currPos = s0;
  53124. s0 = peg$c1;
  53125. }
  53126. } else {
  53127. peg$currPos = s0;
  53128. s0 = peg$c1;
  53129. }
  53130. } else {
  53131. peg$currPos = s0;
  53132. s0 = peg$c1;
  53133. }
  53134. } else {
  53135. peg$currPos = s0;
  53136. s0 = peg$c1;
  53137. }
  53138. } else {
  53139. peg$currPos = s0;
  53140. s0 = peg$c1;
  53141. }
  53142. if (s0 === peg$FAILED) {
  53143. s0 = peg$currPos;
  53144. s1 = peg$parseexpressions();
  53145. if (s1 === peg$FAILED) {
  53146. s1 = peg$c41;
  53147. }
  53148. if (s1 !== peg$FAILED) {
  53149. s2 = [];
  53150. if (input.charCodeAt(peg$currPos) === 46) {
  53151. s3 = peg$c51;
  53152. peg$currPos++;
  53153. } else {
  53154. s3 = peg$FAILED;
  53155. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53156. }
  53157. while (s3 !== peg$FAILED) {
  53158. s2.push(s3);
  53159. if (input.charCodeAt(peg$currPos) === 46) {
  53160. s3 = peg$c51;
  53161. peg$currPos++;
  53162. } else {
  53163. s3 = peg$FAILED;
  53164. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53165. }
  53166. }
  53167. if (s2 !== peg$FAILED) {
  53168. peg$reportedPos = s0;
  53169. s1 = peg$c105(s1);
  53170. s0 = s1;
  53171. } else {
  53172. peg$currPos = s0;
  53173. s0 = peg$c1;
  53174. }
  53175. } else {
  53176. peg$currPos = s0;
  53177. s0 = peg$c1;
  53178. }
  53179. }
  53180. }
  53181. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53182. return s0;
  53183. }
  53184. function peg$parsesequence() {
  53185. var s0;
  53186. var key = peg$currPos * 60 + 41,
  53187. cached = peg$cache[key];
  53188. if (cached) {
  53189. peg$currPos = cached.nextPos;
  53190. return cached.result;
  53191. }
  53192. s0 = peg$parsejsStatement();
  53193. if (s0 === peg$FAILED) {
  53194. s0 = peg$parsestSequence();
  53195. }
  53196. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53197. return s0;
  53198. }
  53199. function peg$parsestSequence() {
  53200. var s0, s1, s2, s3, s4;
  53201. var key = peg$currPos * 60 + 42,
  53202. cached = peg$cache[key];
  53203. if (cached) {
  53204. peg$currPos = cached.nextPos;
  53205. return cached.result;
  53206. }
  53207. s0 = peg$currPos;
  53208. s1 = peg$parsetemps();
  53209. if (s1 === peg$FAILED) {
  53210. s1 = peg$c41;
  53211. }
  53212. if (s1 !== peg$FAILED) {
  53213. s2 = peg$parsews();
  53214. if (s2 !== peg$FAILED) {
  53215. s3 = peg$parsestatements();
  53216. if (s3 === peg$FAILED) {
  53217. s3 = peg$c41;
  53218. }
  53219. if (s3 !== peg$FAILED) {
  53220. s4 = peg$parsews();
  53221. if (s4 !== peg$FAILED) {
  53222. peg$reportedPos = s0;
  53223. s1 = peg$c106(s1, s3);
  53224. s0 = s1;
  53225. } else {
  53226. peg$currPos = s0;
  53227. s0 = peg$c1;
  53228. }
  53229. } else {
  53230. peg$currPos = s0;
  53231. s0 = peg$c1;
  53232. }
  53233. } else {
  53234. peg$currPos = s0;
  53235. s0 = peg$c1;
  53236. }
  53237. } else {
  53238. peg$currPos = s0;
  53239. s0 = peg$c1;
  53240. }
  53241. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53242. return s0;
  53243. }
  53244. function peg$parseblock() {
  53245. var s0, s1, s2, s3, s4, s5, s6;
  53246. var key = peg$currPos * 60 + 43,
  53247. cached = peg$cache[key];
  53248. if (cached) {
  53249. peg$currPos = cached.nextPos;
  53250. return cached.result;
  53251. }
  53252. s0 = peg$currPos;
  53253. if (input.charCodeAt(peg$currPos) === 91) {
  53254. s1 = peg$c107;
  53255. peg$currPos++;
  53256. } else {
  53257. s1 = peg$FAILED;
  53258. if (peg$silentFails === 0) { peg$fail(peg$c108); }
  53259. }
  53260. if (s1 !== peg$FAILED) {
  53261. s2 = peg$parseblockParamList();
  53262. if (s2 === peg$FAILED) {
  53263. s2 = peg$c41;
  53264. }
  53265. if (s2 !== peg$FAILED) {
  53266. s3 = peg$parsews();
  53267. if (s3 !== peg$FAILED) {
  53268. s4 = peg$parsesequence();
  53269. if (s4 === peg$FAILED) {
  53270. s4 = peg$c41;
  53271. }
  53272. if (s4 !== peg$FAILED) {
  53273. s5 = peg$parsews();
  53274. if (s5 !== peg$FAILED) {
  53275. if (input.charCodeAt(peg$currPos) === 93) {
  53276. s6 = peg$c109;
  53277. peg$currPos++;
  53278. } else {
  53279. s6 = peg$FAILED;
  53280. if (peg$silentFails === 0) { peg$fail(peg$c110); }
  53281. }
  53282. if (s6 !== peg$FAILED) {
  53283. peg$reportedPos = s0;
  53284. s1 = peg$c111(s2, s4);
  53285. s0 = s1;
  53286. } else {
  53287. peg$currPos = s0;
  53288. s0 = peg$c1;
  53289. }
  53290. } else {
  53291. peg$currPos = s0;
  53292. s0 = peg$c1;
  53293. }
  53294. } else {
  53295. peg$currPos = s0;
  53296. s0 = peg$c1;
  53297. }
  53298. } else {
  53299. peg$currPos = s0;
  53300. s0 = peg$c1;
  53301. }
  53302. } else {
  53303. peg$currPos = s0;
  53304. s0 = peg$c1;
  53305. }
  53306. } else {
  53307. peg$currPos = s0;
  53308. s0 = peg$c1;
  53309. }
  53310. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53311. return s0;
  53312. }
  53313. function peg$parseoperand() {
  53314. var s0;
  53315. var key = peg$currPos * 60 + 44,
  53316. cached = peg$cache[key];
  53317. if (cached) {
  53318. peg$currPos = cached.nextPos;
  53319. return cached.result;
  53320. }
  53321. s0 = peg$parseliteral();
  53322. if (s0 === peg$FAILED) {
  53323. s0 = peg$parsevariable();
  53324. if (s0 === peg$FAILED) {
  53325. s0 = peg$parsesubexpression();
  53326. }
  53327. }
  53328. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53329. return s0;
  53330. }
  53331. function peg$parseunaryMessage() {
  53332. var s0, s1, s2, s3, s4;
  53333. var key = peg$currPos * 60 + 45,
  53334. cached = peg$cache[key];
  53335. if (cached) {
  53336. peg$currPos = cached.nextPos;
  53337. return cached.result;
  53338. }
  53339. s0 = peg$currPos;
  53340. s1 = peg$parsews();
  53341. if (s1 !== peg$FAILED) {
  53342. s2 = peg$parseidentifier();
  53343. if (s2 !== peg$FAILED) {
  53344. s3 = peg$currPos;
  53345. peg$silentFails++;
  53346. if (input.charCodeAt(peg$currPos) === 58) {
  53347. s4 = peg$c13;
  53348. peg$currPos++;
  53349. } else {
  53350. s4 = peg$FAILED;
  53351. if (peg$silentFails === 0) { peg$fail(peg$c14); }
  53352. }
  53353. peg$silentFails--;
  53354. if (s4 === peg$FAILED) {
  53355. s3 = peg$c112;
  53356. } else {
  53357. peg$currPos = s3;
  53358. s3 = peg$c1;
  53359. }
  53360. if (s3 !== peg$FAILED) {
  53361. peg$reportedPos = s0;
  53362. s1 = peg$c113(s2);
  53363. s0 = s1;
  53364. } else {
  53365. peg$currPos = s0;
  53366. s0 = peg$c1;
  53367. }
  53368. } else {
  53369. peg$currPos = s0;
  53370. s0 = peg$c1;
  53371. }
  53372. } else {
  53373. peg$currPos = s0;
  53374. s0 = peg$c1;
  53375. }
  53376. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53377. return s0;
  53378. }
  53379. function peg$parseunaryTail() {
  53380. var s0, s1, s2, s3, s4;
  53381. var key = peg$currPos * 60 + 46,
  53382. cached = peg$cache[key];
  53383. if (cached) {
  53384. peg$currPos = cached.nextPos;
  53385. return cached.result;
  53386. }
  53387. s0 = peg$currPos;
  53388. s1 = peg$parseunaryMessage();
  53389. if (s1 !== peg$FAILED) {
  53390. s2 = peg$parsews();
  53391. if (s2 !== peg$FAILED) {
  53392. s3 = peg$parseunaryTail();
  53393. if (s3 === peg$FAILED) {
  53394. s3 = peg$c41;
  53395. }
  53396. if (s3 !== peg$FAILED) {
  53397. s4 = peg$parsews();
  53398. if (s4 !== peg$FAILED) {
  53399. peg$reportedPos = s0;
  53400. s1 = peg$c114(s1, s3);
  53401. s0 = s1;
  53402. } else {
  53403. peg$currPos = s0;
  53404. s0 = peg$c1;
  53405. }
  53406. } else {
  53407. peg$currPos = s0;
  53408. s0 = peg$c1;
  53409. }
  53410. } else {
  53411. peg$currPos = s0;
  53412. s0 = peg$c1;
  53413. }
  53414. } else {
  53415. peg$currPos = s0;
  53416. s0 = peg$c1;
  53417. }
  53418. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53419. return s0;
  53420. }
  53421. function peg$parseunarySend() {
  53422. var s0, s1, s2, s3;
  53423. var key = peg$currPos * 60 + 47,
  53424. cached = peg$cache[key];
  53425. if (cached) {
  53426. peg$currPos = cached.nextPos;
  53427. return cached.result;
  53428. }
  53429. s0 = peg$currPos;
  53430. s1 = peg$parseoperand();
  53431. if (s1 !== peg$FAILED) {
  53432. s2 = peg$parsews();
  53433. if (s2 !== peg$FAILED) {
  53434. s3 = peg$parseunaryTail();
  53435. if (s3 === peg$FAILED) {
  53436. s3 = peg$c41;
  53437. }
  53438. if (s3 !== peg$FAILED) {
  53439. peg$reportedPos = s0;
  53440. s1 = peg$c115(s1, s3);
  53441. s0 = s1;
  53442. } else {
  53443. peg$currPos = s0;
  53444. s0 = peg$c1;
  53445. }
  53446. } else {
  53447. peg$currPos = s0;
  53448. s0 = peg$c1;
  53449. }
  53450. } else {
  53451. peg$currPos = s0;
  53452. s0 = peg$c1;
  53453. }
  53454. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53455. return s0;
  53456. }
  53457. function peg$parsebinaryMessage() {
  53458. var s0, s1, s2, s3, s4;
  53459. var key = peg$currPos * 60 + 48,
  53460. cached = peg$cache[key];
  53461. if (cached) {
  53462. peg$currPos = cached.nextPos;
  53463. return cached.result;
  53464. }
  53465. s0 = peg$currPos;
  53466. s1 = peg$parsews();
  53467. if (s1 !== peg$FAILED) {
  53468. s2 = peg$parsebinarySelector();
  53469. if (s2 !== peg$FAILED) {
  53470. s3 = peg$parsews();
  53471. if (s3 !== peg$FAILED) {
  53472. s4 = peg$parseunarySend();
  53473. if (s4 === peg$FAILED) {
  53474. s4 = peg$parseoperand();
  53475. }
  53476. if (s4 !== peg$FAILED) {
  53477. peg$reportedPos = s0;
  53478. s1 = peg$c116(s2, s4);
  53479. s0 = s1;
  53480. } else {
  53481. peg$currPos = s0;
  53482. s0 = peg$c1;
  53483. }
  53484. } else {
  53485. peg$currPos = s0;
  53486. s0 = peg$c1;
  53487. }
  53488. } else {
  53489. peg$currPos = s0;
  53490. s0 = peg$c1;
  53491. }
  53492. } else {
  53493. peg$currPos = s0;
  53494. s0 = peg$c1;
  53495. }
  53496. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53497. return s0;
  53498. }
  53499. function peg$parsebinaryTail() {
  53500. var s0, s1, s2;
  53501. var key = peg$currPos * 60 + 49,
  53502. cached = peg$cache[key];
  53503. if (cached) {
  53504. peg$currPos = cached.nextPos;
  53505. return cached.result;
  53506. }
  53507. s0 = peg$currPos;
  53508. s1 = peg$parsebinaryMessage();
  53509. if (s1 !== peg$FAILED) {
  53510. s2 = peg$parsebinaryTail();
  53511. if (s2 === peg$FAILED) {
  53512. s2 = peg$c41;
  53513. }
  53514. if (s2 !== peg$FAILED) {
  53515. peg$reportedPos = s0;
  53516. s1 = peg$c117(s1, s2);
  53517. s0 = s1;
  53518. } else {
  53519. peg$currPos = s0;
  53520. s0 = peg$c1;
  53521. }
  53522. } else {
  53523. peg$currPos = s0;
  53524. s0 = peg$c1;
  53525. }
  53526. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53527. return s0;
  53528. }
  53529. function peg$parsebinarySend() {
  53530. var s0, s1, s2;
  53531. var key = peg$currPos * 60 + 50,
  53532. cached = peg$cache[key];
  53533. if (cached) {
  53534. peg$currPos = cached.nextPos;
  53535. return cached.result;
  53536. }
  53537. s0 = peg$currPos;
  53538. s1 = peg$parseunarySend();
  53539. if (s1 !== peg$FAILED) {
  53540. s2 = peg$parsebinaryTail();
  53541. if (s2 === peg$FAILED) {
  53542. s2 = peg$c41;
  53543. }
  53544. if (s2 !== peg$FAILED) {
  53545. peg$reportedPos = s0;
  53546. s1 = peg$c115(s1, s2);
  53547. s0 = s1;
  53548. } else {
  53549. peg$currPos = s0;
  53550. s0 = peg$c1;
  53551. }
  53552. } else {
  53553. peg$currPos = s0;
  53554. s0 = peg$c1;
  53555. }
  53556. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53557. return s0;
  53558. }
  53559. function peg$parsekeywordMessage() {
  53560. var s0, s1, s2;
  53561. var key = peg$currPos * 60 + 51,
  53562. cached = peg$cache[key];
  53563. if (cached) {
  53564. peg$currPos = cached.nextPos;
  53565. return cached.result;
  53566. }
  53567. s0 = peg$currPos;
  53568. s1 = [];
  53569. s2 = peg$parsekeywordPair();
  53570. if (s2 !== peg$FAILED) {
  53571. while (s2 !== peg$FAILED) {
  53572. s1.push(s2);
  53573. s2 = peg$parsekeywordPair();
  53574. }
  53575. } else {
  53576. s1 = peg$c1;
  53577. }
  53578. if (s1 !== peg$FAILED) {
  53579. peg$reportedPos = s0;
  53580. s1 = peg$c118(s1);
  53581. }
  53582. s0 = s1;
  53583. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53584. return s0;
  53585. }
  53586. function peg$parsekeywordSend() {
  53587. var s0, s1, s2;
  53588. var key = peg$currPos * 60 + 52,
  53589. cached = peg$cache[key];
  53590. if (cached) {
  53591. peg$currPos = cached.nextPos;
  53592. return cached.result;
  53593. }
  53594. s0 = peg$currPos;
  53595. s1 = peg$parsebinarySend();
  53596. if (s1 !== peg$FAILED) {
  53597. s2 = peg$parsekeywordMessage();
  53598. if (s2 !== peg$FAILED) {
  53599. peg$reportedPos = s0;
  53600. s1 = peg$c119(s1, s2);
  53601. s0 = s1;
  53602. } else {
  53603. peg$currPos = s0;
  53604. s0 = peg$c1;
  53605. }
  53606. } else {
  53607. peg$currPos = s0;
  53608. s0 = peg$c1;
  53609. }
  53610. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53611. return s0;
  53612. }
  53613. function peg$parsemessage() {
  53614. var s0;
  53615. var key = peg$currPos * 60 + 53,
  53616. cached = peg$cache[key];
  53617. if (cached) {
  53618. peg$currPos = cached.nextPos;
  53619. return cached.result;
  53620. }
  53621. s0 = peg$parsebinaryMessage();
  53622. if (s0 === peg$FAILED) {
  53623. s0 = peg$parseunaryMessage();
  53624. if (s0 === peg$FAILED) {
  53625. s0 = peg$parsekeywordMessage();
  53626. }
  53627. }
  53628. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53629. return s0;
  53630. }
  53631. function peg$parsecascade() {
  53632. var s0, s1, s2, s3, s4, s5, s6, s7, s8;
  53633. var key = peg$currPos * 60 + 54,
  53634. cached = peg$cache[key];
  53635. if (cached) {
  53636. peg$currPos = cached.nextPos;
  53637. return cached.result;
  53638. }
  53639. s0 = peg$currPos;
  53640. s1 = peg$parsews();
  53641. if (s1 !== peg$FAILED) {
  53642. s2 = peg$parsekeywordSend();
  53643. if (s2 === peg$FAILED) {
  53644. s2 = peg$parsebinarySend();
  53645. }
  53646. if (s2 !== peg$FAILED) {
  53647. s3 = [];
  53648. s4 = peg$currPos;
  53649. s5 = peg$parsews();
  53650. if (s5 !== peg$FAILED) {
  53651. if (input.charCodeAt(peg$currPos) === 59) {
  53652. s6 = peg$c120;
  53653. peg$currPos++;
  53654. } else {
  53655. s6 = peg$FAILED;
  53656. if (peg$silentFails === 0) { peg$fail(peg$c121); }
  53657. }
  53658. if (s6 !== peg$FAILED) {
  53659. s7 = peg$parsews();
  53660. if (s7 !== peg$FAILED) {
  53661. s8 = peg$parsemessage();
  53662. if (s8 !== peg$FAILED) {
  53663. peg$reportedPos = s4;
  53664. s5 = peg$c122(s8);
  53665. s4 = s5;
  53666. } else {
  53667. peg$currPos = s4;
  53668. s4 = peg$c1;
  53669. }
  53670. } else {
  53671. peg$currPos = s4;
  53672. s4 = peg$c1;
  53673. }
  53674. } else {
  53675. peg$currPos = s4;
  53676. s4 = peg$c1;
  53677. }
  53678. } else {
  53679. peg$currPos = s4;
  53680. s4 = peg$c1;
  53681. }
  53682. if (s4 !== peg$FAILED) {
  53683. while (s4 !== peg$FAILED) {
  53684. s3.push(s4);
  53685. s4 = peg$currPos;
  53686. s5 = peg$parsews();
  53687. if (s5 !== peg$FAILED) {
  53688. if (input.charCodeAt(peg$currPos) === 59) {
  53689. s6 = peg$c120;
  53690. peg$currPos++;
  53691. } else {
  53692. s6 = peg$FAILED;
  53693. if (peg$silentFails === 0) { peg$fail(peg$c121); }
  53694. }
  53695. if (s6 !== peg$FAILED) {
  53696. s7 = peg$parsews();
  53697. if (s7 !== peg$FAILED) {
  53698. s8 = peg$parsemessage();
  53699. if (s8 !== peg$FAILED) {
  53700. peg$reportedPos = s4;
  53701. s5 = peg$c122(s8);
  53702. s4 = s5;
  53703. } else {
  53704. peg$currPos = s4;
  53705. s4 = peg$c1;
  53706. }
  53707. } else {
  53708. peg$currPos = s4;
  53709. s4 = peg$c1;
  53710. }
  53711. } else {
  53712. peg$currPos = s4;
  53713. s4 = peg$c1;
  53714. }
  53715. } else {
  53716. peg$currPos = s4;
  53717. s4 = peg$c1;
  53718. }
  53719. }
  53720. } else {
  53721. s3 = peg$c1;
  53722. }
  53723. if (s3 !== peg$FAILED) {
  53724. peg$reportedPos = s0;
  53725. s1 = peg$c123(s2, s3);
  53726. s0 = s1;
  53727. } else {
  53728. peg$currPos = s0;
  53729. s0 = peg$c1;
  53730. }
  53731. } else {
  53732. peg$currPos = s0;
  53733. s0 = peg$c1;
  53734. }
  53735. } else {
  53736. peg$currPos = s0;
  53737. s0 = peg$c1;
  53738. }
  53739. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53740. return s0;
  53741. }
  53742. function peg$parsejsStatement() {
  53743. var s0, s1, s2, s3, s4;
  53744. var key = peg$currPos * 60 + 55,
  53745. cached = peg$cache[key];
  53746. if (cached) {
  53747. peg$currPos = cached.nextPos;
  53748. return cached.result;
  53749. }
  53750. s0 = peg$currPos;
  53751. if (input.charCodeAt(peg$currPos) === 60) {
  53752. s1 = peg$c124;
  53753. peg$currPos++;
  53754. } else {
  53755. s1 = peg$FAILED;
  53756. if (peg$silentFails === 0) { peg$fail(peg$c125); }
  53757. }
  53758. if (s1 !== peg$FAILED) {
  53759. s2 = [];
  53760. s3 = peg$currPos;
  53761. if (input.substr(peg$currPos, 2) === peg$c126) {
  53762. s4 = peg$c126;
  53763. peg$currPos += 2;
  53764. } else {
  53765. s4 = peg$FAILED;
  53766. if (peg$silentFails === 0) { peg$fail(peg$c127); }
  53767. }
  53768. if (s4 !== peg$FAILED) {
  53769. peg$reportedPos = s3;
  53770. s4 = peg$c128();
  53771. }
  53772. s3 = s4;
  53773. if (s3 === peg$FAILED) {
  53774. if (peg$c129.test(input.charAt(peg$currPos))) {
  53775. s3 = input.charAt(peg$currPos);
  53776. peg$currPos++;
  53777. } else {
  53778. s3 = peg$FAILED;
  53779. if (peg$silentFails === 0) { peg$fail(peg$c130); }
  53780. }
  53781. }
  53782. while (s3 !== peg$FAILED) {
  53783. s2.push(s3);
  53784. s3 = peg$currPos;
  53785. if (input.substr(peg$currPos, 2) === peg$c126) {
  53786. s4 = peg$c126;
  53787. peg$currPos += 2;
  53788. } else {
  53789. s4 = peg$FAILED;
  53790. if (peg$silentFails === 0) { peg$fail(peg$c127); }
  53791. }
  53792. if (s4 !== peg$FAILED) {
  53793. peg$reportedPos = s3;
  53794. s4 = peg$c128();
  53795. }
  53796. s3 = s4;
  53797. if (s3 === peg$FAILED) {
  53798. if (peg$c129.test(input.charAt(peg$currPos))) {
  53799. s3 = input.charAt(peg$currPos);
  53800. peg$currPos++;
  53801. } else {
  53802. s3 = peg$FAILED;
  53803. if (peg$silentFails === 0) { peg$fail(peg$c130); }
  53804. }
  53805. }
  53806. }
  53807. if (s2 !== peg$FAILED) {
  53808. if (input.charCodeAt(peg$currPos) === 62) {
  53809. s3 = peg$c131;
  53810. peg$currPos++;
  53811. } else {
  53812. s3 = peg$FAILED;
  53813. if (peg$silentFails === 0) { peg$fail(peg$c132); }
  53814. }
  53815. if (s3 !== peg$FAILED) {
  53816. peg$reportedPos = s0;
  53817. s1 = peg$c133(s2);
  53818. s0 = s1;
  53819. } else {
  53820. peg$currPos = s0;
  53821. s0 = peg$c1;
  53822. }
  53823. } else {
  53824. peg$currPos = s0;
  53825. s0 = peg$c1;
  53826. }
  53827. } else {
  53828. peg$currPos = s0;
  53829. s0 = peg$c1;
  53830. }
  53831. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53832. return s0;
  53833. }
  53834. function peg$parsemethod() {
  53835. var s0, s1, s2, s3, s4;
  53836. var key = peg$currPos * 60 + 56,
  53837. cached = peg$cache[key];
  53838. if (cached) {
  53839. peg$currPos = cached.nextPos;
  53840. return cached.result;
  53841. }
  53842. s0 = peg$currPos;
  53843. s1 = peg$parsekeywordPattern();
  53844. if (s1 === peg$FAILED) {
  53845. s1 = peg$parsebinaryPattern();
  53846. if (s1 === peg$FAILED) {
  53847. s1 = peg$parseunaryPattern();
  53848. }
  53849. }
  53850. if (s1 !== peg$FAILED) {
  53851. s2 = peg$parsews();
  53852. if (s2 !== peg$FAILED) {
  53853. s3 = peg$parsesequence();
  53854. if (s3 === peg$FAILED) {
  53855. s3 = peg$c41;
  53856. }
  53857. if (s3 !== peg$FAILED) {
  53858. s4 = peg$parsews();
  53859. if (s4 !== peg$FAILED) {
  53860. peg$reportedPos = s0;
  53861. s1 = peg$c134(s1, s3);
  53862. s0 = s1;
  53863. } else {
  53864. peg$currPos = s0;
  53865. s0 = peg$c1;
  53866. }
  53867. } else {
  53868. peg$currPos = s0;
  53869. s0 = peg$c1;
  53870. }
  53871. } else {
  53872. peg$currPos = s0;
  53873. s0 = peg$c1;
  53874. }
  53875. } else {
  53876. peg$currPos = s0;
  53877. s0 = peg$c1;
  53878. }
  53879. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53880. return s0;
  53881. }
  53882. function peg$parseassociationSend() {
  53883. var s0, s1, s2;
  53884. var key = peg$currPos * 60 + 57,
  53885. cached = peg$cache[key];
  53886. if (cached) {
  53887. peg$currPos = cached.nextPos;
  53888. return cached.result;
  53889. }
  53890. s0 = peg$currPos;
  53891. s1 = peg$parsebinarySend();
  53892. if (s1 !== peg$FAILED) {
  53893. peg$reportedPos = peg$currPos;
  53894. s2 = peg$c135(s1);
  53895. if (s2) {
  53896. s2 = peg$c112;
  53897. } else {
  53898. s2 = peg$c1;
  53899. }
  53900. if (s2 !== peg$FAILED) {
  53901. peg$reportedPos = s0;
  53902. s1 = peg$c136(s1);
  53903. s0 = s1;
  53904. } else {
  53905. peg$currPos = s0;
  53906. s0 = peg$c1;
  53907. }
  53908. } else {
  53909. peg$currPos = s0;
  53910. s0 = peg$c1;
  53911. }
  53912. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53913. return s0;
  53914. }
  53915. function peg$parseassociationList() {
  53916. var s0, s1, s2, s3, s4;
  53917. var key = peg$currPos * 60 + 58,
  53918. cached = peg$cache[key];
  53919. if (cached) {
  53920. peg$currPos = cached.nextPos;
  53921. return cached.result;
  53922. }
  53923. s0 = peg$currPos;
  53924. s1 = peg$parsews();
  53925. if (s1 !== peg$FAILED) {
  53926. if (input.charCodeAt(peg$currPos) === 46) {
  53927. s2 = peg$c51;
  53928. peg$currPos++;
  53929. } else {
  53930. s2 = peg$FAILED;
  53931. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53932. }
  53933. if (s2 !== peg$FAILED) {
  53934. s3 = peg$parsews();
  53935. if (s3 !== peg$FAILED) {
  53936. s4 = peg$parseassociationSend();
  53937. if (s4 !== peg$FAILED) {
  53938. peg$reportedPos = s0;
  53939. s1 = peg$c89(s4);
  53940. s0 = s1;
  53941. } else {
  53942. peg$currPos = s0;
  53943. s0 = peg$c1;
  53944. }
  53945. } else {
  53946. peg$currPos = s0;
  53947. s0 = peg$c1;
  53948. }
  53949. } else {
  53950. peg$currPos = s0;
  53951. s0 = peg$c1;
  53952. }
  53953. } else {
  53954. peg$currPos = s0;
  53955. s0 = peg$c1;
  53956. }
  53957. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53958. return s0;
  53959. }
  53960. function peg$parseassociations() {
  53961. var s0, s1, s2, s3;
  53962. var key = peg$currPos * 60 + 59,
  53963. cached = peg$cache[key];
  53964. if (cached) {
  53965. peg$currPos = cached.nextPos;
  53966. return cached.result;
  53967. }
  53968. s0 = peg$currPos;
  53969. s1 = peg$parseassociationSend();
  53970. if (s1 !== peg$FAILED) {
  53971. s2 = [];
  53972. s3 = peg$parseassociationList();
  53973. while (s3 !== peg$FAILED) {
  53974. s2.push(s3);
  53975. s3 = peg$parseassociationList();
  53976. }
  53977. if (s2 !== peg$FAILED) {
  53978. peg$reportedPos = s0;
  53979. s1 = peg$c137(s1, s2);
  53980. s0 = s1;
  53981. } else {
  53982. peg$currPos = s0;
  53983. s0 = peg$c1;
  53984. }
  53985. } else {
  53986. peg$currPos = s0;
  53987. s0 = peg$c1;
  53988. }
  53989. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53990. return s0;
  53991. }
  53992. peg$result = peg$startRuleFunction();
  53993. if (peg$result !== peg$FAILED && peg$currPos === input.length) {
  53994. return peg$result;
  53995. } else {
  53996. if (peg$result !== peg$FAILED && peg$currPos < input.length) {
  53997. peg$fail({ type: "end", description: "end of input" });
  53998. }
  53999. throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
  54000. }
  54001. }
  54002. return {
  54003. SyntaxError: SyntaxError,
  54004. parse: parse
  54005. };
  54006. })();
  54007. });
  54008. define("amber_core/SUnit", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Exceptions", "amber_core/Kernel-Infrastructure", "amber_core/Kernel-Classes"], function($boot){
  54009. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  54010. $core.addPackage('SUnit');
  54011. $core.packages["SUnit"].innerEval = function (expr) { return eval(expr); };
  54012. $core.packages["SUnit"].transport = {"type":"amd","amdNamespace":"amber_core"};
  54013. $core.addClass('ResultAnnouncement', $globals.Object, ['result'], 'SUnit');
  54014. //>>excludeStart("ide", pragmas.excludeIdeData);
  54015. $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.";
  54016. //>>excludeEnd("ide");
  54017. $core.addMethod(
  54018. $core.method({
  54019. selector: "result",
  54020. protocol: 'accessing',
  54021. fn: function (){
  54022. var self=this;
  54023. var $1;
  54024. $1=self["@result"];
  54025. return $1;
  54026. },
  54027. //>>excludeStart("ide", pragmas.excludeIdeData);
  54028. args: [],
  54029. source: "result\x0a\x09^ result",
  54030. referencedClasses: [],
  54031. //>>excludeEnd("ide");
  54032. messageSends: []
  54033. }),
  54034. $globals.ResultAnnouncement);
  54035. $core.addMethod(
  54036. $core.method({
  54037. selector: "result:",
  54038. protocol: 'accessing',
  54039. fn: function (aTestResult){
  54040. var self=this;
  54041. self["@result"]=aTestResult;
  54042. return self;
  54043. },
  54044. //>>excludeStart("ide", pragmas.excludeIdeData);
  54045. args: ["aTestResult"],
  54046. source: "result: aTestResult\x0a\x09result := aTestResult",
  54047. referencedClasses: [],
  54048. //>>excludeEnd("ide");
  54049. messageSends: []
  54050. }),
  54051. $globals.ResultAnnouncement);
  54052. $core.addClass('TestCase', $globals.Object, ['testSelector', 'asyncTimeout', 'context'], 'SUnit');
  54053. //>>excludeStart("ide", pragmas.excludeIdeData);
  54054. $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.";
  54055. //>>excludeEnd("ide");
  54056. $core.addMethod(
  54057. $core.method({
  54058. selector: "assert:",
  54059. protocol: 'testing',
  54060. fn: function (aBoolean){
  54061. var self=this;
  54062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54063. return $core.withContext(function($ctx1) {
  54064. //>>excludeEnd("ctx");
  54065. self._assert_description_(aBoolean,"Assertion failed");
  54066. return self;
  54067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54068. }, function($ctx1) {$ctx1.fill(self,"assert:",{aBoolean:aBoolean},$globals.TestCase)});
  54069. //>>excludeEnd("ctx");
  54070. },
  54071. //>>excludeStart("ide", pragmas.excludeIdeData);
  54072. args: ["aBoolean"],
  54073. source: "assert: aBoolean\x0a\x09self assert: aBoolean description: 'Assertion failed'",
  54074. referencedClasses: [],
  54075. //>>excludeEnd("ide");
  54076. messageSends: ["assert:description:"]
  54077. }),
  54078. $globals.TestCase);
  54079. $core.addMethod(
  54080. $core.method({
  54081. selector: "assert:description:",
  54082. protocol: 'testing',
  54083. fn: function (aBoolean,aString){
  54084. var self=this;
  54085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54086. return $core.withContext(function($ctx1) {
  54087. //>>excludeEnd("ctx");
  54088. if(!$core.assert(aBoolean)){
  54089. self._signalFailure_(aString);
  54090. };
  54091. return self;
  54092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54093. }, function($ctx1) {$ctx1.fill(self,"assert:description:",{aBoolean:aBoolean,aString:aString},$globals.TestCase)});
  54094. //>>excludeEnd("ctx");
  54095. },
  54096. //>>excludeStart("ide", pragmas.excludeIdeData);
  54097. args: ["aBoolean", "aString"],
  54098. source: "assert: aBoolean description: aString\x0a\x09aBoolean ifFalse: [ self signalFailure: aString ]",
  54099. referencedClasses: [],
  54100. //>>excludeEnd("ide");
  54101. messageSends: ["ifFalse:", "signalFailure:"]
  54102. }),
  54103. $globals.TestCase);
  54104. $core.addMethod(
  54105. $core.method({
  54106. selector: "assert:equals:",
  54107. protocol: 'testing',
  54108. fn: function (actual,expected){
  54109. var self=this;
  54110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54111. return $core.withContext(function($ctx1) {
  54112. //>>excludeEnd("ctx");
  54113. var $2,$6,$5,$4,$3,$1;
  54114. $2=$recv(actual).__eq(expected);
  54115. $6=$recv(expected)._printString();
  54116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54117. $ctx1.sendIdx["printString"]=1;
  54118. //>>excludeEnd("ctx");
  54119. $5="Expected: ".__comma($6);
  54120. $4=$recv($5).__comma(" but was: ");
  54121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54122. $ctx1.sendIdx[","]=2;
  54123. //>>excludeEnd("ctx");
  54124. $3=$recv($4).__comma($recv(actual)._printString());
  54125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54126. $ctx1.sendIdx[","]=1;
  54127. //>>excludeEnd("ctx");
  54128. $1=self._assert_description_($2,$3);
  54129. return $1;
  54130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54131. }, function($ctx1) {$ctx1.fill(self,"assert:equals:",{actual:actual,expected:expected},$globals.TestCase)});
  54132. //>>excludeEnd("ctx");
  54133. },
  54134. //>>excludeStart("ide", pragmas.excludeIdeData);
  54135. args: ["actual", "expected"],
  54136. source: "assert: actual equals: expected\x0a\x09^ self assert: (actual = expected) description: 'Expected: ', expected printString, ' but was: ', actual printString",
  54137. referencedClasses: [],
  54138. //>>excludeEnd("ide");
  54139. messageSends: ["assert:description:", "=", ",", "printString"]
  54140. }),
  54141. $globals.TestCase);
  54142. $core.addMethod(
  54143. $core.method({
  54144. selector: "async:",
  54145. protocol: 'async',
  54146. fn: function (aBlock){
  54147. var self=this;
  54148. var c;
  54149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54150. return $core.withContext(function($ctx1) {
  54151. //>>excludeEnd("ctx");
  54152. var $2,$1;
  54153. self._errorIfNotAsync_("#async");
  54154. c=self["@context"];
  54155. $1=(function(){
  54156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54157. return $core.withContext(function($ctx2) {
  54158. //>>excludeEnd("ctx");
  54159. $2=self._isAsync();
  54160. if($core.assert($2)){
  54161. return $recv(c)._execute_(aBlock);
  54162. };
  54163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54164. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54165. //>>excludeEnd("ctx");
  54166. });
  54167. return $1;
  54168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54169. }, function($ctx1) {$ctx1.fill(self,"async:",{aBlock:aBlock,c:c},$globals.TestCase)});
  54170. //>>excludeEnd("ctx");
  54171. },
  54172. //>>excludeStart("ide", pragmas.excludeIdeData);
  54173. args: ["aBlock"],
  54174. source: "async: aBlock\x0a\x09| c |\x0a\x09self errorIfNotAsync: '#async'.\x0a\x09c := context.\x0a\x09^ [ self isAsync ifTrue: [ c execute: aBlock ] ]",
  54175. referencedClasses: [],
  54176. //>>excludeEnd("ide");
  54177. messageSends: ["errorIfNotAsync:", "ifTrue:", "isAsync", "execute:"]
  54178. }),
  54179. $globals.TestCase);
  54180. $core.addMethod(
  54181. $core.method({
  54182. selector: "context:",
  54183. protocol: 'accessing',
  54184. fn: function (aRunningTestContext){
  54185. var self=this;
  54186. self["@context"]=aRunningTestContext;
  54187. return self;
  54188. },
  54189. //>>excludeStart("ide", pragmas.excludeIdeData);
  54190. args: ["aRunningTestContext"],
  54191. source: "context: aRunningTestContext\x0a\x09context := aRunningTestContext",
  54192. referencedClasses: [],
  54193. //>>excludeEnd("ide");
  54194. messageSends: []
  54195. }),
  54196. $globals.TestCase);
  54197. $core.addMethod(
  54198. $core.method({
  54199. selector: "deny:",
  54200. protocol: 'testing',
  54201. fn: function (aBoolean){
  54202. var self=this;
  54203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54204. return $core.withContext(function($ctx1) {
  54205. //>>excludeEnd("ctx");
  54206. self._assert_($recv(aBoolean)._not());
  54207. return self;
  54208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54209. }, function($ctx1) {$ctx1.fill(self,"deny:",{aBoolean:aBoolean},$globals.TestCase)});
  54210. //>>excludeEnd("ctx");
  54211. },
  54212. //>>excludeStart("ide", pragmas.excludeIdeData);
  54213. args: ["aBoolean"],
  54214. source: "deny: aBoolean\x0a\x09self assert: aBoolean not",
  54215. referencedClasses: [],
  54216. //>>excludeEnd("ide");
  54217. messageSends: ["assert:", "not"]
  54218. }),
  54219. $globals.TestCase);
  54220. $core.addMethod(
  54221. $core.method({
  54222. selector: "errorIfNotAsync:",
  54223. protocol: 'error handling',
  54224. fn: function (aString){
  54225. var self=this;
  54226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54227. return $core.withContext(function($ctx1) {
  54228. //>>excludeEnd("ctx");
  54229. var $1;
  54230. $1=self._isAsync();
  54231. if(!$core.assert($1)){
  54232. self._error_($recv(aString).__comma(" used without prior #timeout:"));
  54233. };
  54234. return self;
  54235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54236. }, function($ctx1) {$ctx1.fill(self,"errorIfNotAsync:",{aString:aString},$globals.TestCase)});
  54237. //>>excludeEnd("ctx");
  54238. },
  54239. //>>excludeStart("ide", pragmas.excludeIdeData);
  54240. args: ["aString"],
  54241. source: "errorIfNotAsync: aString\x0a\x09self isAsync ifFalse: [\x0a\x09\x09self error: aString, ' used without prior #timeout:' ]",
  54242. referencedClasses: [],
  54243. //>>excludeEnd("ide");
  54244. messageSends: ["ifFalse:", "isAsync", "error:", ","]
  54245. }),
  54246. $globals.TestCase);
  54247. $core.addMethod(
  54248. $core.method({
  54249. selector: "finished",
  54250. protocol: 'async',
  54251. fn: function (){
  54252. var self=this;
  54253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54254. return $core.withContext(function($ctx1) {
  54255. //>>excludeEnd("ctx");
  54256. self._errorIfNotAsync_("#finished");
  54257. self["@asyncTimeout"]=nil;
  54258. return self;
  54259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54260. }, function($ctx1) {$ctx1.fill(self,"finished",{},$globals.TestCase)});
  54261. //>>excludeEnd("ctx");
  54262. },
  54263. //>>excludeStart("ide", pragmas.excludeIdeData);
  54264. args: [],
  54265. source: "finished\x0a\x09self errorIfNotAsync: '#finished'.\x0a\x09asyncTimeout := nil",
  54266. referencedClasses: [],
  54267. //>>excludeEnd("ide");
  54268. messageSends: ["errorIfNotAsync:"]
  54269. }),
  54270. $globals.TestCase);
  54271. $core.addMethod(
  54272. $core.method({
  54273. selector: "isAsync",
  54274. protocol: 'testing',
  54275. fn: function (){
  54276. var self=this;
  54277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54278. return $core.withContext(function($ctx1) {
  54279. //>>excludeEnd("ctx");
  54280. var $1;
  54281. $1=$recv(self["@asyncTimeout"])._notNil();
  54282. return $1;
  54283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54284. }, function($ctx1) {$ctx1.fill(self,"isAsync",{},$globals.TestCase)});
  54285. //>>excludeEnd("ctx");
  54286. },
  54287. //>>excludeStart("ide", pragmas.excludeIdeData);
  54288. args: [],
  54289. source: "isAsync\x0a\x09^ asyncTimeout notNil",
  54290. referencedClasses: [],
  54291. //>>excludeEnd("ide");
  54292. messageSends: ["notNil"]
  54293. }),
  54294. $globals.TestCase);
  54295. $core.addMethod(
  54296. $core.method({
  54297. selector: "performTest",
  54298. protocol: 'running',
  54299. fn: function (){
  54300. var self=this;
  54301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54302. return $core.withContext(function($ctx1) {
  54303. //>>excludeEnd("ctx");
  54304. self["@asyncTimeout"]=nil;
  54305. self._perform_(self._selector());
  54306. return self;
  54307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54308. }, function($ctx1) {$ctx1.fill(self,"performTest",{},$globals.TestCase)});
  54309. //>>excludeEnd("ctx");
  54310. },
  54311. //>>excludeStart("ide", pragmas.excludeIdeData);
  54312. args: [],
  54313. source: "performTest\x0a\x09asyncTimeout := nil.\x0a\x09self perform: self selector",
  54314. referencedClasses: [],
  54315. //>>excludeEnd("ide");
  54316. messageSends: ["perform:", "selector"]
  54317. }),
  54318. $globals.TestCase);
  54319. $core.addMethod(
  54320. $core.method({
  54321. selector: "runCase",
  54322. protocol: 'running',
  54323. fn: function (){
  54324. var self=this;
  54325. function $TestContext(){return $globals.TestContext||(typeof TestContext=="undefined"?nil:TestContext)}
  54326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54327. return $core.withContext(function($ctx1) {
  54328. //>>excludeEnd("ctx");
  54329. $recv($recv($TestContext())._testCase_(self))._start();
  54330. return self;
  54331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54332. }, function($ctx1) {$ctx1.fill(self,"runCase",{},$globals.TestCase)});
  54333. //>>excludeEnd("ctx");
  54334. },
  54335. //>>excludeStart("ide", pragmas.excludeIdeData);
  54336. args: [],
  54337. source: "runCase\x0a\x09\x22Runs a test case in isolated context, leaking all errors.\x22\x0a\x0a\x09(TestContext testCase: self) start",
  54338. referencedClasses: ["TestContext"],
  54339. //>>excludeEnd("ide");
  54340. messageSends: ["start", "testCase:"]
  54341. }),
  54342. $globals.TestCase);
  54343. $core.addMethod(
  54344. $core.method({
  54345. selector: "selector",
  54346. protocol: 'accessing',
  54347. fn: function (){
  54348. var self=this;
  54349. var $1;
  54350. $1=self["@testSelector"];
  54351. return $1;
  54352. },
  54353. //>>excludeStart("ide", pragmas.excludeIdeData);
  54354. args: [],
  54355. source: "selector\x0a\x09^ testSelector",
  54356. referencedClasses: [],
  54357. //>>excludeEnd("ide");
  54358. messageSends: []
  54359. }),
  54360. $globals.TestCase);
  54361. $core.addMethod(
  54362. $core.method({
  54363. selector: "setTestSelector:",
  54364. protocol: 'accessing',
  54365. fn: function (aSelector){
  54366. var self=this;
  54367. self["@testSelector"]=aSelector;
  54368. return self;
  54369. },
  54370. //>>excludeStart("ide", pragmas.excludeIdeData);
  54371. args: ["aSelector"],
  54372. source: "setTestSelector: aSelector\x0a\x09testSelector := aSelector",
  54373. referencedClasses: [],
  54374. //>>excludeEnd("ide");
  54375. messageSends: []
  54376. }),
  54377. $globals.TestCase);
  54378. $core.addMethod(
  54379. $core.method({
  54380. selector: "setUp",
  54381. protocol: 'running',
  54382. fn: function (){
  54383. var self=this;
  54384. return self;
  54385. },
  54386. //>>excludeStart("ide", pragmas.excludeIdeData);
  54387. args: [],
  54388. source: "setUp",
  54389. referencedClasses: [],
  54390. //>>excludeEnd("ide");
  54391. messageSends: []
  54392. }),
  54393. $globals.TestCase);
  54394. $core.addMethod(
  54395. $core.method({
  54396. selector: "should:",
  54397. protocol: 'testing',
  54398. fn: function (aBlock){
  54399. var self=this;
  54400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54401. return $core.withContext(function($ctx1) {
  54402. //>>excludeEnd("ctx");
  54403. self._assert_($recv(aBlock)._value());
  54404. return self;
  54405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54406. }, function($ctx1) {$ctx1.fill(self,"should:",{aBlock:aBlock},$globals.TestCase)});
  54407. //>>excludeEnd("ctx");
  54408. },
  54409. //>>excludeStart("ide", pragmas.excludeIdeData);
  54410. args: ["aBlock"],
  54411. source: "should: aBlock\x0a\x09self assert: aBlock value",
  54412. referencedClasses: [],
  54413. //>>excludeEnd("ide");
  54414. messageSends: ["assert:", "value"]
  54415. }),
  54416. $globals.TestCase);
  54417. $core.addMethod(
  54418. $core.method({
  54419. selector: "should:raise:",
  54420. protocol: 'testing',
  54421. fn: function (aBlock,anExceptionClass){
  54422. var self=this;
  54423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54424. return $core.withContext(function($ctx1) {
  54425. //>>excludeEnd("ctx");
  54426. self._assert_($recv((function(){
  54427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54428. return $core.withContext(function($ctx2) {
  54429. //>>excludeEnd("ctx");
  54430. $recv(aBlock)._value();
  54431. return false;
  54432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54433. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54434. //>>excludeEnd("ctx");
  54435. }))._on_do_(anExceptionClass,(function(ex){
  54436. return true;
  54437. })));
  54438. return self;
  54439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54440. }, function($ctx1) {$ctx1.fill(self,"should:raise:",{aBlock:aBlock,anExceptionClass:anExceptionClass},$globals.TestCase)});
  54441. //>>excludeEnd("ctx");
  54442. },
  54443. //>>excludeStart("ide", pragmas.excludeIdeData);
  54444. args: ["aBlock", "anExceptionClass"],
  54445. source: "should: aBlock raise: anExceptionClass\x0a\x09self assert: ([ aBlock value. false ]\x0a\x09\x09on: anExceptionClass\x0a\x09\x09do: [ :ex | true ])",
  54446. referencedClasses: [],
  54447. //>>excludeEnd("ide");
  54448. messageSends: ["assert:", "on:do:", "value"]
  54449. }),
  54450. $globals.TestCase);
  54451. $core.addMethod(
  54452. $core.method({
  54453. selector: "shouldnt:raise:",
  54454. protocol: 'testing',
  54455. fn: function (aBlock,anExceptionClass){
  54456. var self=this;
  54457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54458. return $core.withContext(function($ctx1) {
  54459. //>>excludeEnd("ctx");
  54460. self._assert_($recv((function(){
  54461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54462. return $core.withContext(function($ctx2) {
  54463. //>>excludeEnd("ctx");
  54464. $recv(aBlock)._value();
  54465. return true;
  54466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54467. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54468. //>>excludeEnd("ctx");
  54469. }))._on_do_(anExceptionClass,(function(ex){
  54470. return false;
  54471. })));
  54472. return self;
  54473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54474. }, function($ctx1) {$ctx1.fill(self,"shouldnt:raise:",{aBlock:aBlock,anExceptionClass:anExceptionClass},$globals.TestCase)});
  54475. //>>excludeEnd("ctx");
  54476. },
  54477. //>>excludeStart("ide", pragmas.excludeIdeData);
  54478. args: ["aBlock", "anExceptionClass"],
  54479. source: "shouldnt: aBlock raise: anExceptionClass\x0a\x09self assert: ([ aBlock value. true ]\x0a\x09\x09on: anExceptionClass\x0a\x09\x09do: [ :ex | false ])",
  54480. referencedClasses: [],
  54481. //>>excludeEnd("ide");
  54482. messageSends: ["assert:", "on:do:", "value"]
  54483. }),
  54484. $globals.TestCase);
  54485. $core.addMethod(
  54486. $core.method({
  54487. selector: "signalFailure:",
  54488. protocol: 'private',
  54489. fn: function (aString){
  54490. var self=this;
  54491. function $TestFailure(){return $globals.TestFailure||(typeof TestFailure=="undefined"?nil:TestFailure)}
  54492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54493. return $core.withContext(function($ctx1) {
  54494. //>>excludeEnd("ctx");
  54495. var $1,$2;
  54496. $1=$recv($TestFailure())._new();
  54497. $recv($1)._messageText_(aString);
  54498. $2=$recv($1)._signal();
  54499. return self;
  54500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54501. }, function($ctx1) {$ctx1.fill(self,"signalFailure:",{aString:aString},$globals.TestCase)});
  54502. //>>excludeEnd("ctx");
  54503. },
  54504. //>>excludeStart("ide", pragmas.excludeIdeData);
  54505. args: ["aString"],
  54506. source: "signalFailure: aString\x0a\x09TestFailure new\x0a\x09\x09messageText: aString;\x0a\x09\x09signal",
  54507. referencedClasses: ["TestFailure"],
  54508. //>>excludeEnd("ide");
  54509. messageSends: ["messageText:", "new", "signal"]
  54510. }),
  54511. $globals.TestCase);
  54512. $core.addMethod(
  54513. $core.method({
  54514. selector: "tearDown",
  54515. protocol: 'running',
  54516. fn: function (){
  54517. var self=this;
  54518. return self;
  54519. },
  54520. //>>excludeStart("ide", pragmas.excludeIdeData);
  54521. args: [],
  54522. source: "tearDown",
  54523. referencedClasses: [],
  54524. //>>excludeEnd("ide");
  54525. messageSends: []
  54526. }),
  54527. $globals.TestCase);
  54528. $core.addMethod(
  54529. $core.method({
  54530. selector: "timeout:",
  54531. protocol: 'async',
  54532. fn: function (aNumber){
  54533. var self=this;
  54534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54535. return $core.withContext(function($ctx1) {
  54536. //>>excludeEnd("ctx");
  54537. var $1,$receiver;
  54538. $1=self["@asyncTimeout"];
  54539. if(($receiver = $1) == null || $receiver.isNil){
  54540. $1;
  54541. } else {
  54542. $recv(self["@asyncTimeout"])._clearTimeout();
  54543. };
  54544. self["@asyncTimeout"]=(0);
  54545. self["@asyncTimeout"]=$recv(self._async_((function(){
  54546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54547. return $core.withContext(function($ctx2) {
  54548. //>>excludeEnd("ctx");
  54549. return self._assert_description_(false,"SUnit grace time exhausted");
  54550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54551. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  54552. //>>excludeEnd("ctx");
  54553. })))._valueWithTimeout_(aNumber);
  54554. return self;
  54555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54556. }, function($ctx1) {$ctx1.fill(self,"timeout:",{aNumber:aNumber},$globals.TestCase)});
  54557. //>>excludeEnd("ctx");
  54558. },
  54559. //>>excludeStart("ide", pragmas.excludeIdeData);
  54560. args: ["aNumber"],
  54561. 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",
  54562. referencedClasses: [],
  54563. //>>excludeEnd("ide");
  54564. messageSends: ["ifNotNil:", "clearTimeout", "valueWithTimeout:", "async:", "assert:description:"]
  54565. }),
  54566. $globals.TestCase);
  54567. $core.addMethod(
  54568. $core.method({
  54569. selector: "allTestSelectors",
  54570. protocol: 'accessing',
  54571. fn: function (){
  54572. var self=this;
  54573. var selectors;
  54574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54575. return $core.withContext(function($ctx1) {
  54576. //>>excludeEnd("ctx");
  54577. var $1,$2;
  54578. selectors=self._testSelectors();
  54579. $1=self._shouldInheritSelectors();
  54580. if($core.assert($1)){
  54581. $recv(selectors)._addAll_($recv(self._superclass())._allTestSelectors());
  54582. };
  54583. $2=selectors;
  54584. return $2;
  54585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54586. }, function($ctx1) {$ctx1.fill(self,"allTestSelectors",{selectors:selectors},$globals.TestCase.klass)});
  54587. //>>excludeEnd("ctx");
  54588. },
  54589. //>>excludeStart("ide", pragmas.excludeIdeData);
  54590. args: [],
  54591. source: "allTestSelectors\x0a\x09| selectors |\x0a\x09selectors := self testSelectors.\x0a\x09self shouldInheritSelectors ifTrue: [\x0a\x09\x09selectors addAll: self superclass allTestSelectors ].\x0a\x09^ selectors",
  54592. referencedClasses: [],
  54593. //>>excludeEnd("ide");
  54594. messageSends: ["testSelectors", "ifTrue:", "shouldInheritSelectors", "addAll:", "allTestSelectors", "superclass"]
  54595. }),
  54596. $globals.TestCase.klass);
  54597. $core.addMethod(
  54598. $core.method({
  54599. selector: "buildSuite",
  54600. protocol: 'accessing',
  54601. fn: function (){
  54602. var self=this;
  54603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54604. return $core.withContext(function($ctx1) {
  54605. //>>excludeEnd("ctx");
  54606. var $1;
  54607. $1=$recv(self._allTestSelectors())._collect_((function(each){
  54608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54609. return $core.withContext(function($ctx2) {
  54610. //>>excludeEnd("ctx");
  54611. return self._selector_(each);
  54612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54613. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  54614. //>>excludeEnd("ctx");
  54615. }));
  54616. return $1;
  54617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54618. }, function($ctx1) {$ctx1.fill(self,"buildSuite",{},$globals.TestCase.klass)});
  54619. //>>excludeEnd("ctx");
  54620. },
  54621. //>>excludeStart("ide", pragmas.excludeIdeData);
  54622. args: [],
  54623. source: "buildSuite\x0a\x09^ self allTestSelectors collect: [ :each | self selector: each ]",
  54624. referencedClasses: [],
  54625. //>>excludeEnd("ide");
  54626. messageSends: ["collect:", "allTestSelectors", "selector:"]
  54627. }),
  54628. $globals.TestCase.klass);
  54629. $core.addMethod(
  54630. $core.method({
  54631. selector: "classTag",
  54632. protocol: 'accessing',
  54633. fn: function (){
  54634. var self=this;
  54635. return "test";
  54636. },
  54637. //>>excludeStart("ide", pragmas.excludeIdeData);
  54638. args: [],
  54639. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'test'",
  54640. referencedClasses: [],
  54641. //>>excludeEnd("ide");
  54642. messageSends: []
  54643. }),
  54644. $globals.TestCase.klass);
  54645. $core.addMethod(
  54646. $core.method({
  54647. selector: "isAbstract",
  54648. protocol: 'testing',
  54649. fn: function (){
  54650. var self=this;
  54651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54652. return $core.withContext(function($ctx1) {
  54653. //>>excludeEnd("ctx");
  54654. var $1;
  54655. $1=$recv(self._name()).__eq("TestCase");
  54656. return $1;
  54657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54658. }, function($ctx1) {$ctx1.fill(self,"isAbstract",{},$globals.TestCase.klass)});
  54659. //>>excludeEnd("ctx");
  54660. },
  54661. //>>excludeStart("ide", pragmas.excludeIdeData);
  54662. args: [],
  54663. source: "isAbstract\x0a\x09^ self name = 'TestCase'",
  54664. referencedClasses: [],
  54665. //>>excludeEnd("ide");
  54666. messageSends: ["=", "name"]
  54667. }),
  54668. $globals.TestCase.klass);
  54669. $core.addMethod(
  54670. $core.method({
  54671. selector: "lookupHierarchyRoot",
  54672. protocol: 'accessing',
  54673. fn: function (){
  54674. var self=this;
  54675. function $TestCase(){return $globals.TestCase||(typeof TestCase=="undefined"?nil:TestCase)}
  54676. return $TestCase();
  54677. },
  54678. //>>excludeStart("ide", pragmas.excludeIdeData);
  54679. args: [],
  54680. source: "lookupHierarchyRoot\x0a\x09^ TestCase",
  54681. referencedClasses: ["TestCase"],
  54682. //>>excludeEnd("ide");
  54683. messageSends: []
  54684. }),
  54685. $globals.TestCase.klass);
  54686. $core.addMethod(
  54687. $core.method({
  54688. selector: "selector:",
  54689. protocol: 'accessing',
  54690. fn: function (aSelector){
  54691. var self=this;
  54692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54693. return $core.withContext(function($ctx1) {
  54694. //>>excludeEnd("ctx");
  54695. var $2,$3,$1;
  54696. $2=self._new();
  54697. $recv($2)._setTestSelector_(aSelector);
  54698. $3=$recv($2)._yourself();
  54699. $1=$3;
  54700. return $1;
  54701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54702. }, function($ctx1) {$ctx1.fill(self,"selector:",{aSelector:aSelector},$globals.TestCase.klass)});
  54703. //>>excludeEnd("ctx");
  54704. },
  54705. //>>excludeStart("ide", pragmas.excludeIdeData);
  54706. args: ["aSelector"],
  54707. source: "selector: aSelector\x0a\x09^ self new\x0a\x09\x09setTestSelector: aSelector;\x0a\x09\x09yourself",
  54708. referencedClasses: [],
  54709. //>>excludeEnd("ide");
  54710. messageSends: ["setTestSelector:", "new", "yourself"]
  54711. }),
  54712. $globals.TestCase.klass);
  54713. $core.addMethod(
  54714. $core.method({
  54715. selector: "shouldInheritSelectors",
  54716. protocol: 'testing',
  54717. fn: function (){
  54718. var self=this;
  54719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54720. return $core.withContext(function($ctx1) {
  54721. //>>excludeEnd("ctx");
  54722. var $1;
  54723. $1=self.__tild_eq(self._lookupHierarchyRoot());
  54724. return $1;
  54725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54726. }, function($ctx1) {$ctx1.fill(self,"shouldInheritSelectors",{},$globals.TestCase.klass)});
  54727. //>>excludeEnd("ctx");
  54728. },
  54729. //>>excludeStart("ide", pragmas.excludeIdeData);
  54730. args: [],
  54731. source: "shouldInheritSelectors\x0a\x09^ self ~= self lookupHierarchyRoot",
  54732. referencedClasses: [],
  54733. //>>excludeEnd("ide");
  54734. messageSends: ["~=", "lookupHierarchyRoot"]
  54735. }),
  54736. $globals.TestCase.klass);
  54737. $core.addMethod(
  54738. $core.method({
  54739. selector: "testSelectors",
  54740. protocol: 'accessing',
  54741. fn: function (){
  54742. var self=this;
  54743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54744. return $core.withContext(function($ctx1) {
  54745. //>>excludeEnd("ctx");
  54746. var $1;
  54747. $1=$recv($recv(self._methodDictionary())._keys())._select_((function(each){
  54748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54749. return $core.withContext(function($ctx2) {
  54750. //>>excludeEnd("ctx");
  54751. return $recv(each)._match_("^test");
  54752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54753. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  54754. //>>excludeEnd("ctx");
  54755. }));
  54756. return $1;
  54757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54758. }, function($ctx1) {$ctx1.fill(self,"testSelectors",{},$globals.TestCase.klass)});
  54759. //>>excludeEnd("ctx");
  54760. },
  54761. //>>excludeStart("ide", pragmas.excludeIdeData);
  54762. args: [],
  54763. source: "testSelectors\x0a\x09^ self methodDictionary keys select: [ :each | each match: '^test' ]",
  54764. referencedClasses: [],
  54765. //>>excludeEnd("ide");
  54766. messageSends: ["select:", "keys", "methodDictionary", "match:"]
  54767. }),
  54768. $globals.TestCase.klass);
  54769. $core.addClass('TestContext', $globals.Object, ['testCase'], 'SUnit');
  54770. //>>excludeStart("ide", pragmas.excludeIdeData);
  54771. $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).";
  54772. //>>excludeEnd("ide");
  54773. $core.addMethod(
  54774. $core.method({
  54775. selector: "execute:",
  54776. protocol: 'running',
  54777. fn: function (aBlock){
  54778. var self=this;
  54779. var failed;
  54780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54781. return $core.withContext(function($ctx1) {
  54782. //>>excludeEnd("ctx");
  54783. var $1,$2;
  54784. $recv(self["@testCase"])._context_(self);
  54785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54786. $ctx1.sendIdx["context:"]=1;
  54787. //>>excludeEnd("ctx");
  54788. $recv((function(){
  54789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54790. return $core.withContext(function($ctx2) {
  54791. //>>excludeEnd("ctx");
  54792. failed=true;
  54793. failed;
  54794. $recv(aBlock)._value();
  54795. failed=false;
  54796. return failed;
  54797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54798. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54799. //>>excludeEnd("ctx");
  54800. }))._ensure_((function(){
  54801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54802. return $core.withContext(function($ctx2) {
  54803. //>>excludeEnd("ctx");
  54804. $recv(self["@testCase"])._context_(nil);
  54805. $1=$recv(failed)._and_((function(){
  54806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54807. return $core.withContext(function($ctx3) {
  54808. //>>excludeEnd("ctx");
  54809. return $recv(self["@testCase"])._isAsync();
  54810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54811. $ctx3.sendIdx["isAsync"]=1;
  54812. //>>excludeEnd("ctx");
  54813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54814. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  54815. //>>excludeEnd("ctx");
  54816. }));
  54817. if($core.assert($1)){
  54818. $recv(self["@testCase"])._finished();
  54819. };
  54820. $2=$recv(self["@testCase"])._isAsync();
  54821. if(!$core.assert($2)){
  54822. return $recv(self["@testCase"])._tearDown();
  54823. };
  54824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54825. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  54826. //>>excludeEnd("ctx");
  54827. }));
  54828. return self;
  54829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54830. }, function($ctx1) {$ctx1.fill(self,"execute:",{aBlock:aBlock,failed:failed},$globals.TestContext)});
  54831. //>>excludeEnd("ctx");
  54832. },
  54833. //>>excludeStart("ide", pragmas.excludeIdeData);
  54834. args: ["aBlock"],
  54835. 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 ] ]",
  54836. referencedClasses: [],
  54837. //>>excludeEnd("ide");
  54838. messageSends: ["context:", "ensure:", "value", "ifTrue:", "and:", "isAsync", "finished", "ifFalse:", "tearDown"]
  54839. }),
  54840. $globals.TestContext);
  54841. $core.addMethod(
  54842. $core.method({
  54843. selector: "start",
  54844. protocol: 'running',
  54845. fn: function (){
  54846. var self=this;
  54847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54848. return $core.withContext(function($ctx1) {
  54849. //>>excludeEnd("ctx");
  54850. self._execute_((function(){
  54851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54852. return $core.withContext(function($ctx2) {
  54853. //>>excludeEnd("ctx");
  54854. $recv(self["@testCase"])._setUp();
  54855. return $recv(self["@testCase"])._performTest();
  54856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54857. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54858. //>>excludeEnd("ctx");
  54859. }));
  54860. return self;
  54861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54862. }, function($ctx1) {$ctx1.fill(self,"start",{},$globals.TestContext)});
  54863. //>>excludeEnd("ctx");
  54864. },
  54865. //>>excludeStart("ide", pragmas.excludeIdeData);
  54866. args: [],
  54867. source: "start\x0a\x09self execute: [\x0a\x09\x09testCase setUp.\x0a\x09\x09testCase performTest ]",
  54868. referencedClasses: [],
  54869. //>>excludeEnd("ide");
  54870. messageSends: ["execute:", "setUp", "performTest"]
  54871. }),
  54872. $globals.TestContext);
  54873. $core.addMethod(
  54874. $core.method({
  54875. selector: "testCase:",
  54876. protocol: 'accessing',
  54877. fn: function (aTestCase){
  54878. var self=this;
  54879. self["@testCase"]=aTestCase;
  54880. return self;
  54881. },
  54882. //>>excludeStart("ide", pragmas.excludeIdeData);
  54883. args: ["aTestCase"],
  54884. source: "testCase: aTestCase\x0a\x09testCase := aTestCase",
  54885. referencedClasses: [],
  54886. //>>excludeEnd("ide");
  54887. messageSends: []
  54888. }),
  54889. $globals.TestContext);
  54890. $core.addMethod(
  54891. $core.method({
  54892. selector: "testCase:",
  54893. protocol: 'instance creation',
  54894. fn: function (aTestCase){
  54895. var self=this;
  54896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54897. return $core.withContext(function($ctx1) {
  54898. //>>excludeEnd("ctx");
  54899. var $2,$3,$1;
  54900. $2=self._new();
  54901. $recv($2)._testCase_(aTestCase);
  54902. $3=$recv($2)._yourself();
  54903. $1=$3;
  54904. return $1;
  54905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54906. }, function($ctx1) {$ctx1.fill(self,"testCase:",{aTestCase:aTestCase},$globals.TestContext.klass)});
  54907. //>>excludeEnd("ctx");
  54908. },
  54909. //>>excludeStart("ide", pragmas.excludeIdeData);
  54910. args: ["aTestCase"],
  54911. source: "testCase: aTestCase\x0a\x09^ self new\x0a\x09\x09testCase: aTestCase;\x0a\x09\x09yourself",
  54912. referencedClasses: [],
  54913. //>>excludeEnd("ide");
  54914. messageSends: ["testCase:", "new", "yourself"]
  54915. }),
  54916. $globals.TestContext.klass);
  54917. $core.addClass('ReportingTestContext', $globals.TestContext, ['finished', 'result'], 'SUnit');
  54918. //>>excludeStart("ide", pragmas.excludeIdeData);
  54919. $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`.";
  54920. //>>excludeEnd("ide");
  54921. $core.addMethod(
  54922. $core.method({
  54923. selector: "execute:",
  54924. protocol: 'running',
  54925. fn: function (aBlock){
  54926. var self=this;
  54927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54928. return $core.withContext(function($ctx1) {
  54929. //>>excludeEnd("ctx");
  54930. var $1;
  54931. $recv((function(){
  54932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54933. return $core.withContext(function($ctx2) {
  54934. //>>excludeEnd("ctx");
  54935. return self._withErrorReporting_((function(){
  54936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54937. return $core.withContext(function($ctx3) {
  54938. //>>excludeEnd("ctx");
  54939. return (
  54940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54941. $ctx3.supercall = true,
  54942. //>>excludeEnd("ctx");
  54943. $globals.ReportingTestContext.superclass.fn.prototype._execute_.apply($recv(self), [aBlock]));
  54944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54945. $ctx3.supercall = false;
  54946. //>>excludeEnd("ctx");;
  54947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54948. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  54949. //>>excludeEnd("ctx");
  54950. }));
  54951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54952. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54953. //>>excludeEnd("ctx");
  54954. }))._ensure_((function(){
  54955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54956. return $core.withContext(function($ctx2) {
  54957. //>>excludeEnd("ctx");
  54958. $1=$recv(self["@testCase"])._isAsync();
  54959. if(!$core.assert($1)){
  54960. $recv(self["@result"])._increaseRuns();
  54961. return $recv(self["@finished"])._value();
  54962. };
  54963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54964. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  54965. //>>excludeEnd("ctx");
  54966. }));
  54967. return self;
  54968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54969. }, function($ctx1) {$ctx1.fill(self,"execute:",{aBlock:aBlock},$globals.ReportingTestContext)});
  54970. //>>excludeEnd("ctx");
  54971. },
  54972. //>>excludeStart("ide", pragmas.excludeIdeData);
  54973. args: ["aBlock"],
  54974. 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 ] ]",
  54975. referencedClasses: [],
  54976. //>>excludeEnd("ide");
  54977. messageSends: ["ensure:", "withErrorReporting:", "execute:", "ifFalse:", "isAsync", "increaseRuns", "value"]
  54978. }),
  54979. $globals.ReportingTestContext);
  54980. $core.addMethod(
  54981. $core.method({
  54982. selector: "finished:",
  54983. protocol: 'accessing',
  54984. fn: function (aBlock){
  54985. var self=this;
  54986. self["@finished"]=aBlock;
  54987. return self;
  54988. },
  54989. //>>excludeStart("ide", pragmas.excludeIdeData);
  54990. args: ["aBlock"],
  54991. source: "finished: aBlock\x0a\x09finished := aBlock",
  54992. referencedClasses: [],
  54993. //>>excludeEnd("ide");
  54994. messageSends: []
  54995. }),
  54996. $globals.ReportingTestContext);
  54997. $core.addMethod(
  54998. $core.method({
  54999. selector: "result:",
  55000. protocol: 'accessing',
  55001. fn: function (aTestResult){
  55002. var self=this;
  55003. self["@result"]=aTestResult;
  55004. return self;
  55005. },
  55006. //>>excludeStart("ide", pragmas.excludeIdeData);
  55007. args: ["aTestResult"],
  55008. source: "result: aTestResult\x0a\x09result := aTestResult",
  55009. referencedClasses: [],
  55010. //>>excludeEnd("ide");
  55011. messageSends: []
  55012. }),
  55013. $globals.ReportingTestContext);
  55014. $core.addMethod(
  55015. $core.method({
  55016. selector: "withErrorReporting:",
  55017. protocol: 'private',
  55018. fn: function (aBlock){
  55019. var self=this;
  55020. function $TestFailure(){return $globals.TestFailure||(typeof TestFailure=="undefined"?nil:TestFailure)}
  55021. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  55022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55023. return $core.withContext(function($ctx1) {
  55024. //>>excludeEnd("ctx");
  55025. $recv((function(){
  55026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55027. return $core.withContext(function($ctx2) {
  55028. //>>excludeEnd("ctx");
  55029. return $recv(aBlock)._on_do_($TestFailure(),(function(ex){
  55030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55031. return $core.withContext(function($ctx3) {
  55032. //>>excludeEnd("ctx");
  55033. return $recv(self["@result"])._addFailure_(self["@testCase"]);
  55034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55035. }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,2)});
  55036. //>>excludeEnd("ctx");
  55037. }));
  55038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55039. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  55040. //>>excludeEnd("ctx");
  55041. }))._on_do_($Error(),(function(ex){
  55042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55043. return $core.withContext(function($ctx2) {
  55044. //>>excludeEnd("ctx");
  55045. return $recv(self["@result"])._addError_(self["@testCase"]);
  55046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55047. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,3)});
  55048. //>>excludeEnd("ctx");
  55049. }));
  55050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55051. $ctx1.sendIdx["on:do:"]=1;
  55052. //>>excludeEnd("ctx");
  55053. return self;
  55054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55055. }, function($ctx1) {$ctx1.fill(self,"withErrorReporting:",{aBlock:aBlock},$globals.ReportingTestContext)});
  55056. //>>excludeEnd("ctx");
  55057. },
  55058. //>>excludeStart("ide", pragmas.excludeIdeData);
  55059. args: ["aBlock"],
  55060. 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 ]",
  55061. referencedClasses: ["TestFailure", "Error"],
  55062. //>>excludeEnd("ide");
  55063. messageSends: ["on:do:", "addFailure:", "addError:"]
  55064. }),
  55065. $globals.ReportingTestContext);
  55066. $core.addMethod(
  55067. $core.method({
  55068. selector: "testCase:result:finished:",
  55069. protocol: 'instance creation',
  55070. fn: function (aTestCase,aTestResult,aBlock){
  55071. var self=this;
  55072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55073. return $core.withContext(function($ctx1) {
  55074. //>>excludeEnd("ctx");
  55075. var $2,$3,$1;
  55076. $2=(
  55077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55078. $ctx1.supercall = true,
  55079. //>>excludeEnd("ctx");
  55080. $globals.ReportingTestContext.klass.superclass.fn.prototype._testCase_.apply($recv(self), [aTestCase]));
  55081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55082. $ctx1.supercall = false;
  55083. //>>excludeEnd("ctx");;
  55084. $recv($2)._result_(aTestResult);
  55085. $recv($2)._finished_(aBlock);
  55086. $3=$recv($2)._yourself();
  55087. $1=$3;
  55088. return $1;
  55089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55090. }, function($ctx1) {$ctx1.fill(self,"testCase:result:finished:",{aTestCase:aTestCase,aTestResult:aTestResult,aBlock:aBlock},$globals.ReportingTestContext.klass)});
  55091. //>>excludeEnd("ctx");
  55092. },
  55093. //>>excludeStart("ide", pragmas.excludeIdeData);
  55094. args: ["aTestCase", "aTestResult", "aBlock"],
  55095. source: "testCase: aTestCase result: aTestResult finished: aBlock\x0a\x09^ (super testCase: aTestCase)\x0a\x09\x09result: aTestResult;\x0a\x09\x09finished: aBlock;\x0a\x09\x09yourself",
  55096. referencedClasses: [],
  55097. //>>excludeEnd("ide");
  55098. messageSends: ["result:", "testCase:", "finished:", "yourself"]
  55099. }),
  55100. $globals.ReportingTestContext.klass);
  55101. $core.addClass('TestFailure', $globals.Error, [], 'SUnit');
  55102. //>>excludeStart("ide", pragmas.excludeIdeData);
  55103. $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.";
  55104. //>>excludeEnd("ide");
  55105. $core.addClass('TestResult', $globals.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
  55106. //>>excludeStart("ide", pragmas.excludeIdeData);
  55107. $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";
  55108. //>>excludeEnd("ide");
  55109. $core.addMethod(
  55110. $core.method({
  55111. selector: "addError:",
  55112. protocol: 'accessing',
  55113. fn: function (anError){
  55114. var self=this;
  55115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55116. return $core.withContext(function($ctx1) {
  55117. //>>excludeEnd("ctx");
  55118. $recv(self._errors())._add_(anError);
  55119. return self;
  55120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55121. }, function($ctx1) {$ctx1.fill(self,"addError:",{anError:anError},$globals.TestResult)});
  55122. //>>excludeEnd("ctx");
  55123. },
  55124. //>>excludeStart("ide", pragmas.excludeIdeData);
  55125. args: ["anError"],
  55126. source: "addError: anError\x0a\x09self errors add: anError",
  55127. referencedClasses: [],
  55128. //>>excludeEnd("ide");
  55129. messageSends: ["add:", "errors"]
  55130. }),
  55131. $globals.TestResult);
  55132. $core.addMethod(
  55133. $core.method({
  55134. selector: "addFailure:",
  55135. protocol: 'accessing',
  55136. fn: function (aFailure){
  55137. var self=this;
  55138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55139. return $core.withContext(function($ctx1) {
  55140. //>>excludeEnd("ctx");
  55141. $recv(self._failures())._add_(aFailure);
  55142. return self;
  55143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55144. }, function($ctx1) {$ctx1.fill(self,"addFailure:",{aFailure:aFailure},$globals.TestResult)});
  55145. //>>excludeEnd("ctx");
  55146. },
  55147. //>>excludeStart("ide", pragmas.excludeIdeData);
  55148. args: ["aFailure"],
  55149. source: "addFailure: aFailure\x0a\x09self failures add: aFailure",
  55150. referencedClasses: [],
  55151. //>>excludeEnd("ide");
  55152. messageSends: ["add:", "failures"]
  55153. }),
  55154. $globals.TestResult);
  55155. $core.addMethod(
  55156. $core.method({
  55157. selector: "errors",
  55158. protocol: 'accessing',
  55159. fn: function (){
  55160. var self=this;
  55161. var $1;
  55162. $1=self["@errors"];
  55163. return $1;
  55164. },
  55165. //>>excludeStart("ide", pragmas.excludeIdeData);
  55166. args: [],
  55167. source: "errors\x0a\x09^ errors",
  55168. referencedClasses: [],
  55169. //>>excludeEnd("ide");
  55170. messageSends: []
  55171. }),
  55172. $globals.TestResult);
  55173. $core.addMethod(
  55174. $core.method({
  55175. selector: "failures",
  55176. protocol: 'accessing',
  55177. fn: function (){
  55178. var self=this;
  55179. var $1;
  55180. $1=self["@failures"];
  55181. return $1;
  55182. },
  55183. //>>excludeStart("ide", pragmas.excludeIdeData);
  55184. args: [],
  55185. source: "failures\x0a\x09^ failures",
  55186. referencedClasses: [],
  55187. //>>excludeEnd("ide");
  55188. messageSends: []
  55189. }),
  55190. $globals.TestResult);
  55191. $core.addMethod(
  55192. $core.method({
  55193. selector: "increaseRuns",
  55194. protocol: 'accessing',
  55195. fn: function (){
  55196. var self=this;
  55197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55198. return $core.withContext(function($ctx1) {
  55199. //>>excludeEnd("ctx");
  55200. self["@runs"]=$recv(self["@runs"]).__plus((1));
  55201. return self;
  55202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55203. }, function($ctx1) {$ctx1.fill(self,"increaseRuns",{},$globals.TestResult)});
  55204. //>>excludeEnd("ctx");
  55205. },
  55206. //>>excludeStart("ide", pragmas.excludeIdeData);
  55207. args: [],
  55208. source: "increaseRuns\x0a\x09runs := runs + 1",
  55209. referencedClasses: [],
  55210. //>>excludeEnd("ide");
  55211. messageSends: ["+"]
  55212. }),
  55213. $globals.TestResult);
  55214. $core.addMethod(
  55215. $core.method({
  55216. selector: "initialize",
  55217. protocol: 'initialization',
  55218. fn: function (){
  55219. var self=this;
  55220. function $Date(){return $globals.Date||(typeof Date=="undefined"?nil:Date)}
  55221. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  55222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55223. return $core.withContext(function($ctx1) {
  55224. //>>excludeEnd("ctx");
  55225. (
  55226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55227. $ctx1.supercall = true,
  55228. //>>excludeEnd("ctx");
  55229. $globals.TestResult.superclass.fn.prototype._initialize.apply($recv(self), []));
  55230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55231. $ctx1.supercall = false;
  55232. //>>excludeEnd("ctx");;
  55233. self["@timestamp"]=$recv($Date())._now();
  55234. self["@runs"]=(0);
  55235. self["@errors"]=$recv($Array())._new();
  55236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55237. $ctx1.sendIdx["new"]=1;
  55238. //>>excludeEnd("ctx");
  55239. self["@failures"]=$recv($Array())._new();
  55240. self["@total"]=(0);
  55241. return self;
  55242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55243. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.TestResult)});
  55244. //>>excludeEnd("ctx");
  55245. },
  55246. //>>excludeStart("ide", pragmas.excludeIdeData);
  55247. args: [],
  55248. source: "initialize\x0a\x09super initialize.\x0a\x09timestamp := Date now.\x0a\x09runs := 0.\x0a\x09errors := Array new.\x0a\x09failures := Array new.\x0a\x09total := 0",
  55249. referencedClasses: ["Date", "Array"],
  55250. //>>excludeEnd("ide");
  55251. messageSends: ["initialize", "now", "new"]
  55252. }),
  55253. $globals.TestResult);
  55254. $core.addMethod(
  55255. $core.method({
  55256. selector: "nextRunDo:",
  55257. protocol: 'running',
  55258. fn: function (aBlock){
  55259. var self=this;
  55260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55261. return $core.withContext(function($ctx1) {
  55262. //>>excludeEnd("ctx");
  55263. var $3,$2,$1;
  55264. $3=self._runs();
  55265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55266. $ctx1.sendIdx["runs"]=1;
  55267. //>>excludeEnd("ctx");
  55268. $2=$recv($3).__eq_eq(self._total());
  55269. if(!$core.assert($2)){
  55270. $1=$recv(aBlock)._value_($recv(self._runs()).__plus((1)));
  55271. };
  55272. return $1;
  55273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55274. }, function($ctx1) {$ctx1.fill(self,"nextRunDo:",{aBlock:aBlock},$globals.TestResult)});
  55275. //>>excludeEnd("ctx");
  55276. },
  55277. //>>excludeStart("ide", pragmas.excludeIdeData);
  55278. args: ["aBlock"],
  55279. 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 ]",
  55280. referencedClasses: [],
  55281. //>>excludeEnd("ide");
  55282. messageSends: ["ifFalse:", "==", "runs", "total", "value:", "+"]
  55283. }),
  55284. $globals.TestResult);
  55285. $core.addMethod(
  55286. $core.method({
  55287. selector: "runCase:",
  55288. protocol: 'running',
  55289. fn: function (aTestCase){
  55290. var self=this;
  55291. function $TestFailure(){return $globals.TestFailure||(typeof TestFailure=="undefined"?nil:TestFailure)}
  55292. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  55293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55294. return $core.withContext(function($ctx1) {
  55295. //>>excludeEnd("ctx");
  55296. $recv((function(){
  55297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55298. return $core.withContext(function($ctx2) {
  55299. //>>excludeEnd("ctx");
  55300. return $recv((function(){
  55301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55302. return $core.withContext(function($ctx3) {
  55303. //>>excludeEnd("ctx");
  55304. self._increaseRuns();
  55305. return $recv(aTestCase)._runCase();
  55306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55307. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  55308. //>>excludeEnd("ctx");
  55309. }))._on_do_($TestFailure(),(function(ex){
  55310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55311. return $core.withContext(function($ctx3) {
  55312. //>>excludeEnd("ctx");
  55313. return self._addFailure_(aTestCase);
  55314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55315. }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,3)});
  55316. //>>excludeEnd("ctx");
  55317. }));
  55318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55319. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  55320. //>>excludeEnd("ctx");
  55321. }))._on_do_($Error(),(function(ex){
  55322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55323. return $core.withContext(function($ctx2) {
  55324. //>>excludeEnd("ctx");
  55325. return self._addError_(aTestCase);
  55326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55327. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,4)});
  55328. //>>excludeEnd("ctx");
  55329. }));
  55330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55331. $ctx1.sendIdx["on:do:"]=1;
  55332. //>>excludeEnd("ctx");
  55333. return self;
  55334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55335. }, function($ctx1) {$ctx1.fill(self,"runCase:",{aTestCase:aTestCase},$globals.TestResult)});
  55336. //>>excludeEnd("ctx");
  55337. },
  55338. //>>excludeStart("ide", pragmas.excludeIdeData);
  55339. args: ["aTestCase"],
  55340. 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 ]",
  55341. referencedClasses: ["TestFailure", "Error"],
  55342. //>>excludeEnd("ide");
  55343. messageSends: ["on:do:", "increaseRuns", "runCase", "addFailure:", "addError:"]
  55344. }),
  55345. $globals.TestResult);
  55346. $core.addMethod(
  55347. $core.method({
  55348. selector: "runs",
  55349. protocol: 'accessing',
  55350. fn: function (){
  55351. var self=this;
  55352. var $1;
  55353. $1=self["@runs"];
  55354. return $1;
  55355. },
  55356. //>>excludeStart("ide", pragmas.excludeIdeData);
  55357. args: [],
  55358. source: "runs\x0a\x09^ runs",
  55359. referencedClasses: [],
  55360. //>>excludeEnd("ide");
  55361. messageSends: []
  55362. }),
  55363. $globals.TestResult);
  55364. $core.addMethod(
  55365. $core.method({
  55366. selector: "status",
  55367. protocol: 'accessing',
  55368. fn: function (){
  55369. var self=this;
  55370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55371. return $core.withContext(function($ctx1) {
  55372. //>>excludeEnd("ctx");
  55373. var $2,$3,$1;
  55374. $2=$recv(self._errors())._isEmpty();
  55375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55376. $ctx1.sendIdx["isEmpty"]=1;
  55377. //>>excludeEnd("ctx");
  55378. if($core.assert($2)){
  55379. $3=$recv(self._failures())._isEmpty();
  55380. if($core.assert($3)){
  55381. $1="success";
  55382. } else {
  55383. $1="failure";
  55384. };
  55385. } else {
  55386. $1="error";
  55387. };
  55388. return $1;
  55389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55390. }, function($ctx1) {$ctx1.fill(self,"status",{},$globals.TestResult)});
  55391. //>>excludeEnd("ctx");
  55392. },
  55393. //>>excludeStart("ide", pragmas.excludeIdeData);
  55394. args: [],
  55395. 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' ]",
  55396. referencedClasses: [],
  55397. //>>excludeEnd("ide");
  55398. messageSends: ["ifTrue:ifFalse:", "isEmpty", "errors", "failures"]
  55399. }),
  55400. $globals.TestResult);
  55401. $core.addMethod(
  55402. $core.method({
  55403. selector: "timestamp",
  55404. protocol: 'accessing',
  55405. fn: function (){
  55406. var self=this;
  55407. var $1;
  55408. $1=self["@timestamp"];
  55409. return $1;
  55410. },
  55411. //>>excludeStart("ide", pragmas.excludeIdeData);
  55412. args: [],
  55413. source: "timestamp\x0a\x09^ timestamp",
  55414. referencedClasses: [],
  55415. //>>excludeEnd("ide");
  55416. messageSends: []
  55417. }),
  55418. $globals.TestResult);
  55419. $core.addMethod(
  55420. $core.method({
  55421. selector: "total",
  55422. protocol: 'accessing',
  55423. fn: function (){
  55424. var self=this;
  55425. var $1;
  55426. $1=self["@total"];
  55427. return $1;
  55428. },
  55429. //>>excludeStart("ide", pragmas.excludeIdeData);
  55430. args: [],
  55431. source: "total\x0a\x09^ total",
  55432. referencedClasses: [],
  55433. //>>excludeEnd("ide");
  55434. messageSends: []
  55435. }),
  55436. $globals.TestResult);
  55437. $core.addMethod(
  55438. $core.method({
  55439. selector: "total:",
  55440. protocol: 'accessing',
  55441. fn: function (aNumber){
  55442. var self=this;
  55443. self["@total"]=aNumber;
  55444. return self;
  55445. },
  55446. //>>excludeStart("ide", pragmas.excludeIdeData);
  55447. args: ["aNumber"],
  55448. source: "total: aNumber\x0a\x09total := aNumber",
  55449. referencedClasses: [],
  55450. //>>excludeEnd("ide");
  55451. messageSends: []
  55452. }),
  55453. $globals.TestResult);
  55454. $core.addClass('TestSuiteRunner', $globals.Object, ['suite', 'result', 'announcer', 'runNextTest'], 'SUnit');
  55455. //>>excludeStart("ide", pragmas.excludeIdeData);
  55456. $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`.";
  55457. //>>excludeEnd("ide");
  55458. $core.addMethod(
  55459. $core.method({
  55460. selector: "announcer",
  55461. protocol: 'accessing',
  55462. fn: function (){
  55463. var self=this;
  55464. var $1;
  55465. $1=self["@announcer"];
  55466. return $1;
  55467. },
  55468. //>>excludeStart("ide", pragmas.excludeIdeData);
  55469. args: [],
  55470. source: "announcer\x0a\x09^ announcer",
  55471. referencedClasses: [],
  55472. //>>excludeEnd("ide");
  55473. messageSends: []
  55474. }),
  55475. $globals.TestSuiteRunner);
  55476. $core.addMethod(
  55477. $core.method({
  55478. selector: "contextOf:",
  55479. protocol: 'private',
  55480. fn: function (anInteger){
  55481. var self=this;
  55482. function $ReportingTestContext(){return $globals.ReportingTestContext||(typeof ReportingTestContext=="undefined"?nil:ReportingTestContext)}
  55483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55484. return $core.withContext(function($ctx1) {
  55485. //>>excludeEnd("ctx");
  55486. var $1;
  55487. $1=$recv($ReportingTestContext())._testCase_result_finished_($recv(self["@suite"])._at_(anInteger),self["@result"],(function(){
  55488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55489. return $core.withContext(function($ctx2) {
  55490. //>>excludeEnd("ctx");
  55491. return self._resume();
  55492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55493. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  55494. //>>excludeEnd("ctx");
  55495. }));
  55496. return $1;
  55497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55498. }, function($ctx1) {$ctx1.fill(self,"contextOf:",{anInteger:anInteger},$globals.TestSuiteRunner)});
  55499. //>>excludeEnd("ctx");
  55500. },
  55501. //>>excludeStart("ide", pragmas.excludeIdeData);
  55502. args: ["anInteger"],
  55503. source: "contextOf: anInteger\x0a\x09^ ReportingTestContext testCase: (suite at: anInteger) result: result finished: [ self resume ]",
  55504. referencedClasses: ["ReportingTestContext"],
  55505. //>>excludeEnd("ide");
  55506. messageSends: ["testCase:result:finished:", "at:", "resume"]
  55507. }),
  55508. $globals.TestSuiteRunner);
  55509. $core.addMethod(
  55510. $core.method({
  55511. selector: "initialize",
  55512. protocol: 'initialization',
  55513. fn: function (){
  55514. var self=this;
  55515. function $Announcer(){return $globals.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
  55516. function $TestResult(){return $globals.TestResult||(typeof TestResult=="undefined"?nil:TestResult)}
  55517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55518. return $core.withContext(function($ctx1) {
  55519. //>>excludeEnd("ctx");
  55520. var $1;
  55521. (
  55522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55523. $ctx1.supercall = true,
  55524. //>>excludeEnd("ctx");
  55525. $globals.TestSuiteRunner.superclass.fn.prototype._initialize.apply($recv(self), []));
  55526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55527. $ctx1.supercall = false;
  55528. //>>excludeEnd("ctx");;
  55529. self["@announcer"]=$recv($Announcer())._new();
  55530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55531. $ctx1.sendIdx["new"]=1;
  55532. //>>excludeEnd("ctx");
  55533. self["@result"]=$recv($TestResult())._new();
  55534. self["@runNextTest"]=(function(){
  55535. var runs;
  55536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55537. return $core.withContext(function($ctx2) {
  55538. //>>excludeEnd("ctx");
  55539. runs=$recv(self["@result"])._runs();
  55540. runs;
  55541. $1=$recv(runs).__lt($recv(self["@result"])._total());
  55542. if($core.assert($1)){
  55543. return $recv(self._contextOf_($recv(runs).__plus((1))))._start();
  55544. };
  55545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55546. }, function($ctx2) {$ctx2.fillBlock({runs:runs},$ctx1,1)});
  55547. //>>excludeEnd("ctx");
  55548. });
  55549. return self;
  55550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55551. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.TestSuiteRunner)});
  55552. //>>excludeEnd("ctx");
  55553. },
  55554. //>>excludeStart("ide", pragmas.excludeIdeData);
  55555. args: [],
  55556. 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 ] ].",
  55557. referencedClasses: ["Announcer", "TestResult"],
  55558. //>>excludeEnd("ide");
  55559. messageSends: ["initialize", "new", "runs", "ifTrue:", "<", "total", "start", "contextOf:", "+"]
  55560. }),
  55561. $globals.TestSuiteRunner);
  55562. $core.addMethod(
  55563. $core.method({
  55564. selector: "result",
  55565. protocol: 'accessing',
  55566. fn: function (){
  55567. var self=this;
  55568. var $1;
  55569. $1=self["@result"];
  55570. return $1;
  55571. },
  55572. //>>excludeStart("ide", pragmas.excludeIdeData);
  55573. args: [],
  55574. source: "result\x0a\x09^ result",
  55575. referencedClasses: [],
  55576. //>>excludeEnd("ide");
  55577. messageSends: []
  55578. }),
  55579. $globals.TestSuiteRunner);
  55580. $core.addMethod(
  55581. $core.method({
  55582. selector: "resume",
  55583. protocol: 'actions',
  55584. fn: function (){
  55585. var self=this;
  55586. function $ResultAnnouncement(){return $globals.ResultAnnouncement||(typeof ResultAnnouncement=="undefined"?nil:ResultAnnouncement)}
  55587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55588. return $core.withContext(function($ctx1) {
  55589. //>>excludeEnd("ctx");
  55590. $recv(self["@runNextTest"])._fork();
  55591. $recv(self["@announcer"])._announce_($recv($recv($ResultAnnouncement())._new())._result_(self["@result"]));
  55592. return self;
  55593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55594. }, function($ctx1) {$ctx1.fill(self,"resume",{},$globals.TestSuiteRunner)});
  55595. //>>excludeEnd("ctx");
  55596. },
  55597. //>>excludeStart("ide", pragmas.excludeIdeData);
  55598. args: [],
  55599. source: "resume\x0a\x09runNextTest fork.\x0a\x09announcer announce: (ResultAnnouncement new result: result)",
  55600. referencedClasses: ["ResultAnnouncement"],
  55601. //>>excludeEnd("ide");
  55602. messageSends: ["fork", "announce:", "result:", "new"]
  55603. }),
  55604. $globals.TestSuiteRunner);
  55605. $core.addMethod(
  55606. $core.method({
  55607. selector: "run",
  55608. protocol: 'actions',
  55609. fn: function (){
  55610. var self=this;
  55611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55612. return $core.withContext(function($ctx1) {
  55613. //>>excludeEnd("ctx");
  55614. $recv(self["@result"])._total_($recv(self["@suite"])._size());
  55615. self._resume();
  55616. return self;
  55617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55618. }, function($ctx1) {$ctx1.fill(self,"run",{},$globals.TestSuiteRunner)});
  55619. //>>excludeEnd("ctx");
  55620. },
  55621. //>>excludeStart("ide", pragmas.excludeIdeData);
  55622. args: [],
  55623. source: "run\x0a\x09result total: suite size.\x0a\x09self resume",
  55624. referencedClasses: [],
  55625. //>>excludeEnd("ide");
  55626. messageSends: ["total:", "size", "resume"]
  55627. }),
  55628. $globals.TestSuiteRunner);
  55629. $core.addMethod(
  55630. $core.method({
  55631. selector: "suite:",
  55632. protocol: 'accessing',
  55633. fn: function (aCollection){
  55634. var self=this;
  55635. self["@suite"]=aCollection;
  55636. return self;
  55637. },
  55638. //>>excludeStart("ide", pragmas.excludeIdeData);
  55639. args: ["aCollection"],
  55640. source: "suite: aCollection\x0a\x09suite := aCollection",
  55641. referencedClasses: [],
  55642. //>>excludeEnd("ide");
  55643. messageSends: []
  55644. }),
  55645. $globals.TestSuiteRunner);
  55646. $core.addMethod(
  55647. $core.method({
  55648. selector: "new",
  55649. protocol: 'instance creation',
  55650. fn: function (){
  55651. var self=this;
  55652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55653. return $core.withContext(function($ctx1) {
  55654. //>>excludeEnd("ctx");
  55655. self._shouldNotImplement();
  55656. return self;
  55657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55658. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.TestSuiteRunner.klass)});
  55659. //>>excludeEnd("ctx");
  55660. },
  55661. //>>excludeStart("ide", pragmas.excludeIdeData);
  55662. args: [],
  55663. source: "new\x0a\x09self shouldNotImplement",
  55664. referencedClasses: [],
  55665. //>>excludeEnd("ide");
  55666. messageSends: ["shouldNotImplement"]
  55667. }),
  55668. $globals.TestSuiteRunner.klass);
  55669. $core.addMethod(
  55670. $core.method({
  55671. selector: "on:",
  55672. protocol: 'instance creation',
  55673. fn: function (aCollection){
  55674. var self=this;
  55675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55676. return $core.withContext(function($ctx1) {
  55677. //>>excludeEnd("ctx");
  55678. var $2,$1;
  55679. $2=(
  55680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55681. $ctx1.supercall = true,
  55682. //>>excludeEnd("ctx");
  55683. $globals.TestSuiteRunner.klass.superclass.fn.prototype._new.apply($recv(self), []));
  55684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55685. $ctx1.supercall = false;
  55686. //>>excludeEnd("ctx");;
  55687. $1=$recv($2)._suite_(aCollection);
  55688. return $1;
  55689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55690. }, function($ctx1) {$ctx1.fill(self,"on:",{aCollection:aCollection},$globals.TestSuiteRunner.klass)});
  55691. //>>excludeEnd("ctx");
  55692. },
  55693. //>>excludeStart("ide", pragmas.excludeIdeData);
  55694. args: ["aCollection"],
  55695. source: "on: aCollection\x0a\x09^ super new suite: aCollection",
  55696. referencedClasses: [],
  55697. //>>excludeEnd("ide");
  55698. messageSends: ["suite:", "new"]
  55699. }),
  55700. $globals.TestSuiteRunner.klass);
  55701. $core.addMethod(
  55702. $core.method({
  55703. selector: "isTestClass",
  55704. protocol: '*SUnit',
  55705. fn: function (){
  55706. var self=this;
  55707. function $TestCase(){return $globals.TestCase||(typeof TestCase=="undefined"?nil:TestCase)}
  55708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55709. return $core.withContext(function($ctx1) {
  55710. //>>excludeEnd("ctx");
  55711. var $1;
  55712. $1=$recv(self._includesBehavior_($TestCase()))._and_((function(){
  55713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55714. return $core.withContext(function($ctx2) {
  55715. //>>excludeEnd("ctx");
  55716. return $recv(self._isAbstract())._not();
  55717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55718. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  55719. //>>excludeEnd("ctx");
  55720. }));
  55721. return $1;
  55722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55723. }, function($ctx1) {$ctx1.fill(self,"isTestClass",{},$globals.Behavior)});
  55724. //>>excludeEnd("ctx");
  55725. },
  55726. //>>excludeStart("ide", pragmas.excludeIdeData);
  55727. args: [],
  55728. source: "isTestClass\x0a\x09^(self includesBehavior: TestCase) and: [ \x0a\x09\x09\x09self isAbstract not ]",
  55729. referencedClasses: ["TestCase"],
  55730. //>>excludeEnd("ide");
  55731. messageSends: ["and:", "includesBehavior:", "not", "isAbstract"]
  55732. }),
  55733. $globals.Behavior);
  55734. $core.addMethod(
  55735. $core.method({
  55736. selector: "isTestPackage",
  55737. protocol: '*SUnit',
  55738. fn: function (){
  55739. var self=this;
  55740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55741. return $core.withContext(function($ctx1) {
  55742. //>>excludeEnd("ctx");
  55743. var $1;
  55744. $1=$recv(self._classes())._anySatisfy_((function(each){
  55745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55746. return $core.withContext(function($ctx2) {
  55747. //>>excludeEnd("ctx");
  55748. return $recv(each)._isTestClass();
  55749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55750. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  55751. //>>excludeEnd("ctx");
  55752. }));
  55753. return $1;
  55754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55755. }, function($ctx1) {$ctx1.fill(self,"isTestPackage",{},$globals.Package)});
  55756. //>>excludeEnd("ctx");
  55757. },
  55758. //>>excludeStart("ide", pragmas.excludeIdeData);
  55759. args: [],
  55760. source: "isTestPackage\x0a\x09^ self classes anySatisfy: [ :each | each isTestClass ]",
  55761. referencedClasses: [],
  55762. //>>excludeEnd("ide");
  55763. messageSends: ["anySatisfy:", "classes", "isTestClass"]
  55764. }),
  55765. $globals.Package);
  55766. });
  55767. define("amber_core/Platform-ImportExport", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Platform-Services", "amber_core/Kernel-Infrastructure"], function($boot){
  55768. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  55769. $core.addPackage('Platform-ImportExport');
  55770. $core.packages["Platform-ImportExport"].innerEval = function (expr) { return eval(expr); };
  55771. $core.packages["Platform-ImportExport"].transport = {"type":"amd","amdNamespace":"amber_core"};
  55772. $core.addClass('AbstractExporter', $globals.Object, [], 'Platform-ImportExport');
  55773. //>>excludeStart("ide", pragmas.excludeIdeData);
  55774. $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.";
  55775. //>>excludeEnd("ide");
  55776. $core.addMethod(
  55777. $core.method({
  55778. selector: "classNameFor:",
  55779. protocol: 'convenience',
  55780. fn: function (aClass){
  55781. var self=this;
  55782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55783. return $core.withContext(function($ctx1) {
  55784. //>>excludeEnd("ctx");
  55785. var $2,$3,$4,$1;
  55786. $2=$recv(aClass)._isMetaclass();
  55787. if($core.assert($2)){
  55788. $3=$recv($recv(aClass)._instanceClass())._name();
  55789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55790. $ctx1.sendIdx["name"]=1;
  55791. //>>excludeEnd("ctx");
  55792. $1=$recv($3).__comma(" class");
  55793. } else {
  55794. $4=$recv(aClass)._isNil();
  55795. if($core.assert($4)){
  55796. $1="nil";
  55797. } else {
  55798. $1=$recv(aClass)._name();
  55799. };
  55800. };
  55801. return $1;
  55802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55803. }, function($ctx1) {$ctx1.fill(self,"classNameFor:",{aClass:aClass},$globals.AbstractExporter)});
  55804. //>>excludeEnd("ctx");
  55805. },
  55806. //>>excludeStart("ide", pragmas.excludeIdeData);
  55807. args: ["aClass"],
  55808. 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 ] ]",
  55809. referencedClasses: [],
  55810. //>>excludeEnd("ide");
  55811. messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "name", "instanceClass", "isNil"]
  55812. }),
  55813. $globals.AbstractExporter);
  55814. $core.addMethod(
  55815. $core.method({
  55816. selector: "exportPackage:on:",
  55817. protocol: 'output',
  55818. fn: function (aPackage,aStream){
  55819. var self=this;
  55820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55821. return $core.withContext(function($ctx1) {
  55822. //>>excludeEnd("ctx");
  55823. self._subclassResponsibility();
  55824. return self;
  55825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55826. }, function($ctx1) {$ctx1.fill(self,"exportPackage:on:",{aPackage:aPackage,aStream:aStream},$globals.AbstractExporter)});
  55827. //>>excludeEnd("ctx");
  55828. },
  55829. //>>excludeStart("ide", pragmas.excludeIdeData);
  55830. args: ["aPackage", "aStream"],
  55831. source: "exportPackage: aPackage on: aStream\x0a\x09self subclassResponsibility",
  55832. referencedClasses: [],
  55833. //>>excludeEnd("ide");
  55834. messageSends: ["subclassResponsibility"]
  55835. }),
  55836. $globals.AbstractExporter);
  55837. $core.addMethod(
  55838. $core.method({
  55839. selector: "extensionMethodsOfPackage:",
  55840. protocol: 'accessing',
  55841. fn: function (aPackage){
  55842. var self=this;
  55843. var result;
  55844. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  55845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55846. return $core.withContext(function($ctx1) {
  55847. //>>excludeEnd("ctx");
  55848. var $1;
  55849. result=$recv($OrderedCollection())._new();
  55850. $recv(self._extensionProtocolsOfPackage_(aPackage))._do_((function(each){
  55851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55852. return $core.withContext(function($ctx2) {
  55853. //>>excludeEnd("ctx");
  55854. return $recv(result)._addAll_($recv(each)._methods());
  55855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55856. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  55857. //>>excludeEnd("ctx");
  55858. }));
  55859. $1=result;
  55860. return $1;
  55861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55862. }, function($ctx1) {$ctx1.fill(self,"extensionMethodsOfPackage:",{aPackage:aPackage,result:result},$globals.AbstractExporter)});
  55863. //>>excludeEnd("ctx");
  55864. },
  55865. //>>excludeStart("ide", pragmas.excludeIdeData);
  55866. args: ["aPackage"],
  55867. 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",
  55868. referencedClasses: ["OrderedCollection"],
  55869. //>>excludeEnd("ide");
  55870. messageSends: ["new", "do:", "extensionProtocolsOfPackage:", "addAll:", "methods"]
  55871. }),
  55872. $globals.AbstractExporter);
  55873. $core.addMethod(
  55874. $core.method({
  55875. selector: "extensionProtocolsOfPackage:",
  55876. protocol: 'accessing',
  55877. fn: function (aPackage){
  55878. var self=this;
  55879. var extensionName,result;
  55880. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  55881. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  55882. function $ExportMethodProtocol(){return $globals.ExportMethodProtocol||(typeof ExportMethodProtocol=="undefined"?nil:ExportMethodProtocol)}
  55883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55884. return $core.withContext(function($ctx1) {
  55885. //>>excludeEnd("ctx");
  55886. var $1,$2,$3,$4;
  55887. $1=$recv(aPackage)._name();
  55888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55889. $ctx1.sendIdx["name"]=1;
  55890. //>>excludeEnd("ctx");
  55891. extensionName="*".__comma($1);
  55892. result=$recv($OrderedCollection())._new();
  55893. $recv($recv($recv($recv($Smalltalk())._classes())._asArray())._sorted_((function(a,b){
  55894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55895. return $core.withContext(function($ctx2) {
  55896. //>>excludeEnd("ctx");
  55897. $2=$recv(a)._name();
  55898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55899. $ctx2.sendIdx["name"]=2;
  55900. //>>excludeEnd("ctx");
  55901. return $recv($2).__lt($recv(b)._name());
  55902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55903. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  55904. //>>excludeEnd("ctx");
  55905. })))._do_((function(each){
  55906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55907. return $core.withContext(function($ctx2) {
  55908. //>>excludeEnd("ctx");
  55909. return $recv([each,$recv(each)._class()])._do_((function(behavior){
  55910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55911. return $core.withContext(function($ctx3) {
  55912. //>>excludeEnd("ctx");
  55913. $3=$recv($recv(behavior)._protocols())._includes_(extensionName);
  55914. if($core.assert($3)){
  55915. return $recv(result)._add_($recv($ExportMethodProtocol())._name_theClass_(extensionName,behavior));
  55916. };
  55917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55918. }, function($ctx3) {$ctx3.fillBlock({behavior:behavior},$ctx2,3)});
  55919. //>>excludeEnd("ctx");
  55920. }));
  55921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55922. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  55923. //>>excludeEnd("ctx");
  55924. }));
  55925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55926. $ctx1.sendIdx["do:"]=1;
  55927. //>>excludeEnd("ctx");
  55928. $4=result;
  55929. return $4;
  55930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55931. }, function($ctx1) {$ctx1.fill(self,"extensionProtocolsOfPackage:",{aPackage:aPackage,extensionName:extensionName,result:result},$globals.AbstractExporter)});
  55932. //>>excludeEnd("ctx");
  55933. },
  55934. //>>excludeStart("ide", pragmas.excludeIdeData);
  55935. args: ["aPackage"],
  55936. 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",
  55937. referencedClasses: ["OrderedCollection", "Smalltalk", "ExportMethodProtocol"],
  55938. //>>excludeEnd("ide");
  55939. messageSends: [",", "name", "new", "do:", "sorted:", "asArray", "classes", "<", "class", "ifTrue:", "includes:", "protocols", "add:", "name:theClass:"]
  55940. }),
  55941. $globals.AbstractExporter);
  55942. $core.addClass('ChunkExporter', $globals.AbstractExporter, [], 'Platform-ImportExport');
  55943. //>>excludeStart("ide", pragmas.excludeIdeData);
  55944. $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.";
  55945. //>>excludeEnd("ide");
  55946. $core.addMethod(
  55947. $core.method({
  55948. selector: "chunkEscape:",
  55949. protocol: 'convenience',
  55950. fn: function (aString){
  55951. var self=this;
  55952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55953. return $core.withContext(function($ctx1) {
  55954. //>>excludeEnd("ctx");
  55955. var $1;
  55956. $1=$recv($recv(aString)._replace_with_("!","!!"))._trimBoth();
  55957. return $1;
  55958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55959. }, function($ctx1) {$ctx1.fill(self,"chunkEscape:",{aString:aString},$globals.ChunkExporter)});
  55960. //>>excludeEnd("ctx");
  55961. },
  55962. //>>excludeStart("ide", pragmas.excludeIdeData);
  55963. args: ["aString"],
  55964. source: "chunkEscape: aString\x0a\x09\x22Replace all occurrences of ! with !! and trim at both ends.\x22\x0a\x0a\x09^ (aString replace: '!' with: '!!') trimBoth",
  55965. referencedClasses: [],
  55966. //>>excludeEnd("ide");
  55967. messageSends: ["trimBoth", "replace:with:"]
  55968. }),
  55969. $globals.ChunkExporter);
  55970. $core.addMethod(
  55971. $core.method({
  55972. selector: "exportCategoryEpilogueOf:on:",
  55973. protocol: 'output',
  55974. fn: function (aCategory,aStream){
  55975. var self=this;
  55976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55977. return $core.withContext(function($ctx1) {
  55978. //>>excludeEnd("ctx");
  55979. var $1;
  55980. $recv(aStream)._nextPutAll_(" !");
  55981. $recv(aStream)._lf();
  55982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55983. $ctx1.sendIdx["lf"]=1;
  55984. //>>excludeEnd("ctx");
  55985. $1=$recv(aStream)._lf();
  55986. return self;
  55987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55988. }, function($ctx1) {$ctx1.fill(self,"exportCategoryEpilogueOf:on:",{aCategory:aCategory,aStream:aStream},$globals.ChunkExporter)});
  55989. //>>excludeEnd("ctx");
  55990. },
  55991. //>>excludeStart("ide", pragmas.excludeIdeData);
  55992. args: ["aCategory", "aStream"],
  55993. source: "exportCategoryEpilogueOf: aCategory on: aStream\x0a\x09aStream nextPutAll: ' !'; lf; lf",
  55994. referencedClasses: [],
  55995. //>>excludeEnd("ide");
  55996. messageSends: ["nextPutAll:", "lf"]
  55997. }),
  55998. $globals.ChunkExporter);
  55999. $core.addMethod(
  56000. $core.method({
  56001. selector: "exportCategoryPrologueOf:on:",
  56002. protocol: 'output',
  56003. fn: function (aCategory,aStream){
  56004. var self=this;
  56005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56006. return $core.withContext(function($ctx1) {
  56007. //>>excludeEnd("ctx");
  56008. var $1,$3,$2;
  56009. $1="!".__comma(self._classNameFor_($recv(aCategory)._theClass()));
  56010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56011. $ctx1.sendIdx[","]=1;
  56012. //>>excludeEnd("ctx");
  56013. $recv(aStream)._nextPutAll_($1);
  56014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56015. $ctx1.sendIdx["nextPutAll:"]=1;
  56016. //>>excludeEnd("ctx");
  56017. $3=$recv(" methodsFor: '".__comma($recv(aCategory)._name())).__comma("'!");
  56018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56019. $ctx1.sendIdx[","]=2;
  56020. //>>excludeEnd("ctx");
  56021. $2=$recv(aStream)._nextPutAll_($3);
  56022. return self;
  56023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56024. }, function($ctx1) {$ctx1.fill(self,"exportCategoryPrologueOf:on:",{aCategory:aCategory,aStream:aStream},$globals.ChunkExporter)});
  56025. //>>excludeEnd("ctx");
  56026. },
  56027. //>>excludeStart("ide", pragmas.excludeIdeData);
  56028. args: ["aCategory", "aStream"],
  56029. source: "exportCategoryPrologueOf: aCategory on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '!', (self classNameFor: aCategory theClass);\x0a\x09\x09nextPutAll: ' methodsFor: ''', aCategory name, '''!'",
  56030. referencedClasses: [],
  56031. //>>excludeEnd("ide");
  56032. messageSends: ["nextPutAll:", ",", "classNameFor:", "theClass", "name"]
  56033. }),
  56034. $globals.ChunkExporter);
  56035. $core.addMethod(
  56036. $core.method({
  56037. selector: "exportDefinitionOf:on:",
  56038. protocol: 'output',
  56039. fn: function (aClass,aStream){
  56040. var self=this;
  56041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56042. return $core.withContext(function($ctx1) {
  56043. //>>excludeEnd("ctx");
  56044. var $1,$3,$2,$4,$6,$5,$7,$9,$8,$11,$10,$12;
  56045. $1=self._classNameFor_($recv(aClass)._superclass());
  56046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56047. $ctx1.sendIdx["classNameFor:"]=1;
  56048. //>>excludeEnd("ctx");
  56049. $recv(aStream)._nextPutAll_($1);
  56050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56051. $ctx1.sendIdx["nextPutAll:"]=1;
  56052. //>>excludeEnd("ctx");
  56053. $3=self._classNameFor_(aClass);
  56054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56055. $ctx1.sendIdx["classNameFor:"]=2;
  56056. //>>excludeEnd("ctx");
  56057. $2=" subclass: #".__comma($3);
  56058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56059. $ctx1.sendIdx[","]=1;
  56060. //>>excludeEnd("ctx");
  56061. $recv(aStream)._nextPutAll_($2);
  56062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56063. $ctx1.sendIdx["nextPutAll:"]=2;
  56064. //>>excludeEnd("ctx");
  56065. $recv(aStream)._lf();
  56066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56067. $ctx1.sendIdx["lf"]=1;
  56068. //>>excludeEnd("ctx");
  56069. $recv(aStream)._tab();
  56070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56071. $ctx1.sendIdx["tab"]=1;
  56072. //>>excludeEnd("ctx");
  56073. $4=$recv(aStream)._nextPutAll_("instanceVariableNames: '");
  56074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56075. $ctx1.sendIdx["nextPutAll:"]=3;
  56076. //>>excludeEnd("ctx");
  56077. $recv($recv(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
  56078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56079. return $core.withContext(function($ctx2) {
  56080. //>>excludeEnd("ctx");
  56081. return $recv(aStream)._nextPutAll_(each);
  56082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56083. $ctx2.sendIdx["nextPutAll:"]=4;
  56084. //>>excludeEnd("ctx");
  56085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56086. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  56087. //>>excludeEnd("ctx");
  56088. }),(function(){
  56089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56090. return $core.withContext(function($ctx2) {
  56091. //>>excludeEnd("ctx");
  56092. return $recv(aStream)._nextPutAll_(" ");
  56093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56094. $ctx2.sendIdx["nextPutAll:"]=5;
  56095. //>>excludeEnd("ctx");
  56096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56097. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  56098. //>>excludeEnd("ctx");
  56099. }));
  56100. $recv(aStream)._nextPutAll_("'");
  56101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56102. $ctx1.sendIdx["nextPutAll:"]=6;
  56103. //>>excludeEnd("ctx");
  56104. $recv(aStream)._lf();
  56105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56106. $ctx1.sendIdx["lf"]=2;
  56107. //>>excludeEnd("ctx");
  56108. $recv(aStream)._tab();
  56109. $6="package: '".__comma($recv(aClass)._category());
  56110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56111. $ctx1.sendIdx[","]=3;
  56112. //>>excludeEnd("ctx");
  56113. $5=$recv($6).__comma("'!");
  56114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56115. $ctx1.sendIdx[","]=2;
  56116. //>>excludeEnd("ctx");
  56117. $recv(aStream)._nextPutAll_($5);
  56118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56119. $ctx1.sendIdx["nextPutAll:"]=7;
  56120. //>>excludeEnd("ctx");
  56121. $7=$recv(aStream)._lf();
  56122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56123. $ctx1.sendIdx["lf"]=3;
  56124. //>>excludeEnd("ctx");
  56125. $9=$recv(aClass)._comment();
  56126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56127. $ctx1.sendIdx["comment"]=1;
  56128. //>>excludeEnd("ctx");
  56129. $8=$recv($9)._notEmpty();
  56130. if($core.assert($8)){
  56131. $11="!".__comma(self._classNameFor_(aClass));
  56132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56133. $ctx1.sendIdx[","]=5;
  56134. //>>excludeEnd("ctx");
  56135. $10=$recv($11).__comma(" commentStamp!");
  56136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56137. $ctx1.sendIdx[","]=4;
  56138. //>>excludeEnd("ctx");
  56139. $recv(aStream)._nextPutAll_($10);
  56140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56141. $ctx1.sendIdx["nextPutAll:"]=8;
  56142. //>>excludeEnd("ctx");
  56143. $recv(aStream)._lf();
  56144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56145. $ctx1.sendIdx["lf"]=4;
  56146. //>>excludeEnd("ctx");
  56147. $recv(aStream)._nextPutAll_($recv(self._chunkEscape_($recv(aClass)._comment())).__comma("!"));
  56148. $12=$recv(aStream)._lf();
  56149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56150. $ctx1.sendIdx["lf"]=5;
  56151. //>>excludeEnd("ctx");
  56152. $12;
  56153. };
  56154. $recv(aStream)._lf();
  56155. return self;
  56156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56157. }, function($ctx1) {$ctx1.fill(self,"exportDefinitionOf:on:",{aClass:aClass,aStream:aStream},$globals.ChunkExporter)});
  56158. //>>excludeEnd("ctx");
  56159. },
  56160. //>>excludeStart("ide", pragmas.excludeIdeData);
  56161. args: ["aClass", "aStream"],
  56162. 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",
  56163. referencedClasses: [],
  56164. //>>excludeEnd("ide");
  56165. messageSends: ["nextPutAll:", "classNameFor:", "superclass", ",", "lf", "tab", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "chunkEscape:"]
  56166. }),
  56167. $globals.ChunkExporter);
  56168. $core.addMethod(
  56169. $core.method({
  56170. selector: "exportMetaDefinitionOf:on:",
  56171. protocol: 'output',
  56172. fn: function (aClass,aStream){
  56173. var self=this;
  56174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56175. return $core.withContext(function($ctx1) {
  56176. //>>excludeEnd("ctx");
  56177. var $3,$2,$1,$5,$4,$6,$7;
  56178. $3=$recv(aClass)._class();
  56179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56180. $ctx1.sendIdx["class"]=1;
  56181. //>>excludeEnd("ctx");
  56182. $2=$recv($3)._instanceVariableNames();
  56183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56184. $ctx1.sendIdx["instanceVariableNames"]=1;
  56185. //>>excludeEnd("ctx");
  56186. $1=$recv($2)._isEmpty();
  56187. if(!$core.assert($1)){
  56188. $5=$recv(aClass)._class();
  56189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56190. $ctx1.sendIdx["class"]=2;
  56191. //>>excludeEnd("ctx");
  56192. $4=self._classNameFor_($5);
  56193. $recv(aStream)._nextPutAll_($4);
  56194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56195. $ctx1.sendIdx["nextPutAll:"]=1;
  56196. //>>excludeEnd("ctx");
  56197. $6=$recv(aStream)._nextPutAll_(" instanceVariableNames: '");
  56198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56199. $ctx1.sendIdx["nextPutAll:"]=2;
  56200. //>>excludeEnd("ctx");
  56201. $6;
  56202. $recv($recv($recv(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
  56203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56204. return $core.withContext(function($ctx2) {
  56205. //>>excludeEnd("ctx");
  56206. return $recv(aStream)._nextPutAll_(each);
  56207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56208. $ctx2.sendIdx["nextPutAll:"]=3;
  56209. //>>excludeEnd("ctx");
  56210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56211. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  56212. //>>excludeEnd("ctx");
  56213. }),(function(){
  56214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56215. return $core.withContext(function($ctx2) {
  56216. //>>excludeEnd("ctx");
  56217. return $recv(aStream)._nextPutAll_(" ");
  56218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56219. $ctx2.sendIdx["nextPutAll:"]=4;
  56220. //>>excludeEnd("ctx");
  56221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56222. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  56223. //>>excludeEnd("ctx");
  56224. }));
  56225. $recv(aStream)._nextPutAll_("'!");
  56226. $recv(aStream)._lf();
  56227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56228. $ctx1.sendIdx["lf"]=1;
  56229. //>>excludeEnd("ctx");
  56230. $7=$recv(aStream)._lf();
  56231. $7;
  56232. };
  56233. return self;
  56234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56235. }, function($ctx1) {$ctx1.fill(self,"exportMetaDefinitionOf:on:",{aClass:aClass,aStream:aStream},$globals.ChunkExporter)});
  56236. //>>excludeEnd("ctx");
  56237. },
  56238. //>>excludeStart("ide", pragmas.excludeIdeData);
  56239. args: ["aClass", "aStream"],
  56240. 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 ]",
  56241. referencedClasses: [],
  56242. //>>excludeEnd("ide");
  56243. messageSends: ["ifFalse:", "isEmpty", "instanceVariableNames", "class", "nextPutAll:", "classNameFor:", "do:separatedBy:", "lf"]
  56244. }),
  56245. $globals.ChunkExporter);
  56246. $core.addMethod(
  56247. $core.method({
  56248. selector: "exportMethod:on:",
  56249. protocol: 'output',
  56250. fn: function (aMethod,aStream){
  56251. var self=this;
  56252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56253. return $core.withContext(function($ctx1) {
  56254. //>>excludeEnd("ctx");
  56255. var $1;
  56256. $recv(aStream)._lf();
  56257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56258. $ctx1.sendIdx["lf"]=1;
  56259. //>>excludeEnd("ctx");
  56260. $recv(aStream)._lf();
  56261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56262. $ctx1.sendIdx["lf"]=2;
  56263. //>>excludeEnd("ctx");
  56264. $recv(aStream)._nextPutAll_(self._chunkEscape_($recv(aMethod)._source()));
  56265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56266. $ctx1.sendIdx["nextPutAll:"]=1;
  56267. //>>excludeEnd("ctx");
  56268. $recv(aStream)._lf();
  56269. $1=$recv(aStream)._nextPutAll_("!");
  56270. return self;
  56271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56272. }, function($ctx1) {$ctx1.fill(self,"exportMethod:on:",{aMethod:aMethod,aStream:aStream},$globals.ChunkExporter)});
  56273. //>>excludeEnd("ctx");
  56274. },
  56275. //>>excludeStart("ide", pragmas.excludeIdeData);
  56276. args: ["aMethod", "aStream"],
  56277. source: "exportMethod: aMethod on: aStream\x0a\x09aStream\x0a\x09\x09lf; lf; nextPutAll: (self chunkEscape: aMethod source); lf;\x0a\x09\x09nextPutAll: '!'",
  56278. referencedClasses: [],
  56279. //>>excludeEnd("ide");
  56280. messageSends: ["lf", "nextPutAll:", "chunkEscape:", "source"]
  56281. }),
  56282. $globals.ChunkExporter);
  56283. $core.addMethod(
  56284. $core.method({
  56285. selector: "exportPackage:on:",
  56286. protocol: 'output',
  56287. fn: function (aPackage,aStream){
  56288. var self=this;
  56289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56290. return $core.withContext(function($ctx1) {
  56291. //>>excludeEnd("ctx");
  56292. var $1,$2;
  56293. self._exportPackageDefinitionOf_on_(aPackage,aStream);
  56294. $1=self._exportPackageImportsOf_on_(aPackage,aStream);
  56295. $recv($recv(aPackage)._sortedClasses())._do_((function(each){
  56296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56297. return $core.withContext(function($ctx2) {
  56298. //>>excludeEnd("ctx");
  56299. self._exportDefinitionOf_on_(each,aStream);
  56300. $2=self._ownMethodProtocolsOfClass_(each);
  56301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56302. $ctx2.sendIdx["ownMethodProtocolsOfClass:"]=1;
  56303. //>>excludeEnd("ctx");
  56304. self._exportProtocols_on_($2,aStream);
  56305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56306. $ctx2.sendIdx["exportProtocols:on:"]=1;
  56307. //>>excludeEnd("ctx");
  56308. self._exportMetaDefinitionOf_on_(each,aStream);
  56309. return self._exportProtocols_on_(self._ownMethodProtocolsOfClass_($recv(each)._class()),aStream);
  56310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56311. $ctx2.sendIdx["exportProtocols:on:"]=2;
  56312. //>>excludeEnd("ctx");
  56313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56314. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  56315. //>>excludeEnd("ctx");
  56316. }));
  56317. self._exportProtocols_on_(self._extensionProtocolsOfPackage_(aPackage),aStream);
  56318. return self;
  56319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56320. }, function($ctx1) {$ctx1.fill(self,"exportPackage:on:",{aPackage:aPackage,aStream:aStream},$globals.ChunkExporter)});
  56321. //>>excludeEnd("ctx");
  56322. },
  56323. //>>excludeStart("ide", pragmas.excludeIdeData);
  56324. args: ["aPackage", "aStream"],
  56325. source: "exportPackage: aPackage on: aStream\x0a\x0a\x09self\x0a\x09\x09exportPackageDefinitionOf: aPackage on: aStream;\x0a\x09\x09exportPackageImportsOf: 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",
  56326. referencedClasses: [],
  56327. //>>excludeEnd("ide");
  56328. messageSends: ["exportPackageDefinitionOf:on:", "exportPackageImportsOf:on:", "do:", "sortedClasses", "exportDefinitionOf:on:", "exportProtocols:on:", "ownMethodProtocolsOfClass:", "exportMetaDefinitionOf:on:", "class", "extensionProtocolsOfPackage:"]
  56329. }),
  56330. $globals.ChunkExporter);
  56331. $core.addMethod(
  56332. $core.method({
  56333. selector: "exportPackageDefinitionOf:on:",
  56334. protocol: 'output',
  56335. fn: function (aPackage,aStream){
  56336. var self=this;
  56337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56338. return $core.withContext(function($ctx1) {
  56339. //>>excludeEnd("ctx");
  56340. var $1,$2;
  56341. $1=$recv("Smalltalk createPackage: '".__comma($recv(aPackage)._name())).__comma("'!");
  56342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56343. $ctx1.sendIdx[","]=1;
  56344. //>>excludeEnd("ctx");
  56345. $recv(aStream)._nextPutAll_($1);
  56346. $2=$recv(aStream)._lf();
  56347. return self;
  56348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56349. }, function($ctx1) {$ctx1.fill(self,"exportPackageDefinitionOf:on:",{aPackage:aPackage,aStream:aStream},$globals.ChunkExporter)});
  56350. //>>excludeEnd("ctx");
  56351. },
  56352. //>>excludeStart("ide", pragmas.excludeIdeData);
  56353. args: ["aPackage", "aStream"],
  56354. source: "exportPackageDefinitionOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: 'Smalltalk createPackage: ''', aPackage name, '''!';\x0a\x09\x09lf",
  56355. referencedClasses: [],
  56356. //>>excludeEnd("ide");
  56357. messageSends: ["nextPutAll:", ",", "name", "lf"]
  56358. }),
  56359. $globals.ChunkExporter);
  56360. $core.addMethod(
  56361. $core.method({
  56362. selector: "exportPackageImportsOf:on:",
  56363. protocol: 'output',
  56364. fn: function (aPackage,aStream){
  56365. var self=this;
  56366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56367. return $core.withContext(function($ctx1) {
  56368. //>>excludeEnd("ctx");
  56369. var $1;
  56370. $recv($recv(aPackage)._imports())._ifNotEmpty_((function(imports){
  56371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56372. return $core.withContext(function($ctx2) {
  56373. //>>excludeEnd("ctx");
  56374. $recv(aStream)._nextPutAll_("(Smalltalk packageAt: '");
  56375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56376. $ctx2.sendIdx["nextPutAll:"]=1;
  56377. //>>excludeEnd("ctx");
  56378. $recv(aStream)._nextPutAll_($recv(aPackage)._name());
  56379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56380. $ctx2.sendIdx["nextPutAll:"]=2;
  56381. //>>excludeEnd("ctx");
  56382. $recv(aStream)._nextPutAll_("') imports: ");
  56383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56384. $ctx2.sendIdx["nextPutAll:"]=3;
  56385. //>>excludeEnd("ctx");
  56386. $recv(aStream)._nextPutAll_(self._chunkEscape_($recv(aPackage)._importsDefinition()));
  56387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56388. $ctx2.sendIdx["nextPutAll:"]=4;
  56389. //>>excludeEnd("ctx");
  56390. $recv(aStream)._nextPutAll_("!");
  56391. $1=$recv(aStream)._lf();
  56392. return $1;
  56393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56394. }, function($ctx2) {$ctx2.fillBlock({imports:imports},$ctx1,1)});
  56395. //>>excludeEnd("ctx");
  56396. }));
  56397. return self;
  56398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56399. }, function($ctx1) {$ctx1.fill(self,"exportPackageImportsOf:on:",{aPackage:aPackage,aStream:aStream},$globals.ChunkExporter)});
  56400. //>>excludeEnd("ctx");
  56401. },
  56402. //>>excludeStart("ide", pragmas.excludeIdeData);
  56403. args: ["aPackage", "aStream"],
  56404. source: "exportPackageImportsOf: aPackage on: aStream\x0a\x09aPackage imports ifNotEmpty: [ :imports |\x0a\x09\x09aStream\x0a\x09\x09\x09nextPutAll: '(Smalltalk packageAt: ''';\x0a\x09\x09\x09nextPutAll: aPackage name;\x0a\x09\x09\x09nextPutAll: ''') imports: ';\x0a\x09\x09\x09nextPutAll: (self chunkEscape: aPackage importsDefinition);\x0a\x09\x09\x09nextPutAll: '!';\x0a\x09\x09\x09lf ]",
  56405. referencedClasses: [],
  56406. //>>excludeEnd("ide");
  56407. messageSends: ["ifNotEmpty:", "imports", "nextPutAll:", "name", "chunkEscape:", "importsDefinition", "lf"]
  56408. }),
  56409. $globals.ChunkExporter);
  56410. $core.addMethod(
  56411. $core.method({
  56412. selector: "exportProtocol:on:",
  56413. protocol: 'output',
  56414. fn: function (aProtocol,aStream){
  56415. var self=this;
  56416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56417. return $core.withContext(function($ctx1) {
  56418. //>>excludeEnd("ctx");
  56419. self._exportProtocolPrologueOf_on_(aProtocol,aStream);
  56420. $recv($recv(aProtocol)._methods())._do_((function(method){
  56421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56422. return $core.withContext(function($ctx2) {
  56423. //>>excludeEnd("ctx");
  56424. return self._exportMethod_on_(method,aStream);
  56425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56426. }, function($ctx2) {$ctx2.fillBlock({method:method},$ctx1,1)});
  56427. //>>excludeEnd("ctx");
  56428. }));
  56429. self._exportProtocolEpilogueOf_on_(aProtocol,aStream);
  56430. return self;
  56431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56432. }, function($ctx1) {$ctx1.fill(self,"exportProtocol:on:",{aProtocol:aProtocol,aStream:aStream},$globals.ChunkExporter)});
  56433. //>>excludeEnd("ctx");
  56434. },
  56435. //>>excludeStart("ide", pragmas.excludeIdeData);
  56436. args: ["aProtocol", "aStream"],
  56437. 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",
  56438. referencedClasses: [],
  56439. //>>excludeEnd("ide");
  56440. messageSends: ["exportProtocolPrologueOf:on:", "do:", "methods", "exportMethod:on:", "exportProtocolEpilogueOf:on:"]
  56441. }),
  56442. $globals.ChunkExporter);
  56443. $core.addMethod(
  56444. $core.method({
  56445. selector: "exportProtocolEpilogueOf:on:",
  56446. protocol: 'output',
  56447. fn: function (aProtocol,aStream){
  56448. var self=this;
  56449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56450. return $core.withContext(function($ctx1) {
  56451. //>>excludeEnd("ctx");
  56452. var $1;
  56453. $recv(aStream)._nextPutAll_(" !");
  56454. $recv(aStream)._lf();
  56455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56456. $ctx1.sendIdx["lf"]=1;
  56457. //>>excludeEnd("ctx");
  56458. $1=$recv(aStream)._lf();
  56459. return self;
  56460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56461. }, function($ctx1) {$ctx1.fill(self,"exportProtocolEpilogueOf:on:",{aProtocol:aProtocol,aStream:aStream},$globals.ChunkExporter)});
  56462. //>>excludeEnd("ctx");
  56463. },
  56464. //>>excludeStart("ide", pragmas.excludeIdeData);
  56465. args: ["aProtocol", "aStream"],
  56466. source: "exportProtocolEpilogueOf: aProtocol on: aStream\x0a\x09aStream nextPutAll: ' !'; lf; lf",
  56467. referencedClasses: [],
  56468. //>>excludeEnd("ide");
  56469. messageSends: ["nextPutAll:", "lf"]
  56470. }),
  56471. $globals.ChunkExporter);
  56472. $core.addMethod(
  56473. $core.method({
  56474. selector: "exportProtocolPrologueOf:on:",
  56475. protocol: 'output',
  56476. fn: function (aProtocol,aStream){
  56477. var self=this;
  56478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56479. return $core.withContext(function($ctx1) {
  56480. //>>excludeEnd("ctx");
  56481. var $1,$3,$2;
  56482. $1="!".__comma(self._classNameFor_($recv(aProtocol)._theClass()));
  56483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56484. $ctx1.sendIdx[","]=1;
  56485. //>>excludeEnd("ctx");
  56486. $recv(aStream)._nextPutAll_($1);
  56487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56488. $ctx1.sendIdx["nextPutAll:"]=1;
  56489. //>>excludeEnd("ctx");
  56490. $3=$recv(" methodsFor: '".__comma($recv(aProtocol)._name())).__comma("'!");
  56491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56492. $ctx1.sendIdx[","]=2;
  56493. //>>excludeEnd("ctx");
  56494. $2=$recv(aStream)._nextPutAll_($3);
  56495. return self;
  56496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56497. }, function($ctx1) {$ctx1.fill(self,"exportProtocolPrologueOf:on:",{aProtocol:aProtocol,aStream:aStream},$globals.ChunkExporter)});
  56498. //>>excludeEnd("ctx");
  56499. },
  56500. //>>excludeStart("ide", pragmas.excludeIdeData);
  56501. args: ["aProtocol", "aStream"],
  56502. source: "exportProtocolPrologueOf: aProtocol on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '!', (self classNameFor: aProtocol theClass);\x0a\x09\x09nextPutAll: ' methodsFor: ''', aProtocol name, '''!'",
  56503. referencedClasses: [],
  56504. //>>excludeEnd("ide");
  56505. messageSends: ["nextPutAll:", ",", "classNameFor:", "theClass", "name"]
  56506. }),
  56507. $globals.ChunkExporter);
  56508. $core.addMethod(
  56509. $core.method({
  56510. selector: "exportProtocols:on:",
  56511. protocol: 'output',
  56512. fn: function (aCollection,aStream){
  56513. var self=this;
  56514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56515. return $core.withContext(function($ctx1) {
  56516. //>>excludeEnd("ctx");
  56517. $recv(aCollection)._do_((function(each){
  56518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56519. return $core.withContext(function($ctx2) {
  56520. //>>excludeEnd("ctx");
  56521. return self._exportProtocol_on_(each,aStream);
  56522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56523. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  56524. //>>excludeEnd("ctx");
  56525. }));
  56526. return self;
  56527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56528. }, function($ctx1) {$ctx1.fill(self,"exportProtocols:on:",{aCollection:aCollection,aStream:aStream},$globals.ChunkExporter)});
  56529. //>>excludeEnd("ctx");
  56530. },
  56531. //>>excludeStart("ide", pragmas.excludeIdeData);
  56532. args: ["aCollection", "aStream"],
  56533. source: "exportProtocols: aCollection on: aStream\x0a\x09aCollection do: [ :each |\x0a\x09\x09self exportProtocol: each on: aStream ]",
  56534. referencedClasses: [],
  56535. //>>excludeEnd("ide");
  56536. messageSends: ["do:", "exportProtocol:on:"]
  56537. }),
  56538. $globals.ChunkExporter);
  56539. $core.addMethod(
  56540. $core.method({
  56541. selector: "extensionCategoriesOfPackage:",
  56542. protocol: 'accessing',
  56543. fn: function (aPackage){
  56544. var self=this;
  56545. var name,map,result;
  56546. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  56547. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  56548. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  56549. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  56550. function $MethodCategory(){return $globals.MethodCategory||(typeof MethodCategory=="undefined"?nil:MethodCategory)}
  56551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56552. return $core.withContext(function($ctx1) {
  56553. //>>excludeEnd("ctx");
  56554. var $1,$2;
  56555. name=$recv(aPackage)._name();
  56556. result=$recv($OrderedCollection())._new();
  56557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56558. $ctx1.sendIdx["new"]=1;
  56559. //>>excludeEnd("ctx");
  56560. $recv($recv($Package())._sortedClasses_($recv($Smalltalk())._classes()))._do_((function(each){
  56561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56562. return $core.withContext(function($ctx2) {
  56563. //>>excludeEnd("ctx");
  56564. return $recv([each,$recv(each)._class()])._do_((function(aClass){
  56565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56566. return $core.withContext(function($ctx3) {
  56567. //>>excludeEnd("ctx");
  56568. map=$recv($Dictionary())._new();
  56569. map;
  56570. $recv(aClass)._protocolsDo_((function(category,methods){
  56571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56572. return $core.withContext(function($ctx4) {
  56573. //>>excludeEnd("ctx");
  56574. $1=$recv(category).__eq("*".__comma(name));
  56575. if($core.assert($1)){
  56576. return $recv(map)._at_put_(category,methods);
  56577. };
  56578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56579. }, function($ctx4) {$ctx4.fillBlock({category:category,methods:methods},$ctx3,3)});
  56580. //>>excludeEnd("ctx");
  56581. }));
  56582. return $recv(result)._addAll_($recv($recv($recv(map)._keys())._sorted_((function(a,b){
  56583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56584. return $core.withContext(function($ctx4) {
  56585. //>>excludeEnd("ctx");
  56586. return $recv(a).__lt_eq(b);
  56587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56588. }, function($ctx4) {$ctx4.fillBlock({a:a,b:b},$ctx3,5)});
  56589. //>>excludeEnd("ctx");
  56590. })))._collect_((function(category){
  56591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56592. return $core.withContext(function($ctx4) {
  56593. //>>excludeEnd("ctx");
  56594. return $recv($MethodCategory())._name_theClass_methods_(category,aClass,$recv(map)._at_(category));
  56595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56596. }, function($ctx4) {$ctx4.fillBlock({category:category},$ctx3,6)});
  56597. //>>excludeEnd("ctx");
  56598. })));
  56599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56600. }, function($ctx3) {$ctx3.fillBlock({aClass:aClass},$ctx2,2)});
  56601. //>>excludeEnd("ctx");
  56602. }));
  56603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56604. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  56605. //>>excludeEnd("ctx");
  56606. }));
  56607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56608. $ctx1.sendIdx["do:"]=1;
  56609. //>>excludeEnd("ctx");
  56610. $2=result;
  56611. return $2;
  56612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56613. }, function($ctx1) {$ctx1.fill(self,"extensionCategoriesOfPackage:",{aPackage:aPackage,name:name,map:map,result:result},$globals.ChunkExporter)});
  56614. //>>excludeEnd("ctx");
  56615. },
  56616. //>>excludeStart("ide", pragmas.excludeIdeData);
  56617. args: ["aPackage"],
  56618. 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",
  56619. referencedClasses: ["OrderedCollection", "Package", "Smalltalk", "Dictionary", "MethodCategory"],
  56620. //>>excludeEnd("ide");
  56621. messageSends: ["name", "new", "do:", "sortedClasses:", "classes", "class", "protocolsDo:", "ifTrue:", "=", ",", "at:put:", "addAll:", "collect:", "sorted:", "keys", "<=", "name:theClass:methods:", "at:"]
  56622. }),
  56623. $globals.ChunkExporter);
  56624. $core.addMethod(
  56625. $core.method({
  56626. selector: "ownCategoriesOfClass:",
  56627. protocol: 'accessing',
  56628. fn: function (aClass){
  56629. var self=this;
  56630. var map;
  56631. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  56632. function $MethodCategory(){return $globals.MethodCategory||(typeof MethodCategory=="undefined"?nil:MethodCategory)}
  56633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56634. return $core.withContext(function($ctx1) {
  56635. //>>excludeEnd("ctx");
  56636. var $1,$2;
  56637. map=$recv($Dictionary())._new();
  56638. $recv(aClass)._protocolsDo_((function(each,methods){
  56639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56640. return $core.withContext(function($ctx2) {
  56641. //>>excludeEnd("ctx");
  56642. $1=$recv(each)._match_("^\x5c*");
  56643. if(!$core.assert($1)){
  56644. return $recv(map)._at_put_(each,methods);
  56645. };
  56646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56647. }, function($ctx2) {$ctx2.fillBlock({each:each,methods:methods},$ctx1,1)});
  56648. //>>excludeEnd("ctx");
  56649. }));
  56650. $2=$recv($recv($recv(map)._keys())._sorted_((function(a,b){
  56651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56652. return $core.withContext(function($ctx2) {
  56653. //>>excludeEnd("ctx");
  56654. return $recv(a).__lt_eq(b);
  56655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56656. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,3)});
  56657. //>>excludeEnd("ctx");
  56658. })))._collect_((function(each){
  56659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56660. return $core.withContext(function($ctx2) {
  56661. //>>excludeEnd("ctx");
  56662. return $recv($MethodCategory())._name_theClass_methods_(each,aClass,$recv(map)._at_(each));
  56663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56664. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  56665. //>>excludeEnd("ctx");
  56666. }));
  56667. return $2;
  56668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56669. }, function($ctx1) {$ctx1.fill(self,"ownCategoriesOfClass:",{aClass:aClass,map:map},$globals.ChunkExporter)});
  56670. //>>excludeEnd("ctx");
  56671. },
  56672. //>>excludeStart("ide", pragmas.excludeIdeData);
  56673. args: ["aClass"],
  56674. 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) ]",
  56675. referencedClasses: ["Dictionary", "MethodCategory"],
  56676. //>>excludeEnd("ide");
  56677. messageSends: ["new", "protocolsDo:", "ifFalse:", "match:", "at:put:", "collect:", "sorted:", "keys", "<=", "name:theClass:methods:", "at:"]
  56678. }),
  56679. $globals.ChunkExporter);
  56680. $core.addMethod(
  56681. $core.method({
  56682. selector: "ownCategoriesOfMetaClass:",
  56683. protocol: 'accessing',
  56684. fn: function (aClass){
  56685. var self=this;
  56686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56687. return $core.withContext(function($ctx1) {
  56688. //>>excludeEnd("ctx");
  56689. var $1;
  56690. $1=self._ownCategoriesOfClass_($recv(aClass)._class());
  56691. return $1;
  56692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56693. }, function($ctx1) {$ctx1.fill(self,"ownCategoriesOfMetaClass:",{aClass:aClass},$globals.ChunkExporter)});
  56694. //>>excludeEnd("ctx");
  56695. },
  56696. //>>excludeStart("ide", pragmas.excludeIdeData);
  56697. args: ["aClass"],
  56698. source: "ownCategoriesOfMetaClass: aClass\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09^ self ownCategoriesOfClass: aClass class",
  56699. referencedClasses: [],
  56700. //>>excludeEnd("ide");
  56701. messageSends: ["ownCategoriesOfClass:", "class"]
  56702. }),
  56703. $globals.ChunkExporter);
  56704. $core.addMethod(
  56705. $core.method({
  56706. selector: "ownMethodProtocolsOfClass:",
  56707. protocol: 'accessing',
  56708. fn: function (aClass){
  56709. var self=this;
  56710. function $ExportMethodProtocol(){return $globals.ExportMethodProtocol||(typeof ExportMethodProtocol=="undefined"?nil:ExportMethodProtocol)}
  56711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56712. return $core.withContext(function($ctx1) {
  56713. //>>excludeEnd("ctx");
  56714. var $1;
  56715. $1=$recv($recv(aClass)._ownProtocols())._collect_((function(each){
  56716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56717. return $core.withContext(function($ctx2) {
  56718. //>>excludeEnd("ctx");
  56719. return $recv($ExportMethodProtocol())._name_theClass_(each,aClass);
  56720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56721. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  56722. //>>excludeEnd("ctx");
  56723. }));
  56724. return $1;
  56725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56726. }, function($ctx1) {$ctx1.fill(self,"ownMethodProtocolsOfClass:",{aClass:aClass},$globals.ChunkExporter)});
  56727. //>>excludeEnd("ctx");
  56728. },
  56729. //>>excludeStart("ide", pragmas.excludeIdeData);
  56730. args: ["aClass"],
  56731. 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 ]",
  56732. referencedClasses: ["ExportMethodProtocol"],
  56733. //>>excludeEnd("ide");
  56734. messageSends: ["collect:", "ownProtocols", "name:theClass:"]
  56735. }),
  56736. $globals.ChunkExporter);
  56737. $core.addClass('Exporter', $globals.AbstractExporter, [], 'Platform-ImportExport');
  56738. //>>excludeStart("ide", pragmas.excludeIdeData);
  56739. $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.).";
  56740. //>>excludeEnd("ide");
  56741. $core.addMethod(
  56742. $core.method({
  56743. selector: "exportDefinitionOf:on:",
  56744. protocol: 'output',
  56745. fn: function (aClass,aStream){
  56746. var self=this;
  56747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56748. return $core.withContext(function($ctx1) {
  56749. //>>excludeEnd("ctx");
  56750. var $2,$1,$3,$4,$6,$5,$7,$9,$8,$10;
  56751. $recv(aStream)._lf();
  56752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56753. $ctx1.sendIdx["lf"]=1;
  56754. //>>excludeEnd("ctx");
  56755. $recv(aStream)._nextPutAll_("$core.addClass(");
  56756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56757. $ctx1.sendIdx["nextPutAll:"]=1;
  56758. //>>excludeEnd("ctx");
  56759. $2="'".__comma(self._classNameFor_(aClass));
  56760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56761. $ctx1.sendIdx[","]=2;
  56762. //>>excludeEnd("ctx");
  56763. $1=$recv($2).__comma("', ");
  56764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56765. $ctx1.sendIdx[","]=1;
  56766. //>>excludeEnd("ctx");
  56767. $recv(aStream)._nextPutAll_($1);
  56768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56769. $ctx1.sendIdx["nextPutAll:"]=2;
  56770. //>>excludeEnd("ctx");
  56771. $3=self._jsClassNameFor_($recv(aClass)._superclass());
  56772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56773. $ctx1.sendIdx["jsClassNameFor:"]=1;
  56774. //>>excludeEnd("ctx");
  56775. $recv(aStream)._nextPutAll_($3);
  56776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56777. $ctx1.sendIdx["nextPutAll:"]=3;
  56778. //>>excludeEnd("ctx");
  56779. $4=$recv(aStream)._nextPutAll_(", [");
  56780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56781. $ctx1.sendIdx["nextPutAll:"]=4;
  56782. //>>excludeEnd("ctx");
  56783. $recv($recv(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
  56784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56785. return $core.withContext(function($ctx2) {
  56786. //>>excludeEnd("ctx");
  56787. $6="'".__comma(each);
  56788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56789. $ctx2.sendIdx[","]=4;
  56790. //>>excludeEnd("ctx");
  56791. $5=$recv($6).__comma("'");
  56792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56793. $ctx2.sendIdx[","]=3;
  56794. //>>excludeEnd("ctx");
  56795. return $recv(aStream)._nextPutAll_($5);
  56796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56797. $ctx2.sendIdx["nextPutAll:"]=5;
  56798. //>>excludeEnd("ctx");
  56799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56800. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  56801. //>>excludeEnd("ctx");
  56802. }),(function(){
  56803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56804. return $core.withContext(function($ctx2) {
  56805. //>>excludeEnd("ctx");
  56806. return $recv(aStream)._nextPutAll_(", ");
  56807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56808. $ctx2.sendIdx["nextPutAll:"]=6;
  56809. //>>excludeEnd("ctx");
  56810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56811. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  56812. //>>excludeEnd("ctx");
  56813. }));
  56814. $recv(aStream)._nextPutAll_("], '");
  56815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56816. $ctx1.sendIdx["nextPutAll:"]=7;
  56817. //>>excludeEnd("ctx");
  56818. $recv(aStream)._nextPutAll_($recv($recv(aClass)._category()).__comma("'"));
  56819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56820. $ctx1.sendIdx["nextPutAll:"]=8;
  56821. //>>excludeEnd("ctx");
  56822. $7=$recv(aStream)._nextPutAll_(");");
  56823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56824. $ctx1.sendIdx["nextPutAll:"]=9;
  56825. //>>excludeEnd("ctx");
  56826. $9=$recv(aClass)._comment();
  56827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56828. $ctx1.sendIdx["comment"]=1;
  56829. //>>excludeEnd("ctx");
  56830. $8=$recv($9)._notEmpty();
  56831. if($core.assert($8)){
  56832. $recv(aStream)._lf();
  56833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56834. $ctx1.sendIdx["lf"]=2;
  56835. //>>excludeEnd("ctx");
  56836. $recv(aStream)._nextPutAll_("//>>excludeStart(\x22ide\x22, pragmas.excludeIdeData);");
  56837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56838. $ctx1.sendIdx["nextPutAll:"]=10;
  56839. //>>excludeEnd("ctx");
  56840. $recv(aStream)._lf();
  56841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56842. $ctx1.sendIdx["lf"]=3;
  56843. //>>excludeEnd("ctx");
  56844. $recv(aStream)._nextPutAll_(self._jsClassNameFor_(aClass));
  56845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56846. $ctx1.sendIdx["nextPutAll:"]=11;
  56847. //>>excludeEnd("ctx");
  56848. $recv(aStream)._nextPutAll_(".comment=");
  56849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56850. $ctx1.sendIdx["nextPutAll:"]=12;
  56851. //>>excludeEnd("ctx");
  56852. $recv(aStream)._nextPutAll_($recv($recv($recv(aClass)._comment())._crlfSanitized())._asJavascript());
  56853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56854. $ctx1.sendIdx["nextPutAll:"]=13;
  56855. //>>excludeEnd("ctx");
  56856. $recv(aStream)._nextPutAll_(";");
  56857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56858. $ctx1.sendIdx["nextPutAll:"]=14;
  56859. //>>excludeEnd("ctx");
  56860. $recv(aStream)._lf();
  56861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56862. $ctx1.sendIdx["lf"]=4;
  56863. //>>excludeEnd("ctx");
  56864. $10=$recv(aStream)._nextPutAll_("//>>excludeEnd(\x22ide\x22);");
  56865. $10;
  56866. };
  56867. $recv(aStream)._lf();
  56868. return self;
  56869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56870. }, function($ctx1) {$ctx1.fill(self,"exportDefinitionOf:on:",{aClass:aClass,aStream:aStream},$globals.Exporter)});
  56871. //>>excludeEnd("ctx");
  56872. },
  56873. //>>excludeStart("ide", pragmas.excludeIdeData);
  56874. args: ["aClass", "aStream"],
  56875. 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",
  56876. referencedClasses: [],
  56877. //>>excludeEnd("ide");
  56878. messageSends: ["lf", "nextPutAll:", ",", "classNameFor:", "jsClassNameFor:", "superclass", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "asJavascript", "crlfSanitized"]
  56879. }),
  56880. $globals.Exporter);
  56881. $core.addMethod(
  56882. $core.method({
  56883. selector: "exportMetaDefinitionOf:on:",
  56884. protocol: 'output',
  56885. fn: function (aClass,aStream){
  56886. var self=this;
  56887. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  56888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56889. return $core.withContext(function($ctx1) {
  56890. //>>excludeEnd("ctx");
  56891. var $3,$2,$1,$5,$4,$6,$8,$7;
  56892. $recv(aStream)._lf();
  56893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56894. $ctx1.sendIdx["lf"]=1;
  56895. //>>excludeEnd("ctx");
  56896. $3=$recv(aClass)._class();
  56897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56898. $ctx1.sendIdx["class"]=1;
  56899. //>>excludeEnd("ctx");
  56900. $2=$recv($3)._instanceVariableNames();
  56901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56902. $ctx1.sendIdx["instanceVariableNames"]=1;
  56903. //>>excludeEnd("ctx");
  56904. $1=$recv($2)._isEmpty();
  56905. if(!$core.assert($1)){
  56906. $5=$recv(aClass)._class();
  56907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56908. $ctx1.sendIdx["class"]=2;
  56909. //>>excludeEnd("ctx");
  56910. $4=self._jsClassNameFor_($5);
  56911. $recv(aStream)._nextPutAll_($4);
  56912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56913. $ctx1.sendIdx["nextPutAll:"]=1;
  56914. //>>excludeEnd("ctx");
  56915. $6=$recv(aStream)._nextPutAll_(".iVarNames = [");
  56916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56917. $ctx1.sendIdx["nextPutAll:"]=2;
  56918. //>>excludeEnd("ctx");
  56919. $6;
  56920. $recv($recv($recv(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
  56921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56922. return $core.withContext(function($ctx2) {
  56923. //>>excludeEnd("ctx");
  56924. $8="'".__comma(each);
  56925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56926. $ctx2.sendIdx[","]=2;
  56927. //>>excludeEnd("ctx");
  56928. $7=$recv($8).__comma("'");
  56929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56930. $ctx2.sendIdx[","]=1;
  56931. //>>excludeEnd("ctx");
  56932. return $recv(aStream)._nextPutAll_($7);
  56933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56934. $ctx2.sendIdx["nextPutAll:"]=3;
  56935. //>>excludeEnd("ctx");
  56936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56937. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  56938. //>>excludeEnd("ctx");
  56939. }),(function(){
  56940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56941. return $core.withContext(function($ctx2) {
  56942. //>>excludeEnd("ctx");
  56943. return $recv(aStream)._nextPutAll_(",");
  56944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56945. $ctx2.sendIdx["nextPutAll:"]=4;
  56946. //>>excludeEnd("ctx");
  56947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56948. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  56949. //>>excludeEnd("ctx");
  56950. }));
  56951. $recv(aStream)._nextPutAll_("];".__comma($recv($String())._lf()));
  56952. };
  56953. return self;
  56954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56955. }, function($ctx1) {$ctx1.fill(self,"exportMetaDefinitionOf:on:",{aClass:aClass,aStream:aStream},$globals.Exporter)});
  56956. //>>excludeEnd("ctx");
  56957. },
  56958. //>>excludeStart("ide", pragmas.excludeIdeData);
  56959. args: ["aClass", "aStream"],
  56960. 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 ]",
  56961. referencedClasses: ["String"],
  56962. //>>excludeEnd("ide");
  56963. messageSends: ["lf", "ifFalse:", "isEmpty", "instanceVariableNames", "class", "nextPutAll:", "jsClassNameFor:", "do:separatedBy:", ","]
  56964. }),
  56965. $globals.Exporter);
  56966. $core.addMethod(
  56967. $core.method({
  56968. selector: "exportMethod:on:",
  56969. protocol: 'output',
  56970. fn: function (aMethod,aStream){
  56971. var self=this;
  56972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56973. return $core.withContext(function($ctx1) {
  56974. //>>excludeEnd("ctx");
  56975. var $3,$2,$1,$5,$4,$7,$6,$10,$9,$8,$13,$12,$11,$16,$15,$14,$17;
  56976. $recv(aStream)._nextPutAll_("$core.addMethod(");
  56977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56978. $ctx1.sendIdx["nextPutAll:"]=1;
  56979. //>>excludeEnd("ctx");
  56980. $recv(aStream)._lf();
  56981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56982. $ctx1.sendIdx["lf"]=1;
  56983. //>>excludeEnd("ctx");
  56984. $recv(aStream)._nextPutAll_("$core.method({");
  56985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56986. $ctx1.sendIdx["nextPutAll:"]=2;
  56987. //>>excludeEnd("ctx");
  56988. $recv(aStream)._lf();
  56989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56990. $ctx1.sendIdx["lf"]=2;
  56991. //>>excludeEnd("ctx");
  56992. $3=$recv($recv(aMethod)._selector())._asJavascript();
  56993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56994. $ctx1.sendIdx["asJavascript"]=1;
  56995. //>>excludeEnd("ctx");
  56996. $2="selector: ".__comma($3);
  56997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56998. $ctx1.sendIdx[","]=2;
  56999. //>>excludeEnd("ctx");
  57000. $1=$recv($2).__comma(",");
  57001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57002. $ctx1.sendIdx[","]=1;
  57003. //>>excludeEnd("ctx");
  57004. $recv(aStream)._nextPutAll_($1);
  57005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57006. $ctx1.sendIdx["nextPutAll:"]=3;
  57007. //>>excludeEnd("ctx");
  57008. $recv(aStream)._lf();
  57009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57010. $ctx1.sendIdx["lf"]=3;
  57011. //>>excludeEnd("ctx");
  57012. $5="protocol: '".__comma($recv(aMethod)._protocol());
  57013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57014. $ctx1.sendIdx[","]=4;
  57015. //>>excludeEnd("ctx");
  57016. $4=$recv($5).__comma("',");
  57017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57018. $ctx1.sendIdx[","]=3;
  57019. //>>excludeEnd("ctx");
  57020. $recv(aStream)._nextPutAll_($4);
  57021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57022. $ctx1.sendIdx["nextPutAll:"]=4;
  57023. //>>excludeEnd("ctx");
  57024. $recv(aStream)._lf();
  57025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57026. $ctx1.sendIdx["lf"]=4;
  57027. //>>excludeEnd("ctx");
  57028. $7="fn: ".__comma($recv($recv(aMethod)._fn())._compiledSource());
  57029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57030. $ctx1.sendIdx[","]=6;
  57031. //>>excludeEnd("ctx");
  57032. $6=$recv($7).__comma(",");
  57033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57034. $ctx1.sendIdx[","]=5;
  57035. //>>excludeEnd("ctx");
  57036. $recv(aStream)._nextPutAll_($6);
  57037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57038. $ctx1.sendIdx["nextPutAll:"]=5;
  57039. //>>excludeEnd("ctx");
  57040. $recv(aStream)._lf();
  57041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57042. $ctx1.sendIdx["lf"]=5;
  57043. //>>excludeEnd("ctx");
  57044. $recv(aStream)._nextPutAll_("//>>excludeStart(\x22ide\x22, pragmas.excludeIdeData);");
  57045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57046. $ctx1.sendIdx["nextPutAll:"]=6;
  57047. //>>excludeEnd("ctx");
  57048. $recv(aStream)._lf();
  57049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57050. $ctx1.sendIdx["lf"]=6;
  57051. //>>excludeEnd("ctx");
  57052. $10=$recv($recv(aMethod)._arguments())._asJavascript();
  57053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57054. $ctx1.sendIdx["asJavascript"]=2;
  57055. //>>excludeEnd("ctx");
  57056. $9="args: ".__comma($10);
  57057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57058. $ctx1.sendIdx[","]=8;
  57059. //>>excludeEnd("ctx");
  57060. $8=$recv($9).__comma(",");
  57061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57062. $ctx1.sendIdx[","]=7;
  57063. //>>excludeEnd("ctx");
  57064. $recv(aStream)._nextPutAll_($8);
  57065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57066. $ctx1.sendIdx["nextPutAll:"]=7;
  57067. //>>excludeEnd("ctx");
  57068. $recv(aStream)._lf();
  57069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57070. $ctx1.sendIdx["lf"]=7;
  57071. //>>excludeEnd("ctx");
  57072. $13=$recv($recv(aMethod)._source())._asJavascript();
  57073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57074. $ctx1.sendIdx["asJavascript"]=3;
  57075. //>>excludeEnd("ctx");
  57076. $12="source: ".__comma($13);
  57077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57078. $ctx1.sendIdx[","]=10;
  57079. //>>excludeEnd("ctx");
  57080. $11=$recv($12).__comma(",");
  57081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57082. $ctx1.sendIdx[","]=9;
  57083. //>>excludeEnd("ctx");
  57084. $recv(aStream)._nextPutAll_($11);
  57085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57086. $ctx1.sendIdx["nextPutAll:"]=8;
  57087. //>>excludeEnd("ctx");
  57088. $recv(aStream)._lf();
  57089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57090. $ctx1.sendIdx["lf"]=8;
  57091. //>>excludeEnd("ctx");
  57092. $16=$recv($recv(aMethod)._referencedClasses())._asJavascript();
  57093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57094. $ctx1.sendIdx["asJavascript"]=4;
  57095. //>>excludeEnd("ctx");
  57096. $15="referencedClasses: ".__comma($16);
  57097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57098. $ctx1.sendIdx[","]=12;
  57099. //>>excludeEnd("ctx");
  57100. $14=$recv($15).__comma(",");
  57101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57102. $ctx1.sendIdx[","]=11;
  57103. //>>excludeEnd("ctx");
  57104. $recv(aStream)._nextPutAll_($14);
  57105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57106. $ctx1.sendIdx["nextPutAll:"]=9;
  57107. //>>excludeEnd("ctx");
  57108. $recv(aStream)._lf();
  57109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57110. $ctx1.sendIdx["lf"]=9;
  57111. //>>excludeEnd("ctx");
  57112. $recv(aStream)._nextPutAll_("//>>excludeEnd(\x22ide\x22);");
  57113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57114. $ctx1.sendIdx["nextPutAll:"]=10;
  57115. //>>excludeEnd("ctx");
  57116. $recv(aStream)._lf();
  57117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57118. $ctx1.sendIdx["lf"]=10;
  57119. //>>excludeEnd("ctx");
  57120. $recv(aStream)._nextPutAll_("messageSends: ".__comma($recv($recv(aMethod)._messageSends())._asJavascript()));
  57121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57122. $ctx1.sendIdx["nextPutAll:"]=11;
  57123. //>>excludeEnd("ctx");
  57124. $recv(aStream)._lf();
  57125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57126. $ctx1.sendIdx["lf"]=11;
  57127. //>>excludeEnd("ctx");
  57128. $recv(aStream)._nextPutAll_("}),");
  57129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57130. $ctx1.sendIdx["nextPutAll:"]=12;
  57131. //>>excludeEnd("ctx");
  57132. $recv(aStream)._lf();
  57133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57134. $ctx1.sendIdx["lf"]=12;
  57135. //>>excludeEnd("ctx");
  57136. $recv(aStream)._nextPutAll_(self._jsClassNameFor_($recv(aMethod)._methodClass()));
  57137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57138. $ctx1.sendIdx["nextPutAll:"]=13;
  57139. //>>excludeEnd("ctx");
  57140. $recv(aStream)._nextPutAll_(");");
  57141. $recv(aStream)._lf();
  57142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57143. $ctx1.sendIdx["lf"]=13;
  57144. //>>excludeEnd("ctx");
  57145. $17=$recv(aStream)._lf();
  57146. return self;
  57147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57148. }, function($ctx1) {$ctx1.fill(self,"exportMethod:on:",{aMethod:aMethod,aStream:aStream},$globals.Exporter)});
  57149. //>>excludeEnd("ctx");
  57150. },
  57151. //>>excludeStart("ide", pragmas.excludeIdeData);
  57152. args: ["aMethod", "aStream"],
  57153. 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",
  57154. referencedClasses: [],
  57155. //>>excludeEnd("ide");
  57156. messageSends: ["nextPutAll:", "lf", ",", "asJavascript", "selector", "protocol", "compiledSource", "fn", "arguments", "source", "referencedClasses", "messageSends", "jsClassNameFor:", "methodClass"]
  57157. }),
  57158. $globals.Exporter);
  57159. $core.addMethod(
  57160. $core.method({
  57161. selector: "exportPackage:on:",
  57162. protocol: 'output',
  57163. fn: function (aPackage,aStream){
  57164. var self=this;
  57165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57166. return $core.withContext(function($ctx1) {
  57167. //>>excludeEnd("ctx");
  57168. var $1,$2;
  57169. self._exportPackagePrologueOf_on_(aPackage,aStream);
  57170. self._exportPackageDefinitionOf_on_(aPackage,aStream);
  57171. self._exportPackageContextOf_on_(aPackage,aStream);
  57172. self._exportPackageImportsOf_on_(aPackage,aStream);
  57173. $1=self._exportPackageTransportOf_on_(aPackage,aStream);
  57174. $recv($recv(aPackage)._sortedClasses())._do_((function(each){
  57175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57176. return $core.withContext(function($ctx2) {
  57177. //>>excludeEnd("ctx");
  57178. self._exportDefinitionOf_on_(each,aStream);
  57179. $2=$recv(each)._ownMethods();
  57180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57181. $ctx2.sendIdx["ownMethods"]=1;
  57182. //>>excludeEnd("ctx");
  57183. $recv($2)._do_((function(method){
  57184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57185. return $core.withContext(function($ctx3) {
  57186. //>>excludeEnd("ctx");
  57187. return self._exportMethod_on_(method,aStream);
  57188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57189. $ctx3.sendIdx["exportMethod:on:"]=1;
  57190. //>>excludeEnd("ctx");
  57191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57192. }, function($ctx3) {$ctx3.fillBlock({method:method},$ctx2,2)});
  57193. //>>excludeEnd("ctx");
  57194. }));
  57195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57196. $ctx2.sendIdx["do:"]=2;
  57197. //>>excludeEnd("ctx");
  57198. self._exportMetaDefinitionOf_on_(each,aStream);
  57199. return $recv($recv($recv(each)._class())._ownMethods())._do_((function(method){
  57200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57201. return $core.withContext(function($ctx3) {
  57202. //>>excludeEnd("ctx");
  57203. return self._exportMethod_on_(method,aStream);
  57204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57205. $ctx3.sendIdx["exportMethod:on:"]=2;
  57206. //>>excludeEnd("ctx");
  57207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57208. }, function($ctx3) {$ctx3.fillBlock({method:method},$ctx2,3)});
  57209. //>>excludeEnd("ctx");
  57210. }));
  57211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57212. $ctx2.sendIdx["do:"]=3;
  57213. //>>excludeEnd("ctx");
  57214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57215. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  57216. //>>excludeEnd("ctx");
  57217. }));
  57218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57219. $ctx1.sendIdx["do:"]=1;
  57220. //>>excludeEnd("ctx");
  57221. $recv(self._extensionMethodsOfPackage_(aPackage))._do_((function(each){
  57222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57223. return $core.withContext(function($ctx2) {
  57224. //>>excludeEnd("ctx");
  57225. return self._exportMethod_on_(each,aStream);
  57226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57227. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  57228. //>>excludeEnd("ctx");
  57229. }));
  57230. self._exportPackageEpilogueOf_on_(aPackage,aStream);
  57231. return self;
  57232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57233. }, function($ctx1) {$ctx1.fill(self,"exportPackage:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  57234. //>>excludeEnd("ctx");
  57235. },
  57236. //>>excludeStart("ide", pragmas.excludeIdeData);
  57237. args: ["aPackage", "aStream"],
  57238. source: "exportPackage: aPackage on: aStream\x0a\x09\x0a\x09self \x0a\x09\x09exportPackagePrologueOf: aPackage on: aStream;\x0a\x09\x09exportPackageDefinitionOf: aPackage on: aStream;\x0a\x09\x09exportPackageContextOf: aPackage on: aStream;\x0a\x09\x09exportPackageImportsOf: 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",
  57239. referencedClasses: [],
  57240. //>>excludeEnd("ide");
  57241. messageSends: ["exportPackagePrologueOf:on:", "exportPackageDefinitionOf:on:", "exportPackageContextOf:on:", "exportPackageImportsOf:on:", "exportPackageTransportOf:on:", "do:", "sortedClasses", "exportDefinitionOf:on:", "ownMethods", "exportMethod:on:", "exportMetaDefinitionOf:on:", "class", "extensionMethodsOfPackage:", "exportPackageEpilogueOf:on:"]
  57242. }),
  57243. $globals.Exporter);
  57244. $core.addMethod(
  57245. $core.method({
  57246. selector: "exportPackageContextOf:on:",
  57247. protocol: 'output',
  57248. fn: function (aPackage,aStream){
  57249. var self=this;
  57250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57251. return $core.withContext(function($ctx1) {
  57252. //>>excludeEnd("ctx");
  57253. var $1;
  57254. $recv(aStream)._nextPutAll_("$core.packages[");
  57255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57256. $ctx1.sendIdx["nextPutAll:"]=1;
  57257. //>>excludeEnd("ctx");
  57258. $recv(aStream)._nextPutAll_($recv($recv(aPackage)._name())._asJavascript());
  57259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57260. $ctx1.sendIdx["nextPutAll:"]=2;
  57261. //>>excludeEnd("ctx");
  57262. $recv(aStream)._nextPutAll_("].innerEval = ");
  57263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57264. $ctx1.sendIdx["nextPutAll:"]=3;
  57265. //>>excludeEnd("ctx");
  57266. $recv(aStream)._nextPutAll_("function (expr) { return eval(expr); }");
  57267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57268. $ctx1.sendIdx["nextPutAll:"]=4;
  57269. //>>excludeEnd("ctx");
  57270. $recv(aStream)._nextPutAll_(";");
  57271. $1=$recv(aStream)._lf();
  57272. return self;
  57273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57274. }, function($ctx1) {$ctx1.fill(self,"exportPackageContextOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  57275. //>>excludeEnd("ctx");
  57276. },
  57277. //>>excludeStart("ide", pragmas.excludeIdeData);
  57278. args: ["aPackage", "aStream"],
  57279. source: "exportPackageContextOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '$core.packages[';\x0a\x09\x09nextPutAll: aPackage name asJavascript;\x0a\x09\x09nextPutAll: '].innerEval = ';\x0a\x09\x09nextPutAll: 'function (expr) { return eval(expr); }';\x0a\x09\x09nextPutAll: ';';\x0a\x09\x09lf",
  57280. referencedClasses: [],
  57281. //>>excludeEnd("ide");
  57282. messageSends: ["nextPutAll:", "asJavascript", "name", "lf"]
  57283. }),
  57284. $globals.Exporter);
  57285. $core.addMethod(
  57286. $core.method({
  57287. selector: "exportPackageDefinitionOf:on:",
  57288. protocol: 'output',
  57289. fn: function (aPackage,aStream){
  57290. var self=this;
  57291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57292. return $core.withContext(function($ctx1) {
  57293. //>>excludeEnd("ctx");
  57294. var $1,$2;
  57295. $recv(aStream)._nextPutAll_("$core.addPackage(");
  57296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57297. $ctx1.sendIdx["nextPutAll:"]=1;
  57298. //>>excludeEnd("ctx");
  57299. $1=$recv("'".__comma($recv(aPackage)._name())).__comma("');");
  57300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57301. $ctx1.sendIdx[","]=1;
  57302. //>>excludeEnd("ctx");
  57303. $recv(aStream)._nextPutAll_($1);
  57304. $2=$recv(aStream)._lf();
  57305. return self;
  57306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57307. }, function($ctx1) {$ctx1.fill(self,"exportPackageDefinitionOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  57308. //>>excludeEnd("ctx");
  57309. },
  57310. //>>excludeStart("ide", pragmas.excludeIdeData);
  57311. args: ["aPackage", "aStream"],
  57312. source: "exportPackageDefinitionOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '$core.addPackage(';\x0a\x09\x09nextPutAll: '''', aPackage name, ''');';\x0a\x09\x09lf",
  57313. referencedClasses: [],
  57314. //>>excludeEnd("ide");
  57315. messageSends: ["nextPutAll:", ",", "name", "lf"]
  57316. }),
  57317. $globals.Exporter);
  57318. $core.addMethod(
  57319. $core.method({
  57320. selector: "exportPackageEpilogueOf:on:",
  57321. protocol: 'output',
  57322. fn: function (aPackage,aStream){
  57323. var self=this;
  57324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57325. return $core.withContext(function($ctx1) {
  57326. //>>excludeEnd("ctx");
  57327. self._subclassResponsibility();
  57328. return self;
  57329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57330. }, function($ctx1) {$ctx1.fill(self,"exportPackageEpilogueOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  57331. //>>excludeEnd("ctx");
  57332. },
  57333. //>>excludeStart("ide", pragmas.excludeIdeData);
  57334. args: ["aPackage", "aStream"],
  57335. source: "exportPackageEpilogueOf: aPackage on: aStream\x0a\x09self subclassResponsibility",
  57336. referencedClasses: [],
  57337. //>>excludeEnd("ide");
  57338. messageSends: ["subclassResponsibility"]
  57339. }),
  57340. $globals.Exporter);
  57341. $core.addMethod(
  57342. $core.method({
  57343. selector: "exportPackageImportsOf:on:",
  57344. protocol: 'output',
  57345. fn: function (aPackage,aStream){
  57346. var self=this;
  57347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57348. return $core.withContext(function($ctx1) {
  57349. //>>excludeEnd("ctx");
  57350. var $1,$2;
  57351. $recv($recv(aPackage)._importsAsJson())._ifNotEmpty_((function(imports){
  57352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57353. return $core.withContext(function($ctx2) {
  57354. //>>excludeEnd("ctx");
  57355. $recv(aStream)._nextPutAll_("$core.packages[");
  57356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57357. $ctx2.sendIdx["nextPutAll:"]=1;
  57358. //>>excludeEnd("ctx");
  57359. $1=$recv($recv(aPackage)._name())._asJavascript();
  57360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57361. $ctx2.sendIdx["asJavascript"]=1;
  57362. //>>excludeEnd("ctx");
  57363. $recv(aStream)._nextPutAll_($1);
  57364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57365. $ctx2.sendIdx["nextPutAll:"]=2;
  57366. //>>excludeEnd("ctx");
  57367. $recv(aStream)._nextPutAll_("].imports = ");
  57368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57369. $ctx2.sendIdx["nextPutAll:"]=3;
  57370. //>>excludeEnd("ctx");
  57371. $recv(aStream)._nextPutAll_($recv(imports)._asJavascript());
  57372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57373. $ctx2.sendIdx["nextPutAll:"]=4;
  57374. //>>excludeEnd("ctx");
  57375. $recv(aStream)._nextPutAll_(";");
  57376. $2=$recv(aStream)._lf();
  57377. return $2;
  57378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57379. }, function($ctx2) {$ctx2.fillBlock({imports:imports},$ctx1,1)});
  57380. //>>excludeEnd("ctx");
  57381. }));
  57382. return self;
  57383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57384. }, function($ctx1) {$ctx1.fill(self,"exportPackageImportsOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  57385. //>>excludeEnd("ctx");
  57386. },
  57387. //>>excludeStart("ide", pragmas.excludeIdeData);
  57388. args: ["aPackage", "aStream"],
  57389. source: "exportPackageImportsOf: aPackage on: aStream\x0a\x09aPackage importsAsJson ifNotEmpty: [ :imports |\x0a\x09\x09aStream\x0a\x09\x09\x09nextPutAll: '$core.packages[';\x0a\x09\x09\x09nextPutAll: aPackage name asJavascript;\x0a\x09\x09\x09nextPutAll: '].imports = ';\x0a\x09\x09\x09nextPutAll: imports asJavascript;\x0a\x09\x09\x09nextPutAll: ';';\x0a\x09\x09\x09lf ]",
  57390. referencedClasses: [],
  57391. //>>excludeEnd("ide");
  57392. messageSends: ["ifNotEmpty:", "importsAsJson", "nextPutAll:", "asJavascript", "name", "lf"]
  57393. }),
  57394. $globals.Exporter);
  57395. $core.addMethod(
  57396. $core.method({
  57397. selector: "exportPackagePrologueOf:on:",
  57398. protocol: 'output',
  57399. fn: function (aPackage,aStream){
  57400. var self=this;
  57401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57402. return $core.withContext(function($ctx1) {
  57403. //>>excludeEnd("ctx");
  57404. self._subclassResponsibility();
  57405. return self;
  57406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57407. }, function($ctx1) {$ctx1.fill(self,"exportPackagePrologueOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  57408. //>>excludeEnd("ctx");
  57409. },
  57410. //>>excludeStart("ide", pragmas.excludeIdeData);
  57411. args: ["aPackage", "aStream"],
  57412. source: "exportPackagePrologueOf: aPackage on: aStream\x0a\x09self subclassResponsibility",
  57413. referencedClasses: [],
  57414. //>>excludeEnd("ide");
  57415. messageSends: ["subclassResponsibility"]
  57416. }),
  57417. $globals.Exporter);
  57418. $core.addMethod(
  57419. $core.method({
  57420. selector: "exportPackageTransportOf:on:",
  57421. protocol: 'output',
  57422. fn: function (aPackage,aStream){
  57423. var self=this;
  57424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57425. return $core.withContext(function($ctx1) {
  57426. //>>excludeEnd("ctx");
  57427. var $1;
  57428. $recv(aStream)._nextPutAll_("$core.packages[");
  57429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57430. $ctx1.sendIdx["nextPutAll:"]=1;
  57431. //>>excludeEnd("ctx");
  57432. $recv(aStream)._nextPutAll_($recv($recv(aPackage)._name())._asJavascript());
  57433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57434. $ctx1.sendIdx["nextPutAll:"]=2;
  57435. //>>excludeEnd("ctx");
  57436. $recv(aStream)._nextPutAll_("].transport = ");
  57437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57438. $ctx1.sendIdx["nextPutAll:"]=3;
  57439. //>>excludeEnd("ctx");
  57440. $recv(aStream)._nextPutAll_($recv($recv(aPackage)._transport())._asJSONString());
  57441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57442. $ctx1.sendIdx["nextPutAll:"]=4;
  57443. //>>excludeEnd("ctx");
  57444. $recv(aStream)._nextPutAll_(";");
  57445. $1=$recv(aStream)._lf();
  57446. return self;
  57447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57448. }, function($ctx1) {$ctx1.fill(self,"exportPackageTransportOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  57449. //>>excludeEnd("ctx");
  57450. },
  57451. //>>excludeStart("ide", pragmas.excludeIdeData);
  57452. args: ["aPackage", "aStream"],
  57453. 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",
  57454. referencedClasses: [],
  57455. //>>excludeEnd("ide");
  57456. messageSends: ["nextPutAll:", "asJavascript", "name", "asJSONString", "transport", "lf"]
  57457. }),
  57458. $globals.Exporter);
  57459. $core.addMethod(
  57460. $core.method({
  57461. selector: "jsClassNameFor:",
  57462. protocol: 'convenience',
  57463. fn: function (aClass){
  57464. var self=this;
  57465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57466. return $core.withContext(function($ctx1) {
  57467. //>>excludeEnd("ctx");
  57468. var $2,$1,$receiver;
  57469. $2=$recv(aClass)._isMetaclass();
  57470. if($core.assert($2)){
  57471. $1=$recv(self._jsClassNameFor_($recv(aClass)._instanceClass())).__comma(".klass");
  57472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57473. $ctx1.sendIdx[","]=1;
  57474. //>>excludeEnd("ctx");
  57475. } else {
  57476. if(($receiver = aClass) == null || $receiver.isNil){
  57477. $1="null";
  57478. } else {
  57479. $1="$globals.".__comma($recv(aClass)._name());
  57480. };
  57481. };
  57482. return $1;
  57483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57484. }, function($ctx1) {$ctx1.fill(self,"jsClassNameFor:",{aClass:aClass},$globals.Exporter)});
  57485. //>>excludeEnd("ctx");
  57486. },
  57487. //>>excludeStart("ide", pragmas.excludeIdeData);
  57488. args: ["aClass"],
  57489. 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 ] ]",
  57490. referencedClasses: [],
  57491. //>>excludeEnd("ide");
  57492. messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "jsClassNameFor:", "instanceClass", "ifNil:ifNotNil:", "name"]
  57493. }),
  57494. $globals.Exporter);
  57495. $core.addMethod(
  57496. $core.method({
  57497. selector: "ownMethodsOfClass:",
  57498. protocol: 'accessing',
  57499. fn: function (aClass){
  57500. var self=this;
  57501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57502. return $core.withContext(function($ctx1) {
  57503. //>>excludeEnd("ctx");
  57504. var $2,$1;
  57505. $1=$recv($recv($recv($recv(aClass)._methodDictionary())._values())._sorted_((function(a,b){
  57506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57507. return $core.withContext(function($ctx2) {
  57508. //>>excludeEnd("ctx");
  57509. $2=$recv(a)._selector();
  57510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57511. $ctx2.sendIdx["selector"]=1;
  57512. //>>excludeEnd("ctx");
  57513. return $recv($2).__lt_eq($recv(b)._selector());
  57514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57515. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  57516. //>>excludeEnd("ctx");
  57517. })))._reject_((function(each){
  57518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57519. return $core.withContext(function($ctx2) {
  57520. //>>excludeEnd("ctx");
  57521. return $recv($recv(each)._protocol())._match_("^\x5c*");
  57522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57523. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  57524. //>>excludeEnd("ctx");
  57525. }));
  57526. return $1;
  57527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57528. }, function($ctx1) {$ctx1.fill(self,"ownMethodsOfClass:",{aClass:aClass},$globals.Exporter)});
  57529. //>>excludeEnd("ctx");
  57530. },
  57531. //>>excludeStart("ide", pragmas.excludeIdeData);
  57532. args: ["aClass"],
  57533. 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*') ]",
  57534. referencedClasses: [],
  57535. //>>excludeEnd("ide");
  57536. messageSends: ["reject:", "sorted:", "values", "methodDictionary", "<=", "selector", "match:", "protocol"]
  57537. }),
  57538. $globals.Exporter);
  57539. $core.addMethod(
  57540. $core.method({
  57541. selector: "ownMethodsOfMetaClass:",
  57542. protocol: 'accessing',
  57543. fn: function (aClass){
  57544. var self=this;
  57545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57546. return $core.withContext(function($ctx1) {
  57547. //>>excludeEnd("ctx");
  57548. var $1;
  57549. $1=self._ownMethodsOfClass_($recv(aClass)._class());
  57550. return $1;
  57551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57552. }, function($ctx1) {$ctx1.fill(self,"ownMethodsOfMetaClass:",{aClass:aClass},$globals.Exporter)});
  57553. //>>excludeEnd("ctx");
  57554. },
  57555. //>>excludeStart("ide", pragmas.excludeIdeData);
  57556. args: ["aClass"],
  57557. source: "ownMethodsOfMetaClass: aClass\x0a\x09\x22Issue #143: sort methods alphabetically\x22\x0a\x0a\x09^ self ownMethodsOfClass: aClass class",
  57558. referencedClasses: [],
  57559. //>>excludeEnd("ide");
  57560. messageSends: ["ownMethodsOfClass:", "class"]
  57561. }),
  57562. $globals.Exporter);
  57563. $core.addClass('AmdExporter', $globals.Exporter, ['namespace'], 'Platform-ImportExport');
  57564. //>>excludeStart("ide", pragmas.excludeIdeData);
  57565. $globals.AmdExporter.comment="I am used to export Packages in an AMD (Asynchronous Module Definition) JavaScript format.";
  57566. //>>excludeEnd("ide");
  57567. $core.addMethod(
  57568. $core.method({
  57569. selector: "amdNamesOfPackages:",
  57570. protocol: 'private',
  57571. fn: function (anArray){
  57572. var self=this;
  57573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57574. return $core.withContext(function($ctx1) {
  57575. //>>excludeEnd("ctx");
  57576. var $2,$1;
  57577. $1=$recv($recv(anArray)._select_((function(each){
  57578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57579. return $core.withContext(function($ctx2) {
  57580. //>>excludeEnd("ctx");
  57581. $2=self._amdNamespaceOfPackage_(each);
  57582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57583. $ctx2.sendIdx["amdNamespaceOfPackage:"]=1;
  57584. //>>excludeEnd("ctx");
  57585. return $recv($2)._notNil();
  57586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57587. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  57588. //>>excludeEnd("ctx");
  57589. })))._collect_((function(each){
  57590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57591. return $core.withContext(function($ctx2) {
  57592. //>>excludeEnd("ctx");
  57593. return $recv($recv(self._amdNamespaceOfPackage_(each)).__comma("/")).__comma($recv(each)._name());
  57594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57595. $ctx2.sendIdx[","]=1;
  57596. //>>excludeEnd("ctx");
  57597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57598. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  57599. //>>excludeEnd("ctx");
  57600. }));
  57601. return $1;
  57602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57603. }, function($ctx1) {$ctx1.fill(self,"amdNamesOfPackages:",{anArray:anArray},$globals.AmdExporter)});
  57604. //>>excludeEnd("ctx");
  57605. },
  57606. //>>excludeStart("ide", pragmas.excludeIdeData);
  57607. args: ["anArray"],
  57608. source: "amdNamesOfPackages: anArray\x0a\x09^ (anArray\x0a\x09\x09select: [ :each | (self amdNamespaceOfPackage: each) notNil ])\x0a\x09\x09collect: [ :each | (self amdNamespaceOfPackage: each), '/', each name ]",
  57609. referencedClasses: [],
  57610. //>>excludeEnd("ide");
  57611. messageSends: ["collect:", "select:", "notNil", "amdNamespaceOfPackage:", ",", "name"]
  57612. }),
  57613. $globals.AmdExporter);
  57614. $core.addMethod(
  57615. $core.method({
  57616. selector: "amdNamespaceOfPackage:",
  57617. protocol: 'private',
  57618. fn: function (aPackage){
  57619. var self=this;
  57620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57621. return $core.withContext(function($ctx1) {
  57622. //>>excludeEnd("ctx");
  57623. var $4,$3,$2,$1;
  57624. $4=$recv(aPackage)._transport();
  57625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57626. $ctx1.sendIdx["transport"]=1;
  57627. //>>excludeEnd("ctx");
  57628. $3=$recv($4)._type();
  57629. $2=$recv($3).__eq("amd");
  57630. if($core.assert($2)){
  57631. $1=$recv($recv(aPackage)._transport())._namespace();
  57632. } else {
  57633. $1=nil;
  57634. };
  57635. return $1;
  57636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57637. }, function($ctx1) {$ctx1.fill(self,"amdNamespaceOfPackage:",{aPackage:aPackage},$globals.AmdExporter)});
  57638. //>>excludeEnd("ctx");
  57639. },
  57640. //>>excludeStart("ide", pragmas.excludeIdeData);
  57641. args: ["aPackage"],
  57642. source: "amdNamespaceOfPackage: aPackage\x0a\x09^ (aPackage transport type = 'amd')\x0a\x09\x09ifTrue: [ aPackage transport namespace ]\x0a\x09\x09ifFalse: [ nil ]",
  57643. referencedClasses: [],
  57644. //>>excludeEnd("ide");
  57645. messageSends: ["ifTrue:ifFalse:", "=", "type", "transport", "namespace"]
  57646. }),
  57647. $globals.AmdExporter);
  57648. $core.addMethod(
  57649. $core.method({
  57650. selector: "exportPackageEpilogueOf:on:",
  57651. protocol: 'output',
  57652. fn: function (aPackage,aStream){
  57653. var self=this;
  57654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57655. return $core.withContext(function($ctx1) {
  57656. //>>excludeEnd("ctx");
  57657. var $1;
  57658. $recv(aStream)._nextPutAll_("});");
  57659. $1=$recv(aStream)._lf();
  57660. return self;
  57661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57662. }, function($ctx1) {$ctx1.fill(self,"exportPackageEpilogueOf:on:",{aPackage:aPackage,aStream:aStream},$globals.AmdExporter)});
  57663. //>>excludeEnd("ctx");
  57664. },
  57665. //>>excludeStart("ide", pragmas.excludeIdeData);
  57666. args: ["aPackage", "aStream"],
  57667. source: "exportPackageEpilogueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '});';\x0a\x09\x09lf",
  57668. referencedClasses: [],
  57669. //>>excludeEnd("ide");
  57670. messageSends: ["nextPutAll:", "lf"]
  57671. }),
  57672. $globals.AmdExporter);
  57673. $core.addMethod(
  57674. $core.method({
  57675. selector: "exportPackagePrologueOf:on:",
  57676. protocol: 'output',
  57677. fn: function (aPackage,aStream){
  57678. var self=this;
  57679. var importsForOutput,loadDependencies,pragmaStart,pragmaEnd;
  57680. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  57681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57682. return $core.withContext(function($ctx1) {
  57683. //>>excludeEnd("ctx");
  57684. var $1,$3,$2,$4,$6,$5,$7,$13,$12,$11,$10,$9,$8,$17,$16,$15,$14,$18;
  57685. pragmaStart="";
  57686. pragmaEnd="";
  57687. importsForOutput=self._importsForOutput_(aPackage);
  57688. loadDependencies=self._amdNamesOfPackages_($recv(aPackage)._loadDependencies());
  57689. $1=$recv(importsForOutput)._value();
  57690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57691. $ctx1.sendIdx["value"]=1;
  57692. //>>excludeEnd("ctx");
  57693. $recv($1)._ifNotEmpty_((function(){
  57694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57695. return $core.withContext(function($ctx2) {
  57696. //>>excludeEnd("ctx");
  57697. $3=$recv($String())._lf();
  57698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57699. $ctx2.sendIdx["lf"]=1;
  57700. //>>excludeEnd("ctx");
  57701. $2=$recv($3).__comma("//>>excludeStart(\x22imports\x22, pragmas.excludeImports);");
  57702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57703. $ctx2.sendIdx[","]=2;
  57704. //>>excludeEnd("ctx");
  57705. $4=$recv($String())._lf();
  57706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57707. $ctx2.sendIdx["lf"]=2;
  57708. //>>excludeEnd("ctx");
  57709. pragmaStart=$recv($2).__comma($4);
  57710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57711. $ctx2.sendIdx[","]=1;
  57712. //>>excludeEnd("ctx");
  57713. pragmaStart;
  57714. $6=$recv($String())._lf();
  57715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57716. $ctx2.sendIdx["lf"]=3;
  57717. //>>excludeEnd("ctx");
  57718. $5=$recv($6).__comma("//>>excludeEnd(\x22imports\x22);");
  57719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57720. $ctx2.sendIdx[","]=4;
  57721. //>>excludeEnd("ctx");
  57722. $7=$recv($String())._lf();
  57723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57724. $ctx2.sendIdx["lf"]=4;
  57725. //>>excludeEnd("ctx");
  57726. pragmaEnd=$recv($5).__comma($7);
  57727. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57728. $ctx2.sendIdx[","]=3;
  57729. //>>excludeEnd("ctx");
  57730. return pragmaEnd;
  57731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57732. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  57733. //>>excludeEnd("ctx");
  57734. }));
  57735. $recv(aStream)._nextPutAll_("define(\x22");
  57736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57737. $ctx1.sendIdx["nextPutAll:"]=1;
  57738. //>>excludeEnd("ctx");
  57739. $recv(aStream)._nextPutAll_(self._amdNamespaceOfPackage_(aPackage));
  57740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57741. $ctx1.sendIdx["nextPutAll:"]=2;
  57742. //>>excludeEnd("ctx");
  57743. $recv(aStream)._nextPutAll_("/");
  57744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57745. $ctx1.sendIdx["nextPutAll:"]=3;
  57746. //>>excludeEnd("ctx");
  57747. $recv(aStream)._nextPutAll_($recv(aPackage)._name());
  57748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57749. $ctx1.sendIdx["nextPutAll:"]=4;
  57750. //>>excludeEnd("ctx");
  57751. $recv(aStream)._nextPutAll_("\x22, ");
  57752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57753. $ctx1.sendIdx["nextPutAll:"]=5;
  57754. //>>excludeEnd("ctx");
  57755. $13=["amber/boot", ":1:"].__comma($recv(importsForOutput)._value());
  57756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57757. $ctx1.sendIdx[","]=7;
  57758. //>>excludeEnd("ctx");
  57759. $12=$recv($13).__comma([":2:"]);
  57760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57761. $ctx1.sendIdx[","]=6;
  57762. //>>excludeEnd("ctx");
  57763. $11=$recv($12).__comma(loadDependencies);
  57764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57765. $ctx1.sendIdx[","]=5;
  57766. //>>excludeEnd("ctx");
  57767. $10=$recv($11)._asJavascript();
  57768. $9=$recv($10)._replace_with_(",\x5cs*[\x22']:1:[\x22']",pragmaStart);
  57769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57770. $ctx1.sendIdx["replace:with:"]=2;
  57771. //>>excludeEnd("ctx");
  57772. $8=$recv($9)._replace_with_(",\x5cs*[\x22']:2:[\x22']",pragmaEnd);
  57773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57774. $ctx1.sendIdx["replace:with:"]=1;
  57775. //>>excludeEnd("ctx");
  57776. $recv(aStream)._nextPutAll_($8);
  57777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57778. $ctx1.sendIdx["nextPutAll:"]=6;
  57779. //>>excludeEnd("ctx");
  57780. $recv(aStream)._nextPutAll_(", function(");
  57781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57782. $ctx1.sendIdx["nextPutAll:"]=7;
  57783. //>>excludeEnd("ctx");
  57784. $17=$recv(["$boot", ":1:"].__comma($recv(importsForOutput)._key())).__comma([":2:"]);
  57785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57786. $ctx1.sendIdx[","]=8;
  57787. //>>excludeEnd("ctx");
  57788. $16=$recv($17)._join_(",");
  57789. $15=$recv($16)._replace_with_(",\x5cs*:1:",pragmaStart);
  57790. $14=$recv($15)._replace_with_(",\x5cs*:2:",pragmaEnd);
  57791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57792. $ctx1.sendIdx["replace:with:"]=3;
  57793. //>>excludeEnd("ctx");
  57794. $recv(aStream)._nextPutAll_($14);
  57795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57796. $ctx1.sendIdx["nextPutAll:"]=8;
  57797. //>>excludeEnd("ctx");
  57798. $recv(aStream)._nextPutAll_("){");
  57799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57800. $ctx1.sendIdx["nextPutAll:"]=9;
  57801. //>>excludeEnd("ctx");
  57802. $recv(aStream)._lf();
  57803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57804. $ctx1.sendIdx["lf"]=5;
  57805. //>>excludeEnd("ctx");
  57806. $recv(aStream)._nextPutAll_("var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;");
  57807. $18=$recv(aStream)._lf();
  57808. return self;
  57809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57810. }, function($ctx1) {$ctx1.fill(self,"exportPackagePrologueOf:on:",{aPackage:aPackage,aStream:aStream,importsForOutput:importsForOutput,loadDependencies:loadDependencies,pragmaStart:pragmaStart,pragmaEnd:pragmaEnd},$globals.AmdExporter)});
  57811. //>>excludeEnd("ctx");
  57812. },
  57813. //>>excludeStart("ide", pragmas.excludeIdeData);
  57814. args: ["aPackage", "aStream"],
  57815. source: "exportPackagePrologueOf: aPackage on: aStream\x0a\x09| importsForOutput loadDependencies pragmaStart pragmaEnd |\x0a\x09pragmaStart := ''.\x0a\x09pragmaEnd := ''.\x0a\x09importsForOutput := self importsForOutput: aPackage.\x0a\x09loadDependencies := self amdNamesOfPackages: aPackage loadDependencies.\x0a\x09importsForOutput value ifNotEmpty: [\x0a\x09\x09pragmaStart := String lf, '//>>excludeStart(\x22imports\x22, pragmas.excludeImports);', String lf.\x0a\x09\x09pragmaEnd := String lf, '//>>excludeEnd(\x22imports\x22);', String lf ].\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: (((\x0a\x09\x09\x09(#('amber/boot' ':1:'), importsForOutput value, #(':2:'), loadDependencies) asJavascript)\x0a\x09\x09\x09replace: ',\x5cs*[\x22'']:1:[\x22'']' with: pragmaStart) replace: ',\x5cs*[\x22'']:2:[\x22'']' with: pragmaEnd);\x0a\x09\x09nextPutAll: ', function(';\x0a\x09\x09nextPutAll: (((\x0a\x09\x09\x09(#('$boot' ':1:'), importsForOutput key, #(':2:')) join: ',')\x0a\x09\x09\x09replace: ',\x5cs*:1:' with: pragmaStart) replace: ',\x5cs*:2:' with: pragmaEnd);\x0a\x09\x09nextPutAll: '){';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: 'var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;';\x0a\x09\x09lf",
  57816. referencedClasses: ["String"],
  57817. //>>excludeEnd("ide");
  57818. messageSends: ["importsForOutput:", "amdNamesOfPackages:", "loadDependencies", "ifNotEmpty:", "value", ",", "lf", "nextPutAll:", "amdNamespaceOfPackage:", "name", "replace:with:", "asJavascript", "join:", "key"]
  57819. }),
  57820. $globals.AmdExporter);
  57821. $core.addMethod(
  57822. $core.method({
  57823. selector: "importsForOutput:",
  57824. protocol: 'private',
  57825. fn: function (aPackage){
  57826. var self=this;
  57827. var namedImports,anonImports,importVarNames;
  57828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57829. return $core.withContext(function($ctx1) {
  57830. //>>excludeEnd("ctx");
  57831. var $1,$2;
  57832. namedImports=[];
  57833. anonImports=[];
  57834. importVarNames=[];
  57835. $recv($recv(aPackage)._imports())._do_((function(each){
  57836. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57837. return $core.withContext(function($ctx2) {
  57838. //>>excludeEnd("ctx");
  57839. $1=$recv(each)._isString();
  57840. if($core.assert($1)){
  57841. return $recv(anonImports)._add_(each);
  57842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57843. $ctx2.sendIdx["add:"]=1;
  57844. //>>excludeEnd("ctx");
  57845. } else {
  57846. $recv(namedImports)._add_($recv(each)._value());
  57847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57848. $ctx2.sendIdx["add:"]=2;
  57849. //>>excludeEnd("ctx");
  57850. return $recv(importVarNames)._add_($recv(each)._key());
  57851. };
  57852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57853. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  57854. //>>excludeEnd("ctx");
  57855. }));
  57856. $2=$recv(importVarNames).__minus_gt($recv(namedImports).__comma(anonImports));
  57857. return $2;
  57858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57859. }, function($ctx1) {$ctx1.fill(self,"importsForOutput:",{aPackage:aPackage,namedImports:namedImports,anonImports:anonImports,importVarNames:importVarNames},$globals.AmdExporter)});
  57860. //>>excludeEnd("ctx");
  57861. },
  57862. //>>excludeStart("ide", pragmas.excludeIdeData);
  57863. args: ["aPackage"],
  57864. source: "importsForOutput: aPackage\x0a\x09\x22Returns an association where key is list of import variables\x0a\x09and value is list of external dependencies, with ones imported as variables\x0a\x09put at the beginning with same order as is in key.\x0a\x09\x0a\x09For example imports:{'jQuery'->'jquery'. 'bootstrap'} would yield\x0a\x09#('jQuery') -> #('jquery' 'bootstrap')\x22\x0a\x09| namedImports anonImports importVarNames |\x0a\x09namedImports := #().\x0a\x09anonImports := #().\x0a\x09importVarNames := #().\x0a\x09aPackage imports do: [ :each | each isString\x0a\x09\x09ifTrue: [ anonImports add: each ]\x0a\x09\x09ifFalse: [ namedImports add: each value.\x0a\x09\x09\x09importVarNames add: each key ]].\x0a\x09^ importVarNames -> (namedImports, anonImports)",
  57865. referencedClasses: [],
  57866. //>>excludeEnd("ide");
  57867. messageSends: ["do:", "imports", "ifTrue:ifFalse:", "isString", "add:", "value", "key", "->", ","]
  57868. }),
  57869. $globals.AmdExporter);
  57870. $core.addClass('ChunkParser', $globals.Object, ['stream', 'last'], 'Platform-ImportExport');
  57871. //>>excludeStart("ide", pragmas.excludeIdeData);
  57872. $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";
  57873. //>>excludeEnd("ide");
  57874. $core.addMethod(
  57875. $core.method({
  57876. selector: "last",
  57877. protocol: 'accessing',
  57878. fn: function (){
  57879. var self=this;
  57880. var $1;
  57881. $1=self["@last"];
  57882. return $1;
  57883. },
  57884. //>>excludeStart("ide", pragmas.excludeIdeData);
  57885. args: [],
  57886. source: "last\x0a\x09^ last",
  57887. referencedClasses: [],
  57888. //>>excludeEnd("ide");
  57889. messageSends: []
  57890. }),
  57891. $globals.ChunkParser);
  57892. $core.addMethod(
  57893. $core.method({
  57894. selector: "nextChunk",
  57895. protocol: 'reading',
  57896. fn: function (){
  57897. var self=this;
  57898. var char,result,chunk;
  57899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57900. return $core.withContext(function($ctx1) {
  57901. //>>excludeEnd("ctx");
  57902. var $1,$2,$3,$4;
  57903. var $early={};
  57904. try {
  57905. result=""._writeStream();
  57906. $recv((function(){
  57907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57908. return $core.withContext(function($ctx2) {
  57909. //>>excludeEnd("ctx");
  57910. char=$recv(self["@stream"])._next();
  57911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57912. $ctx2.sendIdx["next"]=1;
  57913. //>>excludeEnd("ctx");
  57914. char;
  57915. return $recv(char)._notNil();
  57916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57917. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  57918. //>>excludeEnd("ctx");
  57919. }))._whileTrue_((function(){
  57920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57921. return $core.withContext(function($ctx2) {
  57922. //>>excludeEnd("ctx");
  57923. $1=$recv(char).__eq("!");
  57924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57925. $ctx2.sendIdx["="]=1;
  57926. //>>excludeEnd("ctx");
  57927. if($core.assert($1)){
  57928. $2=$recv($recv(self["@stream"])._peek()).__eq("!");
  57929. if($core.assert($2)){
  57930. $recv(self["@stream"])._next();
  57931. } else {
  57932. self["@last"]=$recv($recv(result)._contents())._trimBoth();
  57933. $3=self["@last"];
  57934. throw $early=[$3];
  57935. };
  57936. };
  57937. return $recv(result)._nextPut_(char);
  57938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57939. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  57940. //>>excludeEnd("ctx");
  57941. }));
  57942. self["@last"]=nil;
  57943. $4=self["@last"];
  57944. return $4;
  57945. }
  57946. catch(e) {if(e===$early)return e[0]; throw e}
  57947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57948. }, function($ctx1) {$ctx1.fill(self,"nextChunk",{char:char,result:result,chunk:chunk},$globals.ChunkParser)});
  57949. //>>excludeEnd("ctx");
  57950. },
  57951. //>>excludeStart("ide", pragmas.excludeIdeData);
  57952. args: [],
  57953. 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",
  57954. referencedClasses: [],
  57955. //>>excludeEnd("ide");
  57956. messageSends: ["writeStream", "whileTrue:", "next", "notNil", "ifTrue:", "=", "ifTrue:ifFalse:", "peek", "trimBoth", "contents", "nextPut:"]
  57957. }),
  57958. $globals.ChunkParser);
  57959. $core.addMethod(
  57960. $core.method({
  57961. selector: "stream:",
  57962. protocol: 'accessing',
  57963. fn: function (aStream){
  57964. var self=this;
  57965. self["@stream"]=aStream;
  57966. return self;
  57967. },
  57968. //>>excludeStart("ide", pragmas.excludeIdeData);
  57969. args: ["aStream"],
  57970. source: "stream: aStream\x0a\x09stream := aStream",
  57971. referencedClasses: [],
  57972. //>>excludeEnd("ide");
  57973. messageSends: []
  57974. }),
  57975. $globals.ChunkParser);
  57976. $core.addMethod(
  57977. $core.method({
  57978. selector: "on:",
  57979. protocol: 'instance creation',
  57980. fn: function (aStream){
  57981. var self=this;
  57982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57983. return $core.withContext(function($ctx1) {
  57984. //>>excludeEnd("ctx");
  57985. var $1;
  57986. $1=$recv(self._new())._stream_(aStream);
  57987. return $1;
  57988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57989. }, function($ctx1) {$ctx1.fill(self,"on:",{aStream:aStream},$globals.ChunkParser.klass)});
  57990. //>>excludeEnd("ctx");
  57991. },
  57992. //>>excludeStart("ide", pragmas.excludeIdeData);
  57993. args: ["aStream"],
  57994. source: "on: aStream\x0a\x09^ self new stream: aStream",
  57995. referencedClasses: [],
  57996. //>>excludeEnd("ide");
  57997. messageSends: ["stream:", "new"]
  57998. }),
  57999. $globals.ChunkParser.klass);
  58000. $core.addClass('ExportMethodProtocol', $globals.Object, ['name', 'theClass'], 'Platform-ImportExport');
  58001. //>>excludeStart("ide", pragmas.excludeIdeData);
  58002. $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.";
  58003. //>>excludeEnd("ide");
  58004. $core.addMethod(
  58005. $core.method({
  58006. selector: "methods",
  58007. protocol: 'accessing',
  58008. fn: function (){
  58009. var self=this;
  58010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58011. return $core.withContext(function($ctx1) {
  58012. //>>excludeEnd("ctx");
  58013. var $2,$1;
  58014. $1=$recv($recv(self._theClass())._methodsInProtocol_(self._name()))._sorted_((function(a,b){
  58015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58016. return $core.withContext(function($ctx2) {
  58017. //>>excludeEnd("ctx");
  58018. $2=$recv(a)._selector();
  58019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58020. $ctx2.sendIdx["selector"]=1;
  58021. //>>excludeEnd("ctx");
  58022. return $recv($2).__lt_eq($recv(b)._selector());
  58023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58024. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  58025. //>>excludeEnd("ctx");
  58026. }));
  58027. return $1;
  58028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58029. }, function($ctx1) {$ctx1.fill(self,"methods",{},$globals.ExportMethodProtocol)});
  58030. //>>excludeEnd("ctx");
  58031. },
  58032. //>>excludeStart("ide", pragmas.excludeIdeData);
  58033. args: [],
  58034. source: "methods\x0a\x09^ (self theClass methodsInProtocol: self name)\x0a\x09\x09sorted: [ :a :b | a selector <= b selector ]",
  58035. referencedClasses: [],
  58036. //>>excludeEnd("ide");
  58037. messageSends: ["sorted:", "methodsInProtocol:", "theClass", "name", "<=", "selector"]
  58038. }),
  58039. $globals.ExportMethodProtocol);
  58040. $core.addMethod(
  58041. $core.method({
  58042. selector: "name",
  58043. protocol: 'accessing',
  58044. fn: function (){
  58045. var self=this;
  58046. var $1;
  58047. $1=self["@name"];
  58048. return $1;
  58049. },
  58050. //>>excludeStart("ide", pragmas.excludeIdeData);
  58051. args: [],
  58052. source: "name\x0a\x09^ name",
  58053. referencedClasses: [],
  58054. //>>excludeEnd("ide");
  58055. messageSends: []
  58056. }),
  58057. $globals.ExportMethodProtocol);
  58058. $core.addMethod(
  58059. $core.method({
  58060. selector: "name:",
  58061. protocol: 'accessing',
  58062. fn: function (aString){
  58063. var self=this;
  58064. self["@name"]=aString;
  58065. return self;
  58066. },
  58067. //>>excludeStart("ide", pragmas.excludeIdeData);
  58068. args: ["aString"],
  58069. source: "name: aString\x0a\x09name := aString",
  58070. referencedClasses: [],
  58071. //>>excludeEnd("ide");
  58072. messageSends: []
  58073. }),
  58074. $globals.ExportMethodProtocol);
  58075. $core.addMethod(
  58076. $core.method({
  58077. selector: "theClass",
  58078. protocol: 'accessing',
  58079. fn: function (){
  58080. var self=this;
  58081. var $1;
  58082. $1=self["@theClass"];
  58083. return $1;
  58084. },
  58085. //>>excludeStart("ide", pragmas.excludeIdeData);
  58086. args: [],
  58087. source: "theClass\x0a\x09^ theClass",
  58088. referencedClasses: [],
  58089. //>>excludeEnd("ide");
  58090. messageSends: []
  58091. }),
  58092. $globals.ExportMethodProtocol);
  58093. $core.addMethod(
  58094. $core.method({
  58095. selector: "theClass:",
  58096. protocol: 'accessing',
  58097. fn: function (aClass){
  58098. var self=this;
  58099. self["@theClass"]=aClass;
  58100. return self;
  58101. },
  58102. //>>excludeStart("ide", pragmas.excludeIdeData);
  58103. args: ["aClass"],
  58104. source: "theClass: aClass\x0a\x09theClass := aClass",
  58105. referencedClasses: [],
  58106. //>>excludeEnd("ide");
  58107. messageSends: []
  58108. }),
  58109. $globals.ExportMethodProtocol);
  58110. $core.addMethod(
  58111. $core.method({
  58112. selector: "name:theClass:",
  58113. protocol: 'instance creation',
  58114. fn: function (aString,aClass){
  58115. var self=this;
  58116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58117. return $core.withContext(function($ctx1) {
  58118. //>>excludeEnd("ctx");
  58119. var $2,$3,$1;
  58120. $2=self._new();
  58121. $recv($2)._name_(aString);
  58122. $recv($2)._theClass_(aClass);
  58123. $3=$recv($2)._yourself();
  58124. $1=$3;
  58125. return $1;
  58126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58127. }, function($ctx1) {$ctx1.fill(self,"name:theClass:",{aString:aString,aClass:aClass},$globals.ExportMethodProtocol.klass)});
  58128. //>>excludeEnd("ctx");
  58129. },
  58130. //>>excludeStart("ide", pragmas.excludeIdeData);
  58131. args: ["aString", "aClass"],
  58132. source: "name: aString theClass: aClass\x0a\x09^ self new\x0a\x09\x09name: aString;\x0a\x09\x09theClass: aClass;\x0a\x09\x09yourself",
  58133. referencedClasses: [],
  58134. //>>excludeEnd("ide");
  58135. messageSends: ["name:", "new", "theClass:", "yourself"]
  58136. }),
  58137. $globals.ExportMethodProtocol.klass);
  58138. $core.addClass('Importer', $globals.Object, ['lastSection', 'lastChunk'], 'Platform-ImportExport');
  58139. //>>excludeStart("ide", pragmas.excludeIdeData);
  58140. $globals.Importer.comment="I can import Amber code from a string in the chunk format.\x0a\x0a## API\x0a\x0a Importer new import: aString";
  58141. //>>excludeEnd("ide");
  58142. $core.addMethod(
  58143. $core.method({
  58144. selector: "import:",
  58145. protocol: 'fileIn',
  58146. fn: function (aStream){
  58147. var self=this;
  58148. var chunk,result,parser,lastEmpty;
  58149. function $ChunkParser(){return $globals.ChunkParser||(typeof ChunkParser=="undefined"?nil:ChunkParser)}
  58150. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  58151. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  58152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58153. return $core.withContext(function($ctx1) {
  58154. //>>excludeEnd("ctx");
  58155. var $1,$2;
  58156. parser=$recv($ChunkParser())._on_(aStream);
  58157. lastEmpty=false;
  58158. self["@lastSection"]="n/a, not started";
  58159. self["@lastChunk"]=nil;
  58160. $recv((function(){
  58161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58162. return $core.withContext(function($ctx2) {
  58163. //>>excludeEnd("ctx");
  58164. $recv((function(){
  58165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58166. return $core.withContext(function($ctx3) {
  58167. //>>excludeEnd("ctx");
  58168. chunk=$recv(parser)._nextChunk();
  58169. chunk;
  58170. return $recv(chunk)._isNil();
  58171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58172. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  58173. //>>excludeEnd("ctx");
  58174. }))._whileFalse_((function(){
  58175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58176. return $core.withContext(function($ctx3) {
  58177. //>>excludeEnd("ctx");
  58178. $1=$recv(chunk)._isEmpty();
  58179. if($core.assert($1)){
  58180. lastEmpty=true;
  58181. return lastEmpty;
  58182. } else {
  58183. self["@lastSection"]=chunk;
  58184. self["@lastSection"];
  58185. result=$recv($recv($Compiler())._new())._evaluateExpression_(chunk);
  58186. result;
  58187. $2=lastEmpty;
  58188. if($core.assert($2)){
  58189. lastEmpty=false;
  58190. lastEmpty;
  58191. return $recv(result)._scanFrom_(parser);
  58192. };
  58193. };
  58194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58195. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  58196. //>>excludeEnd("ctx");
  58197. }));
  58198. self["@lastSection"]="n/a, finished";
  58199. return self["@lastSection"];
  58200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58201. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  58202. //>>excludeEnd("ctx");
  58203. }))._on_do_($Error(),(function(e){
  58204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58205. return $core.withContext(function($ctx2) {
  58206. //>>excludeEnd("ctx");
  58207. self["@lastChunk"]=$recv(parser)._last();
  58208. self["@lastChunk"];
  58209. return $recv(e)._resignal();
  58210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58211. }, function($ctx2) {$ctx2.fillBlock({e:e},$ctx1,7)});
  58212. //>>excludeEnd("ctx");
  58213. }));
  58214. return self;
  58215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58216. }, function($ctx1) {$ctx1.fill(self,"import:",{aStream:aStream,chunk:chunk,result:result,parser:parser,lastEmpty:lastEmpty},$globals.Importer)});
  58217. //>>excludeEnd("ctx");
  58218. },
  58219. //>>excludeStart("ide", pragmas.excludeIdeData);
  58220. args: ["aStream"],
  58221. 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 resignal ].",
  58222. referencedClasses: ["ChunkParser", "Compiler", "Error"],
  58223. //>>excludeEnd("ide");
  58224. messageSends: ["on:", "on:do:", "whileFalse:", "nextChunk", "isNil", "ifTrue:ifFalse:", "isEmpty", "evaluateExpression:", "new", "ifTrue:", "scanFrom:", "last", "resignal"]
  58225. }),
  58226. $globals.Importer);
  58227. $core.addMethod(
  58228. $core.method({
  58229. selector: "lastChunk",
  58230. protocol: 'accessing',
  58231. fn: function (){
  58232. var self=this;
  58233. var $1;
  58234. $1=self["@lastChunk"];
  58235. return $1;
  58236. },
  58237. //>>excludeStart("ide", pragmas.excludeIdeData);
  58238. args: [],
  58239. source: "lastChunk\x0a\x09^ lastChunk",
  58240. referencedClasses: [],
  58241. //>>excludeEnd("ide");
  58242. messageSends: []
  58243. }),
  58244. $globals.Importer);
  58245. $core.addMethod(
  58246. $core.method({
  58247. selector: "lastSection",
  58248. protocol: 'accessing',
  58249. fn: function (){
  58250. var self=this;
  58251. var $1;
  58252. $1=self["@lastSection"];
  58253. return $1;
  58254. },
  58255. //>>excludeStart("ide", pragmas.excludeIdeData);
  58256. args: [],
  58257. source: "lastSection\x0a\x09^ lastSection",
  58258. referencedClasses: [],
  58259. //>>excludeEnd("ide");
  58260. messageSends: []
  58261. }),
  58262. $globals.Importer);
  58263. $core.addClass('PackageHandler', $globals.InterfacingObject, [], 'Platform-ImportExport');
  58264. //>>excludeStart("ide", pragmas.excludeIdeData);
  58265. $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.";
  58266. //>>excludeEnd("ide");
  58267. $core.addMethod(
  58268. $core.method({
  58269. selector: "ajaxPutAt:data:onSuccess:onError:",
  58270. protocol: 'private',
  58271. fn: function (aURL,aString,aBlock,anotherBlock){
  58272. var self=this;
  58273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58274. return $core.withContext(function($ctx1) {
  58275. //>>excludeEnd("ctx");
  58276. self._ajax_($globals.HashedCollection._newFromPairs_(["url",aURL,"type","PUT","data",aString,"contentType","text/plain;charset=UTF-8","success",aBlock,"error",anotherBlock]));
  58277. return self;
  58278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58279. }, function($ctx1) {$ctx1.fill(self,"ajaxPutAt:data:onSuccess:onError:",{aURL:aURL,aString:aString,aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageHandler)});
  58280. //>>excludeEnd("ctx");
  58281. },
  58282. //>>excludeStart("ide", pragmas.excludeIdeData);
  58283. args: ["aURL", "aString", "aBlock", "anotherBlock"],
  58284. 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}",
  58285. referencedClasses: [],
  58286. //>>excludeEnd("ide");
  58287. messageSends: ["ajax:"]
  58288. }),
  58289. $globals.PackageHandler);
  58290. $core.addMethod(
  58291. $core.method({
  58292. selector: "chunkContentsFor:",
  58293. protocol: 'accessing',
  58294. fn: function (aPackage){
  58295. var self=this;
  58296. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  58297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58298. return $core.withContext(function($ctx1) {
  58299. //>>excludeEnd("ctx");
  58300. var $1;
  58301. $1=$recv($String())._streamContents_((function(str){
  58302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58303. return $core.withContext(function($ctx2) {
  58304. //>>excludeEnd("ctx");
  58305. return $recv(self._chunkExporter())._exportPackage_on_(aPackage,str);
  58306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58307. }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)});
  58308. //>>excludeEnd("ctx");
  58309. }));
  58310. return $1;
  58311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58312. }, function($ctx1) {$ctx1.fill(self,"chunkContentsFor:",{aPackage:aPackage},$globals.PackageHandler)});
  58313. //>>excludeEnd("ctx");
  58314. },
  58315. //>>excludeStart("ide", pragmas.excludeIdeData);
  58316. args: ["aPackage"],
  58317. source: "chunkContentsFor: aPackage\x0a\x09^ String streamContents: [ :str |\x0a\x09\x09self chunkExporter exportPackage: aPackage on: str ]",
  58318. referencedClasses: ["String"],
  58319. //>>excludeEnd("ide");
  58320. messageSends: ["streamContents:", "exportPackage:on:", "chunkExporter"]
  58321. }),
  58322. $globals.PackageHandler);
  58323. $core.addMethod(
  58324. $core.method({
  58325. selector: "chunkExporter",
  58326. protocol: 'factory',
  58327. fn: function (){
  58328. var self=this;
  58329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58330. return $core.withContext(function($ctx1) {
  58331. //>>excludeEnd("ctx");
  58332. var $1;
  58333. $1=$recv(self._chunkExporterClass())._new();
  58334. return $1;
  58335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58336. }, function($ctx1) {$ctx1.fill(self,"chunkExporter",{},$globals.PackageHandler)});
  58337. //>>excludeEnd("ctx");
  58338. },
  58339. //>>excludeStart("ide", pragmas.excludeIdeData);
  58340. args: [],
  58341. source: "chunkExporter\x0a\x09^ self chunkExporterClass new",
  58342. referencedClasses: [],
  58343. //>>excludeEnd("ide");
  58344. messageSends: ["new", "chunkExporterClass"]
  58345. }),
  58346. $globals.PackageHandler);
  58347. $core.addMethod(
  58348. $core.method({
  58349. selector: "chunkExporterClass",
  58350. protocol: 'accessing',
  58351. fn: function (){
  58352. var self=this;
  58353. function $ChunkExporter(){return $globals.ChunkExporter||(typeof ChunkExporter=="undefined"?nil:ChunkExporter)}
  58354. return $ChunkExporter();
  58355. },
  58356. //>>excludeStart("ide", pragmas.excludeIdeData);
  58357. args: [],
  58358. source: "chunkExporterClass\x0a\x09^ ChunkExporter",
  58359. referencedClasses: ["ChunkExporter"],
  58360. //>>excludeEnd("ide");
  58361. messageSends: []
  58362. }),
  58363. $globals.PackageHandler);
  58364. $core.addMethod(
  58365. $core.method({
  58366. selector: "commit:",
  58367. protocol: 'committing',
  58368. fn: function (aPackage){
  58369. var self=this;
  58370. function $PackageCommitError(){return $globals.PackageCommitError||(typeof PackageCommitError=="undefined"?nil:PackageCommitError)}
  58371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58372. return $core.withContext(function($ctx1) {
  58373. //>>excludeEnd("ctx");
  58374. var $1,$2,$3,$4;
  58375. self._commit_onSuccess_onError_(aPackage,(function(){
  58376. }),(function(error){
  58377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58378. return $core.withContext(function($ctx2) {
  58379. //>>excludeEnd("ctx");
  58380. $1=$recv($PackageCommitError())._new();
  58381. $2=$1;
  58382. $3=$recv("Commiting failed with reason: \x22".__comma($recv(error)._responseText())).__comma("\x22");
  58383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58384. $ctx2.sendIdx[","]=1;
  58385. //>>excludeEnd("ctx");
  58386. $recv($2)._messageText_($3);
  58387. $4=$recv($1)._signal();
  58388. return $4;
  58389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58390. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  58391. //>>excludeEnd("ctx");
  58392. }));
  58393. return self;
  58394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58395. }, function($ctx1) {$ctx1.fill(self,"commit:",{aPackage:aPackage},$globals.PackageHandler)});
  58396. //>>excludeEnd("ctx");
  58397. },
  58398. //>>excludeStart("ide", pragmas.excludeIdeData);
  58399. args: ["aPackage"],
  58400. 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 ]",
  58401. referencedClasses: ["PackageCommitError"],
  58402. //>>excludeEnd("ide");
  58403. messageSends: ["commit:onSuccess:onError:", "messageText:", "new", ",", "responseText", "signal"]
  58404. }),
  58405. $globals.PackageHandler);
  58406. $core.addMethod(
  58407. $core.method({
  58408. selector: "commit:onSuccess:onError:",
  58409. protocol: 'committing',
  58410. fn: function (aPackage,aBlock,anotherBlock){
  58411. var self=this;
  58412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58413. return $core.withContext(function($ctx1) {
  58414. //>>excludeEnd("ctx");
  58415. self._commitJsFileFor_onSuccess_onError_(aPackage,(function(){
  58416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58417. return $core.withContext(function($ctx2) {
  58418. //>>excludeEnd("ctx");
  58419. return self._commitStFileFor_onSuccess_onError_(aPackage,(function(){
  58420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58421. return $core.withContext(function($ctx3) {
  58422. //>>excludeEnd("ctx");
  58423. $recv(aPackage)._beClean();
  58424. return $recv(aBlock)._value();
  58425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58426. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  58427. //>>excludeEnd("ctx");
  58428. }),anotherBlock);
  58429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58430. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  58431. //>>excludeEnd("ctx");
  58432. }),anotherBlock);
  58433. return self;
  58434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58435. }, function($ctx1) {$ctx1.fill(self,"commit:onSuccess:onError:",{aPackage:aPackage,aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageHandler)});
  58436. //>>excludeEnd("ctx");
  58437. },
  58438. //>>excludeStart("ide", pragmas.excludeIdeData);
  58439. args: ["aPackage", "aBlock", "anotherBlock"],
  58440. 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",
  58441. referencedClasses: [],
  58442. //>>excludeEnd("ide");
  58443. messageSends: ["commitJsFileFor:onSuccess:onError:", "commitStFileFor:onSuccess:onError:", "beClean", "value"]
  58444. }),
  58445. $globals.PackageHandler);
  58446. $core.addMethod(
  58447. $core.method({
  58448. selector: "commitJsFileFor:onSuccess:onError:",
  58449. protocol: 'committing',
  58450. fn: function (aPackage,aBlock,anotherBlock){
  58451. var self=this;
  58452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58453. return $core.withContext(function($ctx1) {
  58454. //>>excludeEnd("ctx");
  58455. var $2,$1;
  58456. $2=$recv($recv(self._commitPathJsFor_(aPackage)).__comma("/")).__comma($recv(aPackage)._name());
  58457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58458. $ctx1.sendIdx[","]=2;
  58459. //>>excludeEnd("ctx");
  58460. $1=$recv($2).__comma(".js");
  58461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58462. $ctx1.sendIdx[","]=1;
  58463. //>>excludeEnd("ctx");
  58464. self._ajaxPutAt_data_onSuccess_onError_($1,self._contentsFor_(aPackage),aBlock,anotherBlock);
  58465. return self;
  58466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58467. }, function($ctx1) {$ctx1.fill(self,"commitJsFileFor:onSuccess:onError:",{aPackage:aPackage,aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageHandler)});
  58468. //>>excludeEnd("ctx");
  58469. },
  58470. //>>excludeStart("ide", pragmas.excludeIdeData);
  58471. args: ["aPackage", "aBlock", "anotherBlock"],
  58472. 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",
  58473. referencedClasses: [],
  58474. //>>excludeEnd("ide");
  58475. messageSends: ["ajaxPutAt:data:onSuccess:onError:", ",", "commitPathJsFor:", "name", "contentsFor:"]
  58476. }),
  58477. $globals.PackageHandler);
  58478. $core.addMethod(
  58479. $core.method({
  58480. selector: "commitPathJsFor:",
  58481. protocol: 'accessing',
  58482. fn: function (aPackage){
  58483. var self=this;
  58484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58485. return $core.withContext(function($ctx1) {
  58486. //>>excludeEnd("ctx");
  58487. self._subclassResponsibility();
  58488. return self;
  58489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58490. }, function($ctx1) {$ctx1.fill(self,"commitPathJsFor:",{aPackage:aPackage},$globals.PackageHandler)});
  58491. //>>excludeEnd("ctx");
  58492. },
  58493. //>>excludeStart("ide", pragmas.excludeIdeData);
  58494. args: ["aPackage"],
  58495. source: "commitPathJsFor: aPackage\x0a\x09self subclassResponsibility",
  58496. referencedClasses: [],
  58497. //>>excludeEnd("ide");
  58498. messageSends: ["subclassResponsibility"]
  58499. }),
  58500. $globals.PackageHandler);
  58501. $core.addMethod(
  58502. $core.method({
  58503. selector: "commitPathStFor:",
  58504. protocol: 'accessing',
  58505. fn: function (aPackage){
  58506. var self=this;
  58507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58508. return $core.withContext(function($ctx1) {
  58509. //>>excludeEnd("ctx");
  58510. self._subclassResponsibility();
  58511. return self;
  58512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58513. }, function($ctx1) {$ctx1.fill(self,"commitPathStFor:",{aPackage:aPackage},$globals.PackageHandler)});
  58514. //>>excludeEnd("ctx");
  58515. },
  58516. //>>excludeStart("ide", pragmas.excludeIdeData);
  58517. args: ["aPackage"],
  58518. source: "commitPathStFor: aPackage\x0a\x09self subclassResponsibility",
  58519. referencedClasses: [],
  58520. //>>excludeEnd("ide");
  58521. messageSends: ["subclassResponsibility"]
  58522. }),
  58523. $globals.PackageHandler);
  58524. $core.addMethod(
  58525. $core.method({
  58526. selector: "commitStFileFor:onSuccess:onError:",
  58527. protocol: 'committing',
  58528. fn: function (aPackage,aBlock,anotherBlock){
  58529. var self=this;
  58530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58531. return $core.withContext(function($ctx1) {
  58532. //>>excludeEnd("ctx");
  58533. var $2,$1;
  58534. $2=$recv($recv(self._commitPathStFor_(aPackage)).__comma("/")).__comma($recv(aPackage)._name());
  58535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58536. $ctx1.sendIdx[","]=2;
  58537. //>>excludeEnd("ctx");
  58538. $1=$recv($2).__comma(".st");
  58539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58540. $ctx1.sendIdx[","]=1;
  58541. //>>excludeEnd("ctx");
  58542. self._ajaxPutAt_data_onSuccess_onError_($1,self._chunkContentsFor_(aPackage),aBlock,anotherBlock);
  58543. return self;
  58544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58545. }, function($ctx1) {$ctx1.fill(self,"commitStFileFor:onSuccess:onError:",{aPackage:aPackage,aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageHandler)});
  58546. //>>excludeEnd("ctx");
  58547. },
  58548. //>>excludeStart("ide", pragmas.excludeIdeData);
  58549. args: ["aPackage", "aBlock", "anotherBlock"],
  58550. 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",
  58551. referencedClasses: [],
  58552. //>>excludeEnd("ide");
  58553. messageSends: ["ajaxPutAt:data:onSuccess:onError:", ",", "commitPathStFor:", "name", "chunkContentsFor:"]
  58554. }),
  58555. $globals.PackageHandler);
  58556. $core.addMethod(
  58557. $core.method({
  58558. selector: "contentsFor:",
  58559. protocol: 'accessing',
  58560. fn: function (aPackage){
  58561. var self=this;
  58562. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  58563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58564. return $core.withContext(function($ctx1) {
  58565. //>>excludeEnd("ctx");
  58566. var $1;
  58567. $1=$recv($String())._streamContents_((function(str){
  58568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58569. return $core.withContext(function($ctx2) {
  58570. //>>excludeEnd("ctx");
  58571. return $recv(self._exporter())._exportPackage_on_(aPackage,str);
  58572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58573. }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)});
  58574. //>>excludeEnd("ctx");
  58575. }));
  58576. return $1;
  58577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58578. }, function($ctx1) {$ctx1.fill(self,"contentsFor:",{aPackage:aPackage},$globals.PackageHandler)});
  58579. //>>excludeEnd("ctx");
  58580. },
  58581. //>>excludeStart("ide", pragmas.excludeIdeData);
  58582. args: ["aPackage"],
  58583. source: "contentsFor: aPackage\x0a\x09^ String streamContents: [ :str |\x0a\x09\x09self exporter exportPackage: aPackage on: str ]",
  58584. referencedClasses: ["String"],
  58585. //>>excludeEnd("ide");
  58586. messageSends: ["streamContents:", "exportPackage:on:", "exporter"]
  58587. }),
  58588. $globals.PackageHandler);
  58589. $core.addMethod(
  58590. $core.method({
  58591. selector: "exporter",
  58592. protocol: 'factory',
  58593. fn: function (){
  58594. var self=this;
  58595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58596. return $core.withContext(function($ctx1) {
  58597. //>>excludeEnd("ctx");
  58598. var $1;
  58599. $1=$recv(self._exporterClass())._new();
  58600. return $1;
  58601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58602. }, function($ctx1) {$ctx1.fill(self,"exporter",{},$globals.PackageHandler)});
  58603. //>>excludeEnd("ctx");
  58604. },
  58605. //>>excludeStart("ide", pragmas.excludeIdeData);
  58606. args: [],
  58607. source: "exporter\x0a\x09^ self exporterClass new",
  58608. referencedClasses: [],
  58609. //>>excludeEnd("ide");
  58610. messageSends: ["new", "exporterClass"]
  58611. }),
  58612. $globals.PackageHandler);
  58613. $core.addMethod(
  58614. $core.method({
  58615. selector: "exporterClass",
  58616. protocol: 'accessing',
  58617. fn: function (){
  58618. var self=this;
  58619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58620. return $core.withContext(function($ctx1) {
  58621. //>>excludeEnd("ctx");
  58622. self._subclassResponsibility();
  58623. return self;
  58624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58625. }, function($ctx1) {$ctx1.fill(self,"exporterClass",{},$globals.PackageHandler)});
  58626. //>>excludeEnd("ctx");
  58627. },
  58628. //>>excludeStart("ide", pragmas.excludeIdeData);
  58629. args: [],
  58630. source: "exporterClass\x0a\x09self subclassResponsibility",
  58631. referencedClasses: [],
  58632. //>>excludeEnd("ide");
  58633. messageSends: ["subclassResponsibility"]
  58634. }),
  58635. $globals.PackageHandler);
  58636. $core.addMethod(
  58637. $core.method({
  58638. selector: "load:",
  58639. protocol: 'loading',
  58640. fn: function (aPackage){
  58641. var self=this;
  58642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58643. return $core.withContext(function($ctx1) {
  58644. //>>excludeEnd("ctx");
  58645. self._subclassResponsibility();
  58646. return self;
  58647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58648. }, function($ctx1) {$ctx1.fill(self,"load:",{aPackage:aPackage},$globals.PackageHandler)});
  58649. //>>excludeEnd("ctx");
  58650. },
  58651. //>>excludeStart("ide", pragmas.excludeIdeData);
  58652. args: ["aPackage"],
  58653. source: "load: aPackage\x0a\x09self subclassResponsibility",
  58654. referencedClasses: [],
  58655. //>>excludeEnd("ide");
  58656. messageSends: ["subclassResponsibility"]
  58657. }),
  58658. $globals.PackageHandler);
  58659. $core.addMethod(
  58660. $core.method({
  58661. selector: "onCommitError:",
  58662. protocol: 'error handling',
  58663. fn: function (anError){
  58664. var self=this;
  58665. function $PackageCommitError(){return $globals.PackageCommitError||(typeof PackageCommitError=="undefined"?nil:PackageCommitError)}
  58666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58667. return $core.withContext(function($ctx1) {
  58668. //>>excludeEnd("ctx");
  58669. var $1,$2,$3,$4;
  58670. $1=$recv($PackageCommitError())._new();
  58671. $2=$1;
  58672. $3=$recv("Commiting failed with reason: \x22".__comma($recv(anError)._responseText())).__comma("\x22");
  58673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58674. $ctx1.sendIdx[","]=1;
  58675. //>>excludeEnd("ctx");
  58676. $recv($2)._messageText_($3);
  58677. $4=$recv($1)._signal();
  58678. return self;
  58679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58680. }, function($ctx1) {$ctx1.fill(self,"onCommitError:",{anError:anError},$globals.PackageHandler)});
  58681. //>>excludeEnd("ctx");
  58682. },
  58683. //>>excludeStart("ide", pragmas.excludeIdeData);
  58684. args: ["anError"],
  58685. source: "onCommitError: anError\x0a\x09PackageCommitError new\x0a\x09\x09messageText: 'Commiting failed with reason: \x22' , (anError responseText) , '\x22';\x0a\x09\x09signal",
  58686. referencedClasses: ["PackageCommitError"],
  58687. //>>excludeEnd("ide");
  58688. messageSends: ["messageText:", "new", ",", "responseText", "signal"]
  58689. }),
  58690. $globals.PackageHandler);
  58691. $core.addClass('AmdPackageHandler', $globals.PackageHandler, [], 'Platform-ImportExport');
  58692. //>>excludeStart("ide", pragmas.excludeIdeData);
  58693. $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.";
  58694. //>>excludeEnd("ide");
  58695. $core.addMethod(
  58696. $core.method({
  58697. selector: "commitPathJsFor:",
  58698. protocol: 'accessing',
  58699. fn: function (aPackage){
  58700. var self=this;
  58701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58702. return $core.withContext(function($ctx1) {
  58703. //>>excludeEnd("ctx");
  58704. var $1;
  58705. $1=self._toUrl_(self._namespaceFor_(aPackage));
  58706. return $1;
  58707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58708. }, function($ctx1) {$ctx1.fill(self,"commitPathJsFor:",{aPackage:aPackage},$globals.AmdPackageHandler)});
  58709. //>>excludeEnd("ctx");
  58710. },
  58711. //>>excludeStart("ide", pragmas.excludeIdeData);
  58712. args: ["aPackage"],
  58713. source: "commitPathJsFor: aPackage\x0a\x09^ self toUrl: (self namespaceFor: aPackage)",
  58714. referencedClasses: [],
  58715. //>>excludeEnd("ide");
  58716. messageSends: ["toUrl:", "namespaceFor:"]
  58717. }),
  58718. $globals.AmdPackageHandler);
  58719. $core.addMethod(
  58720. $core.method({
  58721. selector: "commitPathStFor:",
  58722. protocol: 'accessing',
  58723. fn: function (aPackage){
  58724. var self=this;
  58725. var path,pathWithout;
  58726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58727. return $core.withContext(function($ctx1) {
  58728. //>>excludeEnd("ctx");
  58729. var $1,$3,$2;
  58730. $1=$recv(self._namespaceFor_(aPackage)).__comma("/_source");
  58731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58732. $ctx1.sendIdx[","]=1;
  58733. //>>excludeEnd("ctx");
  58734. path=self._toUrl_($1);
  58735. pathWithout=self._commitPathJsFor_(aPackage);
  58736. $3=$recv(path).__eq($recv(pathWithout).__comma("/_source"));
  58737. if($core.assert($3)){
  58738. $2=pathWithout;
  58739. } else {
  58740. $2=path;
  58741. };
  58742. return $2;
  58743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58744. }, function($ctx1) {$ctx1.fill(self,"commitPathStFor:",{aPackage:aPackage,path:path,pathWithout:pathWithout},$globals.AmdPackageHandler)});
  58745. //>>excludeEnd("ctx");
  58746. },
  58747. //>>excludeStart("ide", pragmas.excludeIdeData);
  58748. args: ["aPackage"],
  58749. 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 ]",
  58750. referencedClasses: [],
  58751. //>>excludeEnd("ide");
  58752. messageSends: ["toUrl:", ",", "namespaceFor:", "commitPathJsFor:", "ifTrue:ifFalse:", "="]
  58753. }),
  58754. $globals.AmdPackageHandler);
  58755. $core.addMethod(
  58756. $core.method({
  58757. selector: "exporterClass",
  58758. protocol: 'accessing',
  58759. fn: function (){
  58760. var self=this;
  58761. function $AmdExporter(){return $globals.AmdExporter||(typeof AmdExporter=="undefined"?nil:AmdExporter)}
  58762. return $AmdExporter();
  58763. },
  58764. //>>excludeStart("ide", pragmas.excludeIdeData);
  58765. args: [],
  58766. source: "exporterClass\x0a\x09^ AmdExporter",
  58767. referencedClasses: ["AmdExporter"],
  58768. //>>excludeEnd("ide");
  58769. messageSends: []
  58770. }),
  58771. $globals.AmdPackageHandler);
  58772. $core.addMethod(
  58773. $core.method({
  58774. selector: "load:",
  58775. protocol: 'loading',
  58776. fn: function (aPackage){
  58777. var self=this;
  58778. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  58779. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  58780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58781. return $core.withContext(function($ctx1) {
  58782. //>>excludeEnd("ctx");
  58783. var $1,$3,$2,$receiver;
  58784. $1=$recv($Smalltalk())._amdRequire();
  58785. if(($receiver = $1) == null || $receiver.isNil){
  58786. self._error_("AMD loader not present");
  58787. } else {
  58788. var require;
  58789. require=$receiver;
  58790. $3=$recv($recv(self._namespaceFor_(aPackage)).__comma("/")).__comma($recv(aPackage)._name());
  58791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58792. $ctx1.sendIdx[","]=1;
  58793. //>>excludeEnd("ctx");
  58794. $2=$recv($Array())._with_($3);
  58795. $recv(require)._value_($2);
  58796. };
  58797. return self;
  58798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58799. }, function($ctx1) {$ctx1.fill(self,"load:",{aPackage:aPackage},$globals.AmdPackageHandler)});
  58800. //>>excludeEnd("ctx");
  58801. },
  58802. //>>excludeStart("ide", pragmas.excludeIdeData);
  58803. args: ["aPackage"],
  58804. 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 ) ]",
  58805. referencedClasses: ["Smalltalk", "Array"],
  58806. //>>excludeEnd("ide");
  58807. messageSends: ["ifNil:ifNotNil:", "amdRequire", "error:", "value:", "with:", ",", "namespaceFor:", "name"]
  58808. }),
  58809. $globals.AmdPackageHandler);
  58810. $core.addMethod(
  58811. $core.method({
  58812. selector: "namespaceFor:",
  58813. protocol: 'committing',
  58814. fn: function (aPackage){
  58815. var self=this;
  58816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58817. return $core.withContext(function($ctx1) {
  58818. //>>excludeEnd("ctx");
  58819. var $1;
  58820. $1=$recv($recv(aPackage)._transport())._namespace();
  58821. return $1;
  58822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58823. }, function($ctx1) {$ctx1.fill(self,"namespaceFor:",{aPackage:aPackage},$globals.AmdPackageHandler)});
  58824. //>>excludeEnd("ctx");
  58825. },
  58826. //>>excludeStart("ide", pragmas.excludeIdeData);
  58827. args: ["aPackage"],
  58828. source: "namespaceFor: aPackage\x0a\x09^ aPackage transport namespace",
  58829. referencedClasses: [],
  58830. //>>excludeEnd("ide");
  58831. messageSends: ["namespace", "transport"]
  58832. }),
  58833. $globals.AmdPackageHandler);
  58834. $core.addMethod(
  58835. $core.method({
  58836. selector: "toUrl:",
  58837. protocol: 'private',
  58838. fn: function (aString){
  58839. var self=this;
  58840. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  58841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58842. return $core.withContext(function($ctx1) {
  58843. //>>excludeEnd("ctx");
  58844. var $2,$1,$receiver;
  58845. $2=$recv($Smalltalk())._amdRequire();
  58846. if(($receiver = $2) == null || $receiver.isNil){
  58847. $1=self._error_("AMD loader not present");
  58848. } else {
  58849. var require;
  58850. require=$receiver;
  58851. $1=$recv($recv(require)._basicAt_("toUrl"))._value_(aString);
  58852. };
  58853. return $1;
  58854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58855. }, function($ctx1) {$ctx1.fill(self,"toUrl:",{aString:aString},$globals.AmdPackageHandler)});
  58856. //>>excludeEnd("ctx");
  58857. },
  58858. //>>excludeStart("ide", pragmas.excludeIdeData);
  58859. args: ["aString"],
  58860. 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 ]",
  58861. referencedClasses: ["Smalltalk"],
  58862. //>>excludeEnd("ide");
  58863. messageSends: ["ifNil:ifNotNil:", "amdRequire", "error:", "value:", "basicAt:"]
  58864. }),
  58865. $globals.AmdPackageHandler);
  58866. $core.addMethod(
  58867. $core.method({
  58868. selector: "defaultNamespace",
  58869. protocol: 'commit paths',
  58870. fn: function (){
  58871. var self=this;
  58872. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  58873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58874. return $core.withContext(function($ctx1) {
  58875. //>>excludeEnd("ctx");
  58876. var $1;
  58877. $1=$recv($Smalltalk())._defaultAmdNamespace();
  58878. return $1;
  58879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58880. }, function($ctx1) {$ctx1.fill(self,"defaultNamespace",{},$globals.AmdPackageHandler.klass)});
  58881. //>>excludeEnd("ctx");
  58882. },
  58883. //>>excludeStart("ide", pragmas.excludeIdeData);
  58884. args: [],
  58885. source: "defaultNamespace\x0a\x09^ Smalltalk defaultAmdNamespace",
  58886. referencedClasses: ["Smalltalk"],
  58887. //>>excludeEnd("ide");
  58888. messageSends: ["defaultAmdNamespace"]
  58889. }),
  58890. $globals.AmdPackageHandler.klass);
  58891. $core.addMethod(
  58892. $core.method({
  58893. selector: "defaultNamespace:",
  58894. protocol: 'commit paths',
  58895. fn: function (aString){
  58896. var self=this;
  58897. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  58898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58899. return $core.withContext(function($ctx1) {
  58900. //>>excludeEnd("ctx");
  58901. $recv($Smalltalk())._defaultAmdNamespace_(aString);
  58902. return self;
  58903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58904. }, function($ctx1) {$ctx1.fill(self,"defaultNamespace:",{aString:aString},$globals.AmdPackageHandler.klass)});
  58905. //>>excludeEnd("ctx");
  58906. },
  58907. //>>excludeStart("ide", pragmas.excludeIdeData);
  58908. args: ["aString"],
  58909. source: "defaultNamespace: aString\x0a\x09Smalltalk defaultAmdNamespace: aString",
  58910. referencedClasses: ["Smalltalk"],
  58911. //>>excludeEnd("ide");
  58912. messageSends: ["defaultAmdNamespace:"]
  58913. }),
  58914. $globals.AmdPackageHandler.klass);
  58915. $core.addClass('PackageTransport', $globals.Object, ['package'], 'Platform-ImportExport');
  58916. //>>excludeStart("ide", pragmas.excludeIdeData);
  58917. $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.";
  58918. //>>excludeEnd("ide");
  58919. $core.addMethod(
  58920. $core.method({
  58921. selector: "asJSON",
  58922. protocol: 'converting',
  58923. fn: function (){
  58924. var self=this;
  58925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58926. return $core.withContext(function($ctx1) {
  58927. //>>excludeEnd("ctx");
  58928. var $1;
  58929. $1=$globals.HashedCollection._newFromPairs_(["type",self._type()]);
  58930. return $1;
  58931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58932. }, function($ctx1) {$ctx1.fill(self,"asJSON",{},$globals.PackageTransport)});
  58933. //>>excludeEnd("ctx");
  58934. },
  58935. //>>excludeStart("ide", pragmas.excludeIdeData);
  58936. args: [],
  58937. source: "asJSON\x0a\x09^ #{ 'type' -> self type }",
  58938. referencedClasses: [],
  58939. //>>excludeEnd("ide");
  58940. messageSends: ["type"]
  58941. }),
  58942. $globals.PackageTransport);
  58943. $core.addMethod(
  58944. $core.method({
  58945. selector: "commit",
  58946. protocol: 'committing',
  58947. fn: function (){
  58948. var self=this;
  58949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58950. return $core.withContext(function($ctx1) {
  58951. //>>excludeEnd("ctx");
  58952. $recv(self._commitHandler())._commit_(self._package());
  58953. return self;
  58954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58955. }, function($ctx1) {$ctx1.fill(self,"commit",{},$globals.PackageTransport)});
  58956. //>>excludeEnd("ctx");
  58957. },
  58958. //>>excludeStart("ide", pragmas.excludeIdeData);
  58959. args: [],
  58960. source: "commit\x0a\x09self commitHandler commit: self package",
  58961. referencedClasses: [],
  58962. //>>excludeEnd("ide");
  58963. messageSends: ["commit:", "commitHandler", "package"]
  58964. }),
  58965. $globals.PackageTransport);
  58966. $core.addMethod(
  58967. $core.method({
  58968. selector: "commitHandler",
  58969. protocol: 'factory',
  58970. fn: function (){
  58971. var self=this;
  58972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58973. return $core.withContext(function($ctx1) {
  58974. //>>excludeEnd("ctx");
  58975. var $1;
  58976. $1=$recv(self._commitHandlerClass())._new();
  58977. return $1;
  58978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58979. }, function($ctx1) {$ctx1.fill(self,"commitHandler",{},$globals.PackageTransport)});
  58980. //>>excludeEnd("ctx");
  58981. },
  58982. //>>excludeStart("ide", pragmas.excludeIdeData);
  58983. args: [],
  58984. source: "commitHandler\x0a\x09^ self commitHandlerClass new",
  58985. referencedClasses: [],
  58986. //>>excludeEnd("ide");
  58987. messageSends: ["new", "commitHandlerClass"]
  58988. }),
  58989. $globals.PackageTransport);
  58990. $core.addMethod(
  58991. $core.method({
  58992. selector: "commitHandlerClass",
  58993. protocol: 'accessing',
  58994. fn: function (){
  58995. var self=this;
  58996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58997. return $core.withContext(function($ctx1) {
  58998. //>>excludeEnd("ctx");
  58999. self._subclassResponsibility();
  59000. return self;
  59001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59002. }, function($ctx1) {$ctx1.fill(self,"commitHandlerClass",{},$globals.PackageTransport)});
  59003. //>>excludeEnd("ctx");
  59004. },
  59005. //>>excludeStart("ide", pragmas.excludeIdeData);
  59006. args: [],
  59007. source: "commitHandlerClass\x0a\x09self subclassResponsibility",
  59008. referencedClasses: [],
  59009. //>>excludeEnd("ide");
  59010. messageSends: ["subclassResponsibility"]
  59011. }),
  59012. $globals.PackageTransport);
  59013. $core.addMethod(
  59014. $core.method({
  59015. selector: "commitOnSuccess:onError:",
  59016. protocol: 'committing',
  59017. fn: function (aBlock,anotherBlock){
  59018. var self=this;
  59019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59020. return $core.withContext(function($ctx1) {
  59021. //>>excludeEnd("ctx");
  59022. $recv(self._commitHandler())._commit_onSuccess_onError_(self._package(),aBlock,anotherBlock);
  59023. return self;
  59024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59025. }, function($ctx1) {$ctx1.fill(self,"commitOnSuccess:onError:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageTransport)});
  59026. //>>excludeEnd("ctx");
  59027. },
  59028. //>>excludeStart("ide", pragmas.excludeIdeData);
  59029. args: ["aBlock", "anotherBlock"],
  59030. source: "commitOnSuccess: aBlock onError: anotherBlock\x0a\x09self commitHandler \x0a\x09\x09commit: self package\x0a\x09\x09onSuccess: aBlock\x0a\x09\x09onError: anotherBlock",
  59031. referencedClasses: [],
  59032. //>>excludeEnd("ide");
  59033. messageSends: ["commit:onSuccess:onError:", "commitHandler", "package"]
  59034. }),
  59035. $globals.PackageTransport);
  59036. $core.addMethod(
  59037. $core.method({
  59038. selector: "definition",
  59039. protocol: 'accessing',
  59040. fn: function (){
  59041. var self=this;
  59042. return "";
  59043. },
  59044. //>>excludeStart("ide", pragmas.excludeIdeData);
  59045. args: [],
  59046. source: "definition\x0a\x09^ ''",
  59047. referencedClasses: [],
  59048. //>>excludeEnd("ide");
  59049. messageSends: []
  59050. }),
  59051. $globals.PackageTransport);
  59052. $core.addMethod(
  59053. $core.method({
  59054. selector: "load",
  59055. protocol: 'loading',
  59056. fn: function (){
  59057. var self=this;
  59058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59059. return $core.withContext(function($ctx1) {
  59060. //>>excludeEnd("ctx");
  59061. $recv(self._commitHandler())._load_(self._package());
  59062. return self;
  59063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59064. }, function($ctx1) {$ctx1.fill(self,"load",{},$globals.PackageTransport)});
  59065. //>>excludeEnd("ctx");
  59066. },
  59067. //>>excludeStart("ide", pragmas.excludeIdeData);
  59068. args: [],
  59069. source: "load\x0a\x09self commitHandler load: self package",
  59070. referencedClasses: [],
  59071. //>>excludeEnd("ide");
  59072. messageSends: ["load:", "commitHandler", "package"]
  59073. }),
  59074. $globals.PackageTransport);
  59075. $core.addMethod(
  59076. $core.method({
  59077. selector: "package",
  59078. protocol: 'accessing',
  59079. fn: function (){
  59080. var self=this;
  59081. var $1;
  59082. $1=self["@package"];
  59083. return $1;
  59084. },
  59085. //>>excludeStart("ide", pragmas.excludeIdeData);
  59086. args: [],
  59087. source: "package\x0a\x09^ package",
  59088. referencedClasses: [],
  59089. //>>excludeEnd("ide");
  59090. messageSends: []
  59091. }),
  59092. $globals.PackageTransport);
  59093. $core.addMethod(
  59094. $core.method({
  59095. selector: "package:",
  59096. protocol: 'accessing',
  59097. fn: function (aPackage){
  59098. var self=this;
  59099. self["@package"]=aPackage;
  59100. return self;
  59101. },
  59102. //>>excludeStart("ide", pragmas.excludeIdeData);
  59103. args: ["aPackage"],
  59104. source: "package: aPackage\x0a\x09package := aPackage",
  59105. referencedClasses: [],
  59106. //>>excludeEnd("ide");
  59107. messageSends: []
  59108. }),
  59109. $globals.PackageTransport);
  59110. $core.addMethod(
  59111. $core.method({
  59112. selector: "setupFromJson:",
  59113. protocol: 'initialization',
  59114. fn: function (anObject){
  59115. var self=this;
  59116. return self;
  59117. },
  59118. //>>excludeStart("ide", pragmas.excludeIdeData);
  59119. args: ["anObject"],
  59120. source: "setupFromJson: anObject\x0a\x09\x22no op. override if needed in subclasses\x22",
  59121. referencedClasses: [],
  59122. //>>excludeEnd("ide");
  59123. messageSends: []
  59124. }),
  59125. $globals.PackageTransport);
  59126. $core.addMethod(
  59127. $core.method({
  59128. selector: "type",
  59129. protocol: 'accessing',
  59130. fn: function (){
  59131. var self=this;
  59132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59133. return $core.withContext(function($ctx1) {
  59134. //>>excludeEnd("ctx");
  59135. var $1;
  59136. $1=$recv(self._class())._type();
  59137. return $1;
  59138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59139. }, function($ctx1) {$ctx1.fill(self,"type",{},$globals.PackageTransport)});
  59140. //>>excludeEnd("ctx");
  59141. },
  59142. //>>excludeStart("ide", pragmas.excludeIdeData);
  59143. args: [],
  59144. source: "type\x0a\x09^ self class type",
  59145. referencedClasses: [],
  59146. //>>excludeEnd("ide");
  59147. messageSends: ["type", "class"]
  59148. }),
  59149. $globals.PackageTransport);
  59150. $globals.PackageTransport.klass.iVarNames = ['registry'];
  59151. $core.addMethod(
  59152. $core.method({
  59153. selector: "classRegisteredFor:",
  59154. protocol: 'accessing',
  59155. fn: function (aString){
  59156. var self=this;
  59157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59158. return $core.withContext(function($ctx1) {
  59159. //>>excludeEnd("ctx");
  59160. var $1;
  59161. $1=$recv(self["@registry"])._at_(aString);
  59162. return $1;
  59163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59164. }, function($ctx1) {$ctx1.fill(self,"classRegisteredFor:",{aString:aString},$globals.PackageTransport.klass)});
  59165. //>>excludeEnd("ctx");
  59166. },
  59167. //>>excludeStart("ide", pragmas.excludeIdeData);
  59168. args: ["aString"],
  59169. source: "classRegisteredFor: aString\x0a\x09^ registry at: aString",
  59170. referencedClasses: [],
  59171. //>>excludeEnd("ide");
  59172. messageSends: ["at:"]
  59173. }),
  59174. $globals.PackageTransport.klass);
  59175. $core.addMethod(
  59176. $core.method({
  59177. selector: "defaultType",
  59178. protocol: 'accessing',
  59179. fn: function (){
  59180. var self=this;
  59181. function $AmdPackageTransport(){return $globals.AmdPackageTransport||(typeof AmdPackageTransport=="undefined"?nil:AmdPackageTransport)}
  59182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59183. return $core.withContext(function($ctx1) {
  59184. //>>excludeEnd("ctx");
  59185. var $1;
  59186. $1=$recv($AmdPackageTransport())._type();
  59187. return $1;
  59188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59189. }, function($ctx1) {$ctx1.fill(self,"defaultType",{},$globals.PackageTransport.klass)});
  59190. //>>excludeEnd("ctx");
  59191. },
  59192. //>>excludeStart("ide", pragmas.excludeIdeData);
  59193. args: [],
  59194. source: "defaultType\x0a\x09^ AmdPackageTransport type",
  59195. referencedClasses: ["AmdPackageTransport"],
  59196. //>>excludeEnd("ide");
  59197. messageSends: ["type"]
  59198. }),
  59199. $globals.PackageTransport.klass);
  59200. $core.addMethod(
  59201. $core.method({
  59202. selector: "for:",
  59203. protocol: 'instance creation',
  59204. fn: function (aString){
  59205. var self=this;
  59206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59207. return $core.withContext(function($ctx1) {
  59208. //>>excludeEnd("ctx");
  59209. var $1;
  59210. $1=$recv(self._classRegisteredFor_(aString))._new();
  59211. return $1;
  59212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59213. }, function($ctx1) {$ctx1.fill(self,"for:",{aString:aString},$globals.PackageTransport.klass)});
  59214. //>>excludeEnd("ctx");
  59215. },
  59216. //>>excludeStart("ide", pragmas.excludeIdeData);
  59217. args: ["aString"],
  59218. source: "for: aString\x0a\x09^ (self classRegisteredFor: aString) new",
  59219. referencedClasses: [],
  59220. //>>excludeEnd("ide");
  59221. messageSends: ["new", "classRegisteredFor:"]
  59222. }),
  59223. $globals.PackageTransport.klass);
  59224. $core.addMethod(
  59225. $core.method({
  59226. selector: "fromJson:",
  59227. protocol: 'instance creation',
  59228. fn: function (anObject){
  59229. var self=this;
  59230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59231. return $core.withContext(function($ctx1) {
  59232. //>>excludeEnd("ctx");
  59233. var $1,$3,$4,$2,$receiver;
  59234. if(($receiver = anObject) == null || $receiver.isNil){
  59235. $1=self._for_(self._defaultType());
  59236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59237. $ctx1.sendIdx["for:"]=1;
  59238. //>>excludeEnd("ctx");
  59239. return $1;
  59240. } else {
  59241. anObject;
  59242. };
  59243. $3=self._for_($recv(anObject)._type());
  59244. $recv($3)._setupFromJson_(anObject);
  59245. $4=$recv($3)._yourself();
  59246. $2=$4;
  59247. return $2;
  59248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59249. }, function($ctx1) {$ctx1.fill(self,"fromJson:",{anObject:anObject},$globals.PackageTransport.klass)});
  59250. //>>excludeEnd("ctx");
  59251. },
  59252. //>>excludeStart("ide", pragmas.excludeIdeData);
  59253. args: ["anObject"],
  59254. 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",
  59255. referencedClasses: [],
  59256. //>>excludeEnd("ide");
  59257. messageSends: ["ifNil:", "for:", "defaultType", "setupFromJson:", "type", "yourself"]
  59258. }),
  59259. $globals.PackageTransport.klass);
  59260. $core.addMethod(
  59261. $core.method({
  59262. selector: "initialize",
  59263. protocol: 'initialization',
  59264. fn: function (){
  59265. var self=this;
  59266. function $PackageTransport(){return $globals.PackageTransport||(typeof PackageTransport=="undefined"?nil:PackageTransport)}
  59267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59268. return $core.withContext(function($ctx1) {
  59269. //>>excludeEnd("ctx");
  59270. var $1;
  59271. (
  59272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59273. $ctx1.supercall = true,
  59274. //>>excludeEnd("ctx");
  59275. $globals.PackageTransport.klass.superclass.fn.prototype._initialize.apply($recv(self), []));
  59276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59277. $ctx1.supercall = false;
  59278. //>>excludeEnd("ctx");;
  59279. $1=self.__eq_eq($PackageTransport());
  59280. if($core.assert($1)){
  59281. self["@registry"]=$globals.HashedCollection._newFromPairs_([]);
  59282. self["@registry"];
  59283. } else {
  59284. self._register();
  59285. };
  59286. return self;
  59287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59288. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.PackageTransport.klass)});
  59289. //>>excludeEnd("ctx");
  59290. },
  59291. //>>excludeStart("ide", pragmas.excludeIdeData);
  59292. args: [],
  59293. source: "initialize\x0a\x09super initialize.\x0a\x09self == PackageTransport\x0a\x09\x09ifTrue: [ registry := #{} ]\x0a\x09\x09ifFalse: [ self register ]",
  59294. referencedClasses: ["PackageTransport"],
  59295. //>>excludeEnd("ide");
  59296. messageSends: ["initialize", "ifTrue:ifFalse:", "==", "register"]
  59297. }),
  59298. $globals.PackageTransport.klass);
  59299. $core.addMethod(
  59300. $core.method({
  59301. selector: "register",
  59302. protocol: 'registration',
  59303. fn: function (){
  59304. var self=this;
  59305. function $PackageTransport(){return $globals.PackageTransport||(typeof PackageTransport=="undefined"?nil:PackageTransport)}
  59306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59307. return $core.withContext(function($ctx1) {
  59308. //>>excludeEnd("ctx");
  59309. $recv($PackageTransport())._register_(self);
  59310. return self;
  59311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59312. }, function($ctx1) {$ctx1.fill(self,"register",{},$globals.PackageTransport.klass)});
  59313. //>>excludeEnd("ctx");
  59314. },
  59315. //>>excludeStart("ide", pragmas.excludeIdeData);
  59316. args: [],
  59317. source: "register\x0a\x09PackageTransport register: self",
  59318. referencedClasses: ["PackageTransport"],
  59319. //>>excludeEnd("ide");
  59320. messageSends: ["register:"]
  59321. }),
  59322. $globals.PackageTransport.klass);
  59323. $core.addMethod(
  59324. $core.method({
  59325. selector: "register:",
  59326. protocol: 'registration',
  59327. fn: function (aClass){
  59328. var self=this;
  59329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59330. return $core.withContext(function($ctx1) {
  59331. //>>excludeEnd("ctx");
  59332. var $1,$receiver;
  59333. $1=$recv(aClass)._type();
  59334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59335. $ctx1.sendIdx["type"]=1;
  59336. //>>excludeEnd("ctx");
  59337. if(($receiver = $1) == null || $receiver.isNil){
  59338. $1;
  59339. } else {
  59340. $recv(self["@registry"])._at_put_($recv(aClass)._type(),aClass);
  59341. };
  59342. return self;
  59343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59344. }, function($ctx1) {$ctx1.fill(self,"register:",{aClass:aClass},$globals.PackageTransport.klass)});
  59345. //>>excludeEnd("ctx");
  59346. },
  59347. //>>excludeStart("ide", pragmas.excludeIdeData);
  59348. args: ["aClass"],
  59349. source: "register: aClass\x0a\x09aClass type ifNotNil: [\x0a\x09\x09registry at: aClass type put: aClass ]",
  59350. referencedClasses: [],
  59351. //>>excludeEnd("ide");
  59352. messageSends: ["ifNotNil:", "type", "at:put:"]
  59353. }),
  59354. $globals.PackageTransport.klass);
  59355. $core.addMethod(
  59356. $core.method({
  59357. selector: "type",
  59358. protocol: 'accessing',
  59359. fn: function (){
  59360. var self=this;
  59361. return nil;
  59362. },
  59363. //>>excludeStart("ide", pragmas.excludeIdeData);
  59364. args: [],
  59365. source: "type\x0a\x09\x22Override in subclasses\x22\x0a\x09^ nil",
  59366. referencedClasses: [],
  59367. //>>excludeEnd("ide");
  59368. messageSends: []
  59369. }),
  59370. $globals.PackageTransport.klass);
  59371. $core.addClass('AmdPackageTransport', $globals.PackageTransport, ['namespace'], 'Platform-ImportExport');
  59372. //>>excludeStart("ide", pragmas.excludeIdeData);
  59373. $globals.AmdPackageTransport.comment="I am the default transport for committing packages.\x0a\x0aSee `AmdExporter` and `AmdPackageHandler`.";
  59374. //>>excludeEnd("ide");
  59375. $core.addMethod(
  59376. $core.method({
  59377. selector: "asJSON",
  59378. protocol: 'converting',
  59379. fn: function (){
  59380. var self=this;
  59381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59382. return $core.withContext(function($ctx1) {
  59383. //>>excludeEnd("ctx");
  59384. var $2,$3,$1;
  59385. $2=(
  59386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59387. $ctx1.supercall = true,
  59388. //>>excludeEnd("ctx");
  59389. $globals.AmdPackageTransport.superclass.fn.prototype._asJSON.apply($recv(self), []));
  59390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59391. $ctx1.supercall = false;
  59392. //>>excludeEnd("ctx");;
  59393. $recv($2)._at_put_("amdNamespace",self._namespace());
  59394. $3=$recv($2)._yourself();
  59395. $1=$3;
  59396. return $1;
  59397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59398. }, function($ctx1) {$ctx1.fill(self,"asJSON",{},$globals.AmdPackageTransport)});
  59399. //>>excludeEnd("ctx");
  59400. },
  59401. //>>excludeStart("ide", pragmas.excludeIdeData);
  59402. args: [],
  59403. source: "asJSON\x0a\x09^ super asJSON\x0a\x09\x09at: 'amdNamespace' put: self namespace;\x0a\x09\x09yourself",
  59404. referencedClasses: [],
  59405. //>>excludeEnd("ide");
  59406. messageSends: ["at:put:", "asJSON", "namespace", "yourself"]
  59407. }),
  59408. $globals.AmdPackageTransport);
  59409. $core.addMethod(
  59410. $core.method({
  59411. selector: "commitHandlerClass",
  59412. protocol: 'accessing',
  59413. fn: function (){
  59414. var self=this;
  59415. function $AmdPackageHandler(){return $globals.AmdPackageHandler||(typeof AmdPackageHandler=="undefined"?nil:AmdPackageHandler)}
  59416. return $AmdPackageHandler();
  59417. },
  59418. //>>excludeStart("ide", pragmas.excludeIdeData);
  59419. args: [],
  59420. source: "commitHandlerClass\x0a\x09^ AmdPackageHandler",
  59421. referencedClasses: ["AmdPackageHandler"],
  59422. //>>excludeEnd("ide");
  59423. messageSends: []
  59424. }),
  59425. $globals.AmdPackageTransport);
  59426. $core.addMethod(
  59427. $core.method({
  59428. selector: "defaultNamespace",
  59429. protocol: 'defaults',
  59430. fn: function (){
  59431. var self=this;
  59432. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  59433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59434. return $core.withContext(function($ctx1) {
  59435. //>>excludeEnd("ctx");
  59436. var $1;
  59437. $1=$recv($Smalltalk())._defaultAmdNamespace();
  59438. return $1;
  59439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59440. }, function($ctx1) {$ctx1.fill(self,"defaultNamespace",{},$globals.AmdPackageTransport)});
  59441. //>>excludeEnd("ctx");
  59442. },
  59443. //>>excludeStart("ide", pragmas.excludeIdeData);
  59444. args: [],
  59445. source: "defaultNamespace\x0a\x09^ Smalltalk defaultAmdNamespace",
  59446. referencedClasses: ["Smalltalk"],
  59447. //>>excludeEnd("ide");
  59448. messageSends: ["defaultAmdNamespace"]
  59449. }),
  59450. $globals.AmdPackageTransport);
  59451. $core.addMethod(
  59452. $core.method({
  59453. selector: "definition",
  59454. protocol: 'accessing',
  59455. fn: function (){
  59456. var self=this;
  59457. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  59458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59459. return $core.withContext(function($ctx1) {
  59460. //>>excludeEnd("ctx");
  59461. var $3,$2,$1;
  59462. $1=$recv($String())._streamContents_((function(stream){
  59463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59464. return $core.withContext(function($ctx2) {
  59465. //>>excludeEnd("ctx");
  59466. $recv(stream)._nextPutAll_($recv(self._class())._name());
  59467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59468. $ctx2.sendIdx["nextPutAll:"]=1;
  59469. //>>excludeEnd("ctx");
  59470. $recv(stream)._nextPutAll_(" namespace: ");
  59471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59472. $ctx2.sendIdx["nextPutAll:"]=2;
  59473. //>>excludeEnd("ctx");
  59474. $3=$recv("'".__comma(self._namespace())).__comma("'");
  59475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59476. $ctx2.sendIdx[","]=1;
  59477. //>>excludeEnd("ctx");
  59478. $2=$recv(stream)._nextPutAll_($3);
  59479. return $2;
  59480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59481. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  59482. //>>excludeEnd("ctx");
  59483. }));
  59484. return $1;
  59485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59486. }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.AmdPackageTransport)});
  59487. //>>excludeEnd("ctx");
  59488. },
  59489. //>>excludeStart("ide", pragmas.excludeIdeData);
  59490. args: [],
  59491. 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, '''' ]",
  59492. referencedClasses: ["String"],
  59493. //>>excludeEnd("ide");
  59494. messageSends: ["streamContents:", "nextPutAll:", "name", "class", ",", "namespace"]
  59495. }),
  59496. $globals.AmdPackageTransport);
  59497. $core.addMethod(
  59498. $core.method({
  59499. selector: "namespace",
  59500. protocol: 'accessing',
  59501. fn: function (){
  59502. var self=this;
  59503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59504. return $core.withContext(function($ctx1) {
  59505. //>>excludeEnd("ctx");
  59506. var $2,$1,$receiver;
  59507. $2=self["@namespace"];
  59508. if(($receiver = $2) == null || $receiver.isNil){
  59509. $1=self._defaultNamespace();
  59510. } else {
  59511. $1=$2;
  59512. };
  59513. return $1;
  59514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59515. }, function($ctx1) {$ctx1.fill(self,"namespace",{},$globals.AmdPackageTransport)});
  59516. //>>excludeEnd("ctx");
  59517. },
  59518. //>>excludeStart("ide", pragmas.excludeIdeData);
  59519. args: [],
  59520. source: "namespace\x0a\x09^ namespace ifNil: [ self defaultNamespace ]",
  59521. referencedClasses: [],
  59522. //>>excludeEnd("ide");
  59523. messageSends: ["ifNil:", "defaultNamespace"]
  59524. }),
  59525. $globals.AmdPackageTransport);
  59526. $core.addMethod(
  59527. $core.method({
  59528. selector: "namespace:",
  59529. protocol: 'accessing',
  59530. fn: function (aString){
  59531. var self=this;
  59532. self["@namespace"]=aString;
  59533. return self;
  59534. },
  59535. //>>excludeStart("ide", pragmas.excludeIdeData);
  59536. args: ["aString"],
  59537. source: "namespace: aString\x0a\x09namespace := aString",
  59538. referencedClasses: [],
  59539. //>>excludeEnd("ide");
  59540. messageSends: []
  59541. }),
  59542. $globals.AmdPackageTransport);
  59543. $core.addMethod(
  59544. $core.method({
  59545. selector: "printOn:",
  59546. protocol: 'printing',
  59547. fn: function (aStream){
  59548. var self=this;
  59549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59550. return $core.withContext(function($ctx1) {
  59551. //>>excludeEnd("ctx");
  59552. var $1;
  59553. (
  59554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59555. $ctx1.supercall = true,
  59556. //>>excludeEnd("ctx");
  59557. $globals.AmdPackageTransport.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  59558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59559. $ctx1.supercall = false;
  59560. //>>excludeEnd("ctx");;
  59561. $recv(aStream)._nextPutAll_(" (AMD Namespace: ");
  59562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59563. $ctx1.sendIdx["nextPutAll:"]=1;
  59564. //>>excludeEnd("ctx");
  59565. $recv(aStream)._nextPutAll_(self._namespace());
  59566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59567. $ctx1.sendIdx["nextPutAll:"]=2;
  59568. //>>excludeEnd("ctx");
  59569. $1=$recv(aStream)._nextPutAll_(")");
  59570. return self;
  59571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59572. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.AmdPackageTransport)});
  59573. //>>excludeEnd("ctx");
  59574. },
  59575. //>>excludeStart("ide", pragmas.excludeIdeData);
  59576. args: ["aStream"],
  59577. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream\x0a\x09\x09nextPutAll: ' (AMD Namespace: ';\x0a\x09\x09nextPutAll: self namespace;\x0a\x09\x09nextPutAll: ')'",
  59578. referencedClasses: [],
  59579. //>>excludeEnd("ide");
  59580. messageSends: ["printOn:", "nextPutAll:", "namespace"]
  59581. }),
  59582. $globals.AmdPackageTransport);
  59583. $core.addMethod(
  59584. $core.method({
  59585. selector: "setPath:",
  59586. protocol: 'actions',
  59587. fn: function (aString){
  59588. var self=this;
  59589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59590. return $core.withContext(function($ctx1) {
  59591. //>>excludeEnd("ctx");
  59592. $recv($recv(require)._basicAt_("config"))._value_($globals.HashedCollection._newFromPairs_(["paths",$globals.HashedCollection._newFromPairs_([self._namespace(),aString])]));
  59593. return self;
  59594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59595. }, function($ctx1) {$ctx1.fill(self,"setPath:",{aString:aString},$globals.AmdPackageTransport)});
  59596. //>>excludeEnd("ctx");
  59597. },
  59598. //>>excludeStart("ide", pragmas.excludeIdeData);
  59599. args: ["aString"],
  59600. 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}.",
  59601. referencedClasses: [],
  59602. //>>excludeEnd("ide");
  59603. messageSends: ["value:", "basicAt:", "namespace"]
  59604. }),
  59605. $globals.AmdPackageTransport);
  59606. $core.addMethod(
  59607. $core.method({
  59608. selector: "setupFromJson:",
  59609. protocol: 'initialization',
  59610. fn: function (anObject){
  59611. var self=this;
  59612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59613. return $core.withContext(function($ctx1) {
  59614. //>>excludeEnd("ctx");
  59615. self._namespace_($recv(anObject)._at_("amdNamespace"));
  59616. return self;
  59617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59618. }, function($ctx1) {$ctx1.fill(self,"setupFromJson:",{anObject:anObject},$globals.AmdPackageTransport)});
  59619. //>>excludeEnd("ctx");
  59620. },
  59621. //>>excludeStart("ide", pragmas.excludeIdeData);
  59622. args: ["anObject"],
  59623. source: "setupFromJson: anObject\x0a\x09self namespace: (anObject at: 'amdNamespace')",
  59624. referencedClasses: [],
  59625. //>>excludeEnd("ide");
  59626. messageSends: ["namespace:", "at:"]
  59627. }),
  59628. $globals.AmdPackageTransport);
  59629. $core.addMethod(
  59630. $core.method({
  59631. selector: "namespace:",
  59632. protocol: 'instance creation',
  59633. fn: function (aString){
  59634. var self=this;
  59635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59636. return $core.withContext(function($ctx1) {
  59637. //>>excludeEnd("ctx");
  59638. var $2,$3,$1;
  59639. $2=self._new();
  59640. $recv($2)._namespace_(aString);
  59641. $3=$recv($2)._yourself();
  59642. $1=$3;
  59643. return $1;
  59644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59645. }, function($ctx1) {$ctx1.fill(self,"namespace:",{aString:aString},$globals.AmdPackageTransport.klass)});
  59646. //>>excludeEnd("ctx");
  59647. },
  59648. //>>excludeStart("ide", pragmas.excludeIdeData);
  59649. args: ["aString"],
  59650. source: "namespace: aString\x0a\x09^ self new\x0a\x09\x09namespace: aString;\x0a\x09\x09yourself",
  59651. referencedClasses: [],
  59652. //>>excludeEnd("ide");
  59653. messageSends: ["namespace:", "new", "yourself"]
  59654. }),
  59655. $globals.AmdPackageTransport.klass);
  59656. $core.addMethod(
  59657. $core.method({
  59658. selector: "type",
  59659. protocol: 'accessing',
  59660. fn: function (){
  59661. var self=this;
  59662. return "amd";
  59663. },
  59664. //>>excludeStart("ide", pragmas.excludeIdeData);
  59665. args: [],
  59666. source: "type\x0a\x09^ 'amd'",
  59667. referencedClasses: [],
  59668. //>>excludeEnd("ide");
  59669. messageSends: []
  59670. }),
  59671. $globals.AmdPackageTransport.klass);
  59672. $core.addMethod(
  59673. $core.method({
  59674. selector: "commit",
  59675. protocol: '*Platform-ImportExport',
  59676. fn: function (){
  59677. var self=this;
  59678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59679. return $core.withContext(function($ctx1) {
  59680. //>>excludeEnd("ctx");
  59681. var $1;
  59682. $1=$recv(self._transport())._commit();
  59683. return $1;
  59684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59685. }, function($ctx1) {$ctx1.fill(self,"commit",{},$globals.Package)});
  59686. //>>excludeEnd("ctx");
  59687. },
  59688. //>>excludeStart("ide", pragmas.excludeIdeData);
  59689. args: [],
  59690. source: "commit\x0a\x09^ self transport commit",
  59691. referencedClasses: [],
  59692. //>>excludeEnd("ide");
  59693. messageSends: ["commit", "transport"]
  59694. }),
  59695. $globals.Package);
  59696. $core.addMethod(
  59697. $core.method({
  59698. selector: "load",
  59699. protocol: '*Platform-ImportExport',
  59700. fn: function (){
  59701. var self=this;
  59702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59703. return $core.withContext(function($ctx1) {
  59704. //>>excludeEnd("ctx");
  59705. var $1;
  59706. $1=$recv(self._transport())._load();
  59707. return $1;
  59708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59709. }, function($ctx1) {$ctx1.fill(self,"load",{},$globals.Package)});
  59710. //>>excludeEnd("ctx");
  59711. },
  59712. //>>excludeStart("ide", pragmas.excludeIdeData);
  59713. args: [],
  59714. source: "load\x0a\x09^ self transport load",
  59715. referencedClasses: [],
  59716. //>>excludeEnd("ide");
  59717. messageSends: ["load", "transport"]
  59718. }),
  59719. $globals.Package);
  59720. $core.addMethod(
  59721. $core.method({
  59722. selector: "loadFromNamespace:",
  59723. protocol: '*Platform-ImportExport',
  59724. fn: function (aString){
  59725. var self=this;
  59726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59727. return $core.withContext(function($ctx1) {
  59728. //>>excludeEnd("ctx");
  59729. var $2,$3,$1;
  59730. $2=self._transport();
  59731. $recv($2)._namespace_(aString);
  59732. $3=$recv($2)._load();
  59733. $1=$3;
  59734. return $1;
  59735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59736. }, function($ctx1) {$ctx1.fill(self,"loadFromNamespace:",{aString:aString},$globals.Package)});
  59737. //>>excludeEnd("ctx");
  59738. },
  59739. //>>excludeStart("ide", pragmas.excludeIdeData);
  59740. args: ["aString"],
  59741. source: "loadFromNamespace: aString\x0a\x09^ self transport\x0a\x09\x09namespace: aString;\x0a\x09\x09load",
  59742. referencedClasses: [],
  59743. //>>excludeEnd("ide");
  59744. messageSends: ["namespace:", "transport", "load"]
  59745. }),
  59746. $globals.Package);
  59747. $core.addMethod(
  59748. $core.method({
  59749. selector: "load:",
  59750. protocol: '*Platform-ImportExport',
  59751. fn: function (aPackageName){
  59752. var self=this;
  59753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59754. return $core.withContext(function($ctx1) {
  59755. //>>excludeEnd("ctx");
  59756. $recv(self._named_(aPackageName))._load();
  59757. return self;
  59758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59759. }, function($ctx1) {$ctx1.fill(self,"load:",{aPackageName:aPackageName},$globals.Package.klass)});
  59760. //>>excludeEnd("ctx");
  59761. },
  59762. //>>excludeStart("ide", pragmas.excludeIdeData);
  59763. args: ["aPackageName"],
  59764. source: "load: aPackageName\x0a\x09(self named: aPackageName) load",
  59765. referencedClasses: [],
  59766. //>>excludeEnd("ide");
  59767. messageSends: ["load", "named:"]
  59768. }),
  59769. $globals.Package.klass);
  59770. $core.addMethod(
  59771. $core.method({
  59772. selector: "load:fromNamespace:",
  59773. protocol: '*Platform-ImportExport',
  59774. fn: function (aPackageName,aString){
  59775. var self=this;
  59776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59777. return $core.withContext(function($ctx1) {
  59778. //>>excludeEnd("ctx");
  59779. $recv(self._named_(aPackageName))._loadFromNamespace_(aString);
  59780. return self;
  59781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59782. }, function($ctx1) {$ctx1.fill(self,"load:fromNamespace:",{aPackageName:aPackageName,aString:aString},$globals.Package.klass)});
  59783. //>>excludeEnd("ctx");
  59784. },
  59785. //>>excludeStart("ide", pragmas.excludeIdeData);
  59786. args: ["aPackageName", "aString"],
  59787. source: "load: aPackageName fromNamespace: aString\x0a\x09(self named: aPackageName) loadFromNamespace: aString",
  59788. referencedClasses: [],
  59789. //>>excludeEnd("ide");
  59790. messageSends: ["loadFromNamespace:", "named:"]
  59791. }),
  59792. $globals.Package.klass);
  59793. });
  59794. define("amber_core/Kernel-Tests", ["amber/boot", "amber_core/SUnit", "amber_core/Kernel-Objects"], function($boot){
  59795. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  59796. $core.addPackage('Kernel-Tests');
  59797. $core.packages["Kernel-Tests"].innerEval = function (expr) { return eval(expr); };
  59798. $core.packages["Kernel-Tests"].transport = {"type":"amd","amdNamespace":"amber_core"};
  59799. $core.addClass('AnnouncementSubscriptionTest', $globals.TestCase, [], 'Kernel-Tests');
  59800. $core.addMethod(
  59801. $core.method({
  59802. selector: "testAddExtensionMethod",
  59803. protocol: 'tests',
  59804. fn: function (){
  59805. var self=this;
  59806. var method,dirty;
  59807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59808. return $core.withContext(function($ctx1) {
  59809. //>>excludeEnd("ctx");
  59810. var $2,$1,$4,$3,$5,$8,$7,$6,$9,$10;
  59811. $2=self._class();
  59812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59813. $ctx1.sendIdx["class"]=1;
  59814. //>>excludeEnd("ctx");
  59815. $1=$recv($2)._package();
  59816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59817. $ctx1.sendIdx["package"]=1;
  59818. //>>excludeEnd("ctx");
  59819. dirty=$recv($1)._isDirty();
  59820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59821. $ctx1.sendIdx["isDirty"]=1;
  59822. //>>excludeEnd("ctx");
  59823. $4=self._class();
  59824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59825. $ctx1.sendIdx["class"]=2;
  59826. //>>excludeEnd("ctx");
  59827. $3=$recv($4)._package();
  59828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59829. $ctx1.sendIdx["package"]=2;
  59830. //>>excludeEnd("ctx");
  59831. $recv($3)._beClean();
  59832. $5=self._class();
  59833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59834. $ctx1.sendIdx["class"]=3;
  59835. //>>excludeEnd("ctx");
  59836. method=$recv($5)._compile_protocol_("doNothing","**not-a-package");
  59837. $8=self._class();
  59838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59839. $ctx1.sendIdx["class"]=4;
  59840. //>>excludeEnd("ctx");
  59841. $7=$recv($8)._package();
  59842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59843. $ctx1.sendIdx["package"]=3;
  59844. //>>excludeEnd("ctx");
  59845. $6=$recv($7)._isDirty();
  59846. self._deny_($6);
  59847. $9=self._class();
  59848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59849. $ctx1.sendIdx["class"]=5;
  59850. //>>excludeEnd("ctx");
  59851. $recv($9)._removeCompiledMethod_(method);
  59852. $10=dirty;
  59853. if($core.assert($10)){
  59854. $recv($recv(self._class())._package())._beDirty();
  59855. };
  59856. return self;
  59857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59858. }, function($ctx1) {$ctx1.fill(self,"testAddExtensionMethod",{method:method,dirty:dirty},$globals.AnnouncementSubscriptionTest)});
  59859. //>>excludeEnd("ctx");
  59860. },
  59861. //>>excludeStart("ide", pragmas.excludeIdeData);
  59862. args: [],
  59863. 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 ]",
  59864. referencedClasses: [],
  59865. //>>excludeEnd("ide");
  59866. messageSends: ["isDirty", "package", "class", "beClean", "compile:protocol:", "deny:", "removeCompiledMethod:", "ifTrue:", "beDirty"]
  59867. }),
  59868. $globals.AnnouncementSubscriptionTest);
  59869. $core.addMethod(
  59870. $core.method({
  59871. selector: "testHandlesAnnouncement",
  59872. protocol: 'tests',
  59873. fn: function (){
  59874. var self=this;
  59875. var subscription,announcementClass1,announcementClass2,classBuilder;
  59876. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  59877. function $SystemAnnouncement(){return $globals.SystemAnnouncement||(typeof SystemAnnouncement=="undefined"?nil:SystemAnnouncement)}
  59878. function $AnnouncementSubscription(){return $globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  59879. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  59880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59881. return $core.withContext(function($ctx1) {
  59882. //>>excludeEnd("ctx");
  59883. var $1,$2;
  59884. classBuilder=$recv($ClassBuilder())._new();
  59885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59886. $ctx1.sendIdx["new"]=1;
  59887. //>>excludeEnd("ctx");
  59888. announcementClass1=$recv(classBuilder)._basicAddSubclassOf_named_instanceVariableNames_package_($SystemAnnouncement(),"TestAnnouncement1",[],"Kernel-Tests");
  59889. subscription=$recv($recv($AnnouncementSubscription())._new())._announcementClass_($SystemAnnouncement());
  59890. $1=$recv(subscription)._handlesAnnouncement_($SystemAnnouncement());
  59891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59892. $ctx1.sendIdx["handlesAnnouncement:"]=1;
  59893. //>>excludeEnd("ctx");
  59894. self._assert_equals_($1,true);
  59895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59896. $ctx1.sendIdx["assert:equals:"]=1;
  59897. //>>excludeEnd("ctx");
  59898. $2=$recv(subscription)._handlesAnnouncement_(announcementClass1);
  59899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59900. $ctx1.sendIdx["handlesAnnouncement:"]=2;
  59901. //>>excludeEnd("ctx");
  59902. self._assert_equals_($2,true);
  59903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59904. $ctx1.sendIdx["assert:equals:"]=2;
  59905. //>>excludeEnd("ctx");
  59906. self._assert_equals_($recv(subscription)._handlesAnnouncement_($Object()),false);
  59907. $recv(classBuilder)._basicRemoveClass_(announcementClass1);
  59908. return self;
  59909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59910. }, function($ctx1) {$ctx1.fill(self,"testHandlesAnnouncement",{subscription:subscription,announcementClass1:announcementClass1,announcementClass2:announcementClass2,classBuilder:classBuilder},$globals.AnnouncementSubscriptionTest)});
  59911. //>>excludeEnd("ctx");
  59912. },
  59913. //>>excludeStart("ide", pragmas.excludeIdeData);
  59914. args: [],
  59915. 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.",
  59916. referencedClasses: ["ClassBuilder", "SystemAnnouncement", "AnnouncementSubscription", "Object"],
  59917. //>>excludeEnd("ide");
  59918. messageSends: ["new", "basicAddSubclassOf:named:instanceVariableNames:package:", "announcementClass:", "assert:equals:", "handlesAnnouncement:", "basicRemoveClass:"]
  59919. }),
  59920. $globals.AnnouncementSubscriptionTest);
  59921. $core.addClass('AnnouncerTest', $globals.TestCase, [], 'Kernel-Tests');
  59922. $core.addMethod(
  59923. $core.method({
  59924. selector: "testOnDo",
  59925. protocol: 'tests',
  59926. fn: function (){
  59927. var self=this;
  59928. var counter,announcer;
  59929. function $Announcer(){return $globals.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
  59930. function $SystemAnnouncement(){return $globals.SystemAnnouncement||(typeof SystemAnnouncement=="undefined"?nil:SystemAnnouncement)}
  59931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59932. return $core.withContext(function($ctx1) {
  59933. //>>excludeEnd("ctx");
  59934. var $1,$2;
  59935. counter=(0);
  59936. announcer=$recv($Announcer())._new();
  59937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59938. $ctx1.sendIdx["new"]=1;
  59939. //>>excludeEnd("ctx");
  59940. $recv(announcer)._on_do_($SystemAnnouncement(),(function(){
  59941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59942. return $core.withContext(function($ctx2) {
  59943. //>>excludeEnd("ctx");
  59944. counter=$recv(counter).__plus((1));
  59945. return counter;
  59946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59947. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  59948. //>>excludeEnd("ctx");
  59949. }));
  59950. $1=announcer;
  59951. $2=$recv($SystemAnnouncement())._new();
  59952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59953. $ctx1.sendIdx["new"]=2;
  59954. //>>excludeEnd("ctx");
  59955. $recv($1)._announce_($2);
  59956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59957. $ctx1.sendIdx["announce:"]=1;
  59958. //>>excludeEnd("ctx");
  59959. self._assert_equals_(counter,(1));
  59960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59961. $ctx1.sendIdx["assert:equals:"]=1;
  59962. //>>excludeEnd("ctx");
  59963. $recv(announcer)._announce_($recv($SystemAnnouncement())._new());
  59964. self._assert_equals_(counter,(2));
  59965. return self;
  59966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59967. }, function($ctx1) {$ctx1.fill(self,"testOnDo",{counter:counter,announcer:announcer},$globals.AnnouncerTest)});
  59968. //>>excludeEnd("ctx");
  59969. },
  59970. //>>excludeStart("ide", pragmas.excludeIdeData);
  59971. args: [],
  59972. 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.",
  59973. referencedClasses: ["Announcer", "SystemAnnouncement"],
  59974. //>>excludeEnd("ide");
  59975. messageSends: ["new", "on:do:", "+", "announce:", "assert:equals:"]
  59976. }),
  59977. $globals.AnnouncerTest);
  59978. $core.addMethod(
  59979. $core.method({
  59980. selector: "testOnDoFor",
  59981. protocol: 'tests',
  59982. fn: function (){
  59983. var self=this;
  59984. var counter,announcer;
  59985. function $Announcer(){return $globals.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
  59986. function $SystemAnnouncement(){return $globals.SystemAnnouncement||(typeof SystemAnnouncement=="undefined"?nil:SystemAnnouncement)}
  59987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59988. return $core.withContext(function($ctx1) {
  59989. //>>excludeEnd("ctx");
  59990. var $1,$2,$3,$4;
  59991. counter=(0);
  59992. announcer=$recv($Announcer())._new();
  59993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59994. $ctx1.sendIdx["new"]=1;
  59995. //>>excludeEnd("ctx");
  59996. $recv(announcer)._on_do_for_($SystemAnnouncement(),(function(){
  59997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59998. return $core.withContext(function($ctx2) {
  59999. //>>excludeEnd("ctx");
  60000. counter=$recv(counter).__plus((1));
  60001. return counter;
  60002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60003. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60004. //>>excludeEnd("ctx");
  60005. }),self);
  60006. $1=announcer;
  60007. $2=$recv($SystemAnnouncement())._new();
  60008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60009. $ctx1.sendIdx["new"]=2;
  60010. //>>excludeEnd("ctx");
  60011. $recv($1)._announce_($2);
  60012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60013. $ctx1.sendIdx["announce:"]=1;
  60014. //>>excludeEnd("ctx");
  60015. self._assert_equals_(counter,(1));
  60016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60017. $ctx1.sendIdx["assert:equals:"]=1;
  60018. //>>excludeEnd("ctx");
  60019. $3=announcer;
  60020. $4=$recv($SystemAnnouncement())._new();
  60021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60022. $ctx1.sendIdx["new"]=3;
  60023. //>>excludeEnd("ctx");
  60024. $recv($3)._announce_($4);
  60025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60026. $ctx1.sendIdx["announce:"]=2;
  60027. //>>excludeEnd("ctx");
  60028. self._assert_equals_(counter,(2));
  60029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60030. $ctx1.sendIdx["assert:equals:"]=2;
  60031. //>>excludeEnd("ctx");
  60032. $recv(announcer)._unsubscribe_(self);
  60033. $recv(announcer)._announce_($recv($SystemAnnouncement())._new());
  60034. self._assert_equals_(counter,(2));
  60035. return self;
  60036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60037. }, function($ctx1) {$ctx1.fill(self,"testOnDoFor",{counter:counter,announcer:announcer},$globals.AnnouncerTest)});
  60038. //>>excludeEnd("ctx");
  60039. },
  60040. //>>excludeStart("ide", pragmas.excludeIdeData);
  60041. args: [],
  60042. 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.",
  60043. referencedClasses: ["Announcer", "SystemAnnouncement"],
  60044. //>>excludeEnd("ide");
  60045. messageSends: ["new", "on:do:for:", "+", "announce:", "assert:equals:", "unsubscribe:"]
  60046. }),
  60047. $globals.AnnouncerTest);
  60048. $core.addMethod(
  60049. $core.method({
  60050. selector: "testOnDoOnce",
  60051. protocol: 'tests',
  60052. fn: function (){
  60053. var self=this;
  60054. var counter,announcer;
  60055. function $Announcer(){return $globals.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
  60056. function $SystemAnnouncement(){return $globals.SystemAnnouncement||(typeof SystemAnnouncement=="undefined"?nil:SystemAnnouncement)}
  60057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60058. return $core.withContext(function($ctx1) {
  60059. //>>excludeEnd("ctx");
  60060. var $1,$2;
  60061. counter=(0);
  60062. announcer=$recv($Announcer())._new();
  60063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60064. $ctx1.sendIdx["new"]=1;
  60065. //>>excludeEnd("ctx");
  60066. $recv(announcer)._on_doOnce_($SystemAnnouncement(),(function(){
  60067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60068. return $core.withContext(function($ctx2) {
  60069. //>>excludeEnd("ctx");
  60070. counter=$recv(counter).__plus((1));
  60071. return counter;
  60072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60073. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60074. //>>excludeEnd("ctx");
  60075. }));
  60076. $1=announcer;
  60077. $2=$recv($SystemAnnouncement())._new();
  60078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60079. $ctx1.sendIdx["new"]=2;
  60080. //>>excludeEnd("ctx");
  60081. $recv($1)._announce_($2);
  60082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60083. $ctx1.sendIdx["announce:"]=1;
  60084. //>>excludeEnd("ctx");
  60085. self._assert_equals_(counter,(1));
  60086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60087. $ctx1.sendIdx["assert:equals:"]=1;
  60088. //>>excludeEnd("ctx");
  60089. $recv(announcer)._announce_($recv($SystemAnnouncement())._new());
  60090. self._assert_equals_(counter,(1));
  60091. return self;
  60092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60093. }, function($ctx1) {$ctx1.fill(self,"testOnDoOnce",{counter:counter,announcer:announcer},$globals.AnnouncerTest)});
  60094. //>>excludeEnd("ctx");
  60095. },
  60096. //>>excludeStart("ide", pragmas.excludeIdeData);
  60097. args: [],
  60098. 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.",
  60099. referencedClasses: ["Announcer", "SystemAnnouncement"],
  60100. //>>excludeEnd("ide");
  60101. messageSends: ["new", "on:doOnce:", "+", "announce:", "assert:equals:"]
  60102. }),
  60103. $globals.AnnouncerTest);
  60104. $core.addClass('BlockClosureTest', $globals.TestCase, [], 'Kernel-Tests');
  60105. $core.addMethod(
  60106. $core.method({
  60107. selector: "localReturnOnDoCatch",
  60108. protocol: 'fixture',
  60109. fn: function (){
  60110. var self=this;
  60111. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  60112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60113. return $core.withContext(function($ctx1) {
  60114. //>>excludeEnd("ctx");
  60115. var $early={};
  60116. try {
  60117. $recv((function(){
  60118. throw $early=[(2)];
  60119. }))._on_do_($Error(),(function(){
  60120. }));
  60121. return (3);
  60122. }
  60123. catch(e) {if(e===$early)return e[0]; throw e}
  60124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60125. }, function($ctx1) {$ctx1.fill(self,"localReturnOnDoCatch",{},$globals.BlockClosureTest)});
  60126. //>>excludeEnd("ctx");
  60127. },
  60128. //>>excludeStart("ide", pragmas.excludeIdeData);
  60129. args: [],
  60130. source: "localReturnOnDoCatch\x0a [ ^ 2 ] on: Error do: [].\x0a ^ 3",
  60131. referencedClasses: ["Error"],
  60132. //>>excludeEnd("ide");
  60133. messageSends: ["on:do:"]
  60134. }),
  60135. $globals.BlockClosureTest);
  60136. $core.addMethod(
  60137. $core.method({
  60138. selector: "localReturnOnDoMiss",
  60139. protocol: 'fixture',
  60140. fn: function (){
  60141. var self=this;
  60142. function $Class(){return $globals.Class||(typeof Class=="undefined"?nil:Class)}
  60143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60144. return $core.withContext(function($ctx1) {
  60145. //>>excludeEnd("ctx");
  60146. var $early={};
  60147. try {
  60148. $recv((function(){
  60149. throw $early=[(2)];
  60150. }))._on_do_($Class(),(function(){
  60151. }));
  60152. return (3);
  60153. }
  60154. catch(e) {if(e===$early)return e[0]; throw e}
  60155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60156. }, function($ctx1) {$ctx1.fill(self,"localReturnOnDoMiss",{},$globals.BlockClosureTest)});
  60157. //>>excludeEnd("ctx");
  60158. },
  60159. //>>excludeStart("ide", pragmas.excludeIdeData);
  60160. args: [],
  60161. source: "localReturnOnDoMiss\x0a [ ^ 2 ] on: Class do: [].\x0a ^ 3",
  60162. referencedClasses: ["Class"],
  60163. //>>excludeEnd("ide");
  60164. messageSends: ["on:do:"]
  60165. }),
  60166. $globals.BlockClosureTest);
  60167. $core.addMethod(
  60168. $core.method({
  60169. selector: "testCanClearInterval",
  60170. protocol: 'tests',
  60171. fn: function (){
  60172. var self=this;
  60173. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  60174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60175. return $core.withContext(function($ctx1) {
  60176. //>>excludeEnd("ctx");
  60177. self._shouldnt_raise_((function(){
  60178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60179. return $core.withContext(function($ctx2) {
  60180. //>>excludeEnd("ctx");
  60181. return $recv($recv((function(){
  60182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60183. return $core.withContext(function($ctx3) {
  60184. //>>excludeEnd("ctx");
  60185. return $recv($recv($Error())._new())._signal();
  60186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60187. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  60188. //>>excludeEnd("ctx");
  60189. }))._valueWithInterval_((0)))._clearInterval();
  60190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60191. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60192. //>>excludeEnd("ctx");
  60193. }),$Error());
  60194. return self;
  60195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60196. }, function($ctx1) {$ctx1.fill(self,"testCanClearInterval",{},$globals.BlockClosureTest)});
  60197. //>>excludeEnd("ctx");
  60198. },
  60199. //>>excludeStart("ide", pragmas.excludeIdeData);
  60200. args: [],
  60201. source: "testCanClearInterval\x0a\x09self shouldnt: [ ([ Error new signal ] valueWithInterval: 0) clearInterval ] raise: Error",
  60202. referencedClasses: ["Error"],
  60203. //>>excludeEnd("ide");
  60204. messageSends: ["shouldnt:raise:", "clearInterval", "valueWithInterval:", "signal", "new"]
  60205. }),
  60206. $globals.BlockClosureTest);
  60207. $core.addMethod(
  60208. $core.method({
  60209. selector: "testCanClearTimeout",
  60210. protocol: 'tests',
  60211. fn: function (){
  60212. var self=this;
  60213. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  60214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60215. return $core.withContext(function($ctx1) {
  60216. //>>excludeEnd("ctx");
  60217. self._shouldnt_raise_((function(){
  60218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60219. return $core.withContext(function($ctx2) {
  60220. //>>excludeEnd("ctx");
  60221. return $recv($recv((function(){
  60222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60223. return $core.withContext(function($ctx3) {
  60224. //>>excludeEnd("ctx");
  60225. return $recv($recv($Error())._new())._signal();
  60226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60227. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  60228. //>>excludeEnd("ctx");
  60229. }))._valueWithTimeout_((0)))._clearTimeout();
  60230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60231. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60232. //>>excludeEnd("ctx");
  60233. }),$Error());
  60234. return self;
  60235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60236. }, function($ctx1) {$ctx1.fill(self,"testCanClearTimeout",{},$globals.BlockClosureTest)});
  60237. //>>excludeEnd("ctx");
  60238. },
  60239. //>>excludeStart("ide", pragmas.excludeIdeData);
  60240. args: [],
  60241. source: "testCanClearTimeout\x0a\x09self shouldnt: [ ([ Error new signal ] valueWithTimeout: 0) clearTimeout ] raise: Error",
  60242. referencedClasses: ["Error"],
  60243. //>>excludeEnd("ide");
  60244. messageSends: ["shouldnt:raise:", "clearTimeout", "valueWithTimeout:", "signal", "new"]
  60245. }),
  60246. $globals.BlockClosureTest);
  60247. $core.addMethod(
  60248. $core.method({
  60249. selector: "testCompiledSource",
  60250. protocol: 'tests',
  60251. fn: function (){
  60252. var self=this;
  60253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60254. return $core.withContext(function($ctx1) {
  60255. //>>excludeEnd("ctx");
  60256. self._assert_($recv($recv((function(){
  60257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60258. return $core.withContext(function($ctx2) {
  60259. //>>excludeEnd("ctx");
  60260. return (1).__plus((1));
  60261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60262. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60263. //>>excludeEnd("ctx");
  60264. }))._compiledSource())._includesSubString_("function"));
  60265. return self;
  60266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60267. }, function($ctx1) {$ctx1.fill(self,"testCompiledSource",{},$globals.BlockClosureTest)});
  60268. //>>excludeEnd("ctx");
  60269. },
  60270. //>>excludeStart("ide", pragmas.excludeIdeData);
  60271. args: [],
  60272. source: "testCompiledSource\x0a\x09self assert: ([ 1+1 ] compiledSource includesSubString: 'function')",
  60273. referencedClasses: [],
  60274. //>>excludeEnd("ide");
  60275. messageSends: ["assert:", "includesSubString:", "compiledSource", "+"]
  60276. }),
  60277. $globals.BlockClosureTest);
  60278. $core.addMethod(
  60279. $core.method({
  60280. selector: "testCurrySelf",
  60281. protocol: 'tests',
  60282. fn: function (){
  60283. var self=this;
  60284. var curriedMethod,array;
  60285. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  60286. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  60287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60288. return $core.withContext(function($ctx1) {
  60289. //>>excludeEnd("ctx");
  60290. curriedMethod=$recv($recv((function(selfarg,x){
  60291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60292. return $core.withContext(function($ctx2) {
  60293. //>>excludeEnd("ctx");
  60294. return $recv(selfarg)._at_(x);
  60295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60296. }, function($ctx2) {$ctx2.fillBlock({selfarg:selfarg,x:x},$ctx1,1)});
  60297. //>>excludeEnd("ctx");
  60298. }))._currySelf())._asCompiledMethod_("foo:");
  60299. array=[(3), (1), (4)];
  60300. $recv($recv($ClassBuilder())._new())._installMethod_forClass_protocol_(curriedMethod,$Array(),"**test helper");
  60301. $recv((function(){
  60302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60303. return $core.withContext(function($ctx2) {
  60304. //>>excludeEnd("ctx");
  60305. return self._assert_equals_($recv(array)._foo_((2)),(1));
  60306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60307. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  60308. //>>excludeEnd("ctx");
  60309. }))._ensure_((function(){
  60310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60311. return $core.withContext(function($ctx2) {
  60312. //>>excludeEnd("ctx");
  60313. return $recv($Array())._removeCompiledMethod_(curriedMethod);
  60314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60315. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  60316. //>>excludeEnd("ctx");
  60317. }));
  60318. return self;
  60319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60320. }, function($ctx1) {$ctx1.fill(self,"testCurrySelf",{curriedMethod:curriedMethod,array:array},$globals.BlockClosureTest)});
  60321. //>>excludeEnd("ctx");
  60322. },
  60323. //>>excludeStart("ide", pragmas.excludeIdeData);
  60324. args: [],
  60325. 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 ]",
  60326. referencedClasses: ["ClassBuilder", "Array"],
  60327. //>>excludeEnd("ide");
  60328. messageSends: ["asCompiledMethod:", "currySelf", "at:", "installMethod:forClass:protocol:", "new", "ensure:", "assert:equals:", "foo:", "removeCompiledMethod:"]
  60329. }),
  60330. $globals.BlockClosureTest);
  60331. $core.addMethod(
  60332. $core.method({
  60333. selector: "testEnsure",
  60334. protocol: 'tests',
  60335. fn: function (){
  60336. var self=this;
  60337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60338. return $core.withContext(function($ctx1) {
  60339. //>>excludeEnd("ctx");
  60340. self._assert_equals_($recv((function(){
  60341. return (3);
  60342. }))._ensure_((function(){
  60343. return (4);
  60344. })),(3));
  60345. return self;
  60346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60347. }, function($ctx1) {$ctx1.fill(self,"testEnsure",{},$globals.BlockClosureTest)});
  60348. //>>excludeEnd("ctx");
  60349. },
  60350. //>>excludeStart("ide", pragmas.excludeIdeData);
  60351. args: [],
  60352. source: "testEnsure\x0a\x09self assert: ([ 3 ] ensure: [ 4 ]) equals: 3",
  60353. referencedClasses: [],
  60354. //>>excludeEnd("ide");
  60355. messageSends: ["assert:equals:", "ensure:"]
  60356. }),
  60357. $globals.BlockClosureTest);
  60358. $core.addMethod(
  60359. $core.method({
  60360. selector: "testEnsureRaises",
  60361. protocol: 'tests',
  60362. fn: function (){
  60363. var self=this;
  60364. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  60365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60366. return $core.withContext(function($ctx1) {
  60367. //>>excludeEnd("ctx");
  60368. self._should_raise_((function(){
  60369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60370. return $core.withContext(function($ctx2) {
  60371. //>>excludeEnd("ctx");
  60372. return $recv((function(){
  60373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60374. return $core.withContext(function($ctx3) {
  60375. //>>excludeEnd("ctx");
  60376. return $recv($recv($Error())._new())._signal();
  60377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60378. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  60379. //>>excludeEnd("ctx");
  60380. }))._ensure_((function(){
  60381. return true;
  60382. }));
  60383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60384. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60385. //>>excludeEnd("ctx");
  60386. }),$Error());
  60387. return self;
  60388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60389. }, function($ctx1) {$ctx1.fill(self,"testEnsureRaises",{},$globals.BlockClosureTest)});
  60390. //>>excludeEnd("ctx");
  60391. },
  60392. //>>excludeStart("ide", pragmas.excludeIdeData);
  60393. args: [],
  60394. source: "testEnsureRaises\x0a\x09self should: [ [Error new signal ] ensure: [ true ]] raise: Error",
  60395. referencedClasses: ["Error"],
  60396. //>>excludeEnd("ide");
  60397. messageSends: ["should:raise:", "ensure:", "signal", "new"]
  60398. }),
  60399. $globals.BlockClosureTest);
  60400. $core.addMethod(
  60401. $core.method({
  60402. selector: "testExceptionSemantics",
  60403. protocol: 'tests',
  60404. fn: function (){
  60405. var self=this;
  60406. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  60407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60408. return $core.withContext(function($ctx1) {
  60409. //>>excludeEnd("ctx");
  60410. self._timeout_((100));
  60411. $recv(self._async_((function(){
  60412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60413. return $core.withContext(function($ctx2) {
  60414. //>>excludeEnd("ctx");
  60415. return $recv((function(){
  60416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60417. return $core.withContext(function($ctx3) {
  60418. //>>excludeEnd("ctx");
  60419. self._assert_(true);
  60420. $recv($Error())._signal();
  60421. self._deny_(true);
  60422. return self._finished();
  60423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60424. $ctx3.sendIdx["finished"]=1;
  60425. //>>excludeEnd("ctx");
  60426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60427. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  60428. //>>excludeEnd("ctx");
  60429. }))._on_do_($Error(),(function(ex){
  60430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60431. return $core.withContext(function($ctx3) {
  60432. //>>excludeEnd("ctx");
  60433. return self._finished();
  60434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60435. }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,3)});
  60436. //>>excludeEnd("ctx");
  60437. }));
  60438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60439. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60440. //>>excludeEnd("ctx");
  60441. })))._valueWithTimeout_((0));
  60442. return self;
  60443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60444. }, function($ctx1) {$ctx1.fill(self,"testExceptionSemantics",{},$globals.BlockClosureTest)});
  60445. //>>excludeEnd("ctx");
  60446. },
  60447. //>>excludeStart("ide", pragmas.excludeIdeData);
  60448. args: [],
  60449. 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",
  60450. referencedClasses: ["Error"],
  60451. //>>excludeEnd("ide");
  60452. messageSends: ["timeout:", "valueWithTimeout:", "async:", "on:do:", "assert:", "signal", "deny:", "finished"]
  60453. }),
  60454. $globals.BlockClosureTest);
  60455. $core.addMethod(
  60456. $core.method({
  60457. selector: "testLocalReturnOnDoCatch",
  60458. protocol: 'tests',
  60459. fn: function (){
  60460. var self=this;
  60461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60462. return $core.withContext(function($ctx1) {
  60463. //>>excludeEnd("ctx");
  60464. self._assert_equals_(self._localReturnOnDoCatch(),(2));
  60465. return self;
  60466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60467. }, function($ctx1) {$ctx1.fill(self,"testLocalReturnOnDoCatch",{},$globals.BlockClosureTest)});
  60468. //>>excludeEnd("ctx");
  60469. },
  60470. //>>excludeStart("ide", pragmas.excludeIdeData);
  60471. args: [],
  60472. source: "testLocalReturnOnDoCatch\x0a\x09self assert: self localReturnOnDoCatch equals: 2",
  60473. referencedClasses: [],
  60474. //>>excludeEnd("ide");
  60475. messageSends: ["assert:equals:", "localReturnOnDoCatch"]
  60476. }),
  60477. $globals.BlockClosureTest);
  60478. $core.addMethod(
  60479. $core.method({
  60480. selector: "testLocalReturnOnDoMiss",
  60481. protocol: 'tests',
  60482. fn: function (){
  60483. var self=this;
  60484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60485. return $core.withContext(function($ctx1) {
  60486. //>>excludeEnd("ctx");
  60487. self._assert_equals_(self._localReturnOnDoMiss(),(2));
  60488. return self;
  60489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60490. }, function($ctx1) {$ctx1.fill(self,"testLocalReturnOnDoMiss",{},$globals.BlockClosureTest)});
  60491. //>>excludeEnd("ctx");
  60492. },
  60493. //>>excludeStart("ide", pragmas.excludeIdeData);
  60494. args: [],
  60495. source: "testLocalReturnOnDoMiss\x0a\x09self assert: self localReturnOnDoMiss equals: 2",
  60496. referencedClasses: [],
  60497. //>>excludeEnd("ide");
  60498. messageSends: ["assert:equals:", "localReturnOnDoMiss"]
  60499. }),
  60500. $globals.BlockClosureTest);
  60501. $core.addMethod(
  60502. $core.method({
  60503. selector: "testNewWithValues",
  60504. protocol: 'tests',
  60505. fn: function (){
  60506. var self=this;
  60507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60508. return $core.withContext(function($ctx1) {
  60509. //>>excludeEnd("ctx");
  60510. function TestConstructor(arg1, arg2, arg3) {}
  60511. TestConstructor.prototype.name = 'theTestPrototype';
  60512. var wrappedConstructor = $recv(TestConstructor);
  60513. var result = wrappedConstructor._newWithValues_([1, 2, 3 ]);
  60514. self._assert_(result instanceof TestConstructor);
  60515. self._assert_equals_(result.name, 'theTestPrototype');
  60516. "newWithValues: cannot help if the argument list is wrong, and should warn that a mistake was made."
  60517. self._should_raise_(function () {wrappedConstructor._newWithValues_('single argument');}, $globals.Error);;
  60518. return self;
  60519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60520. }, function($ctx1) {$ctx1.fill(self,"testNewWithValues",{},$globals.BlockClosureTest)});
  60521. //>>excludeEnd("ctx");
  60522. },
  60523. //>>excludeStart("ide", pragmas.excludeIdeData);
  60524. args: [],
  60525. 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>",
  60526. referencedClasses: [],
  60527. //>>excludeEnd("ide");
  60528. messageSends: []
  60529. }),
  60530. $globals.BlockClosureTest);
  60531. $core.addMethod(
  60532. $core.method({
  60533. selector: "testNumArgs",
  60534. protocol: 'tests',
  60535. fn: function (){
  60536. var self=this;
  60537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60538. return $core.withContext(function($ctx1) {
  60539. //>>excludeEnd("ctx");
  60540. var $1;
  60541. $1=$recv((function(){
  60542. }))._numArgs();
  60543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60544. $ctx1.sendIdx["numArgs"]=1;
  60545. //>>excludeEnd("ctx");
  60546. self._assert_equals_($1,(0));
  60547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60548. $ctx1.sendIdx["assert:equals:"]=1;
  60549. //>>excludeEnd("ctx");
  60550. self._assert_equals_($recv((function(a,b){
  60551. }))._numArgs(),(2));
  60552. return self;
  60553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60554. }, function($ctx1) {$ctx1.fill(self,"testNumArgs",{},$globals.BlockClosureTest)});
  60555. //>>excludeEnd("ctx");
  60556. },
  60557. //>>excludeStart("ide", pragmas.excludeIdeData);
  60558. args: [],
  60559. source: "testNumArgs\x0a\x09self assert: [] numArgs equals: 0.\x0a\x09self assert: [ :a :b | ] numArgs equals: 2",
  60560. referencedClasses: [],
  60561. //>>excludeEnd("ide");
  60562. messageSends: ["assert:equals:", "numArgs"]
  60563. }),
  60564. $globals.BlockClosureTest);
  60565. $core.addMethod(
  60566. $core.method({
  60567. selector: "testOnDo",
  60568. protocol: 'tests',
  60569. fn: function (){
  60570. var self=this;
  60571. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  60572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60573. return $core.withContext(function($ctx1) {
  60574. //>>excludeEnd("ctx");
  60575. self._assert_($recv((function(){
  60576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60577. return $core.withContext(function($ctx2) {
  60578. //>>excludeEnd("ctx");
  60579. return $recv($recv($Error())._new())._signal();
  60580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60581. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60582. //>>excludeEnd("ctx");
  60583. }))._on_do_($Error(),(function(ex){
  60584. return true;
  60585. })));
  60586. return self;
  60587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60588. }, function($ctx1) {$ctx1.fill(self,"testOnDo",{},$globals.BlockClosureTest)});
  60589. //>>excludeEnd("ctx");
  60590. },
  60591. //>>excludeStart("ide", pragmas.excludeIdeData);
  60592. args: [],
  60593. source: "testOnDo\x0a\x09self assert: ([ Error new signal ] on: Error do: [ :ex | true ])",
  60594. referencedClasses: ["Error"],
  60595. //>>excludeEnd("ide");
  60596. messageSends: ["assert:", "on:do:", "signal", "new"]
  60597. }),
  60598. $globals.BlockClosureTest);
  60599. $core.addMethod(
  60600. $core.method({
  60601. selector: "testValue",
  60602. protocol: 'tests',
  60603. fn: function (){
  60604. var self=this;
  60605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60606. return $core.withContext(function($ctx1) {
  60607. //>>excludeEnd("ctx");
  60608. var $1;
  60609. $1=$recv((function(){
  60610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60611. return $core.withContext(function($ctx2) {
  60612. //>>excludeEnd("ctx");
  60613. return (1).__plus((1));
  60614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60615. $ctx2.sendIdx["+"]=1;
  60616. //>>excludeEnd("ctx");
  60617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60618. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60619. //>>excludeEnd("ctx");
  60620. }))._value();
  60621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60622. $ctx1.sendIdx["value"]=1;
  60623. //>>excludeEnd("ctx");
  60624. self._assert_equals_($1,(2));
  60625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60626. $ctx1.sendIdx["assert:equals:"]=1;
  60627. //>>excludeEnd("ctx");
  60628. self._assert_equals_($recv((function(x){
  60629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60630. return $core.withContext(function($ctx2) {
  60631. //>>excludeEnd("ctx");
  60632. return $recv(x).__plus((1));
  60633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60634. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,2)});
  60635. //>>excludeEnd("ctx");
  60636. }))._value_((2)),(3));
  60637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60638. $ctx1.sendIdx["assert:equals:"]=2;
  60639. //>>excludeEnd("ctx");
  60640. self._assert_equals_($recv((function(x,y){
  60641. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60642. return $core.withContext(function($ctx2) {
  60643. //>>excludeEnd("ctx");
  60644. return $recv(x).__star(y);
  60645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60646. }, function($ctx2) {$ctx2.fillBlock({x:x,y:y},$ctx1,3)});
  60647. //>>excludeEnd("ctx");
  60648. }))._value_value_((2),(4)),(8));
  60649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60650. $ctx1.sendIdx["assert:equals:"]=3;
  60651. //>>excludeEnd("ctx");
  60652. self._assert_equals_($recv((function(a,b,c){
  60653. return (1);
  60654. }))._value(),(1));
  60655. return self;
  60656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60657. }, function($ctx1) {$ctx1.fill(self,"testValue",{},$globals.BlockClosureTest)});
  60658. //>>excludeEnd("ctx");
  60659. },
  60660. //>>excludeStart("ide", pragmas.excludeIdeData);
  60661. args: [],
  60662. 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",
  60663. referencedClasses: [],
  60664. //>>excludeEnd("ide");
  60665. messageSends: ["assert:equals:", "value", "+", "value:", "value:value:", "*"]
  60666. }),
  60667. $globals.BlockClosureTest);
  60668. $core.addMethod(
  60669. $core.method({
  60670. selector: "testValueWithPossibleArguments",
  60671. protocol: 'tests',
  60672. fn: function (){
  60673. var self=this;
  60674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60675. return $core.withContext(function($ctx1) {
  60676. //>>excludeEnd("ctx");
  60677. var $1,$2;
  60678. $1=$recv((function(){
  60679. return (1);
  60680. }))._valueWithPossibleArguments_([(3), (4)]);
  60681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60682. $ctx1.sendIdx["valueWithPossibleArguments:"]=1;
  60683. //>>excludeEnd("ctx");
  60684. self._assert_equals_($1,(1));
  60685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60686. $ctx1.sendIdx["assert:equals:"]=1;
  60687. //>>excludeEnd("ctx");
  60688. $2=$recv((function(a){
  60689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60690. return $core.withContext(function($ctx2) {
  60691. //>>excludeEnd("ctx");
  60692. return $recv(a).__plus((4));
  60693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60694. $ctx2.sendIdx["+"]=1;
  60695. //>>excludeEnd("ctx");
  60696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60697. }, function($ctx2) {$ctx2.fillBlock({a:a},$ctx1,2)});
  60698. //>>excludeEnd("ctx");
  60699. }))._valueWithPossibleArguments_([(3), (4)]);
  60700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60701. $ctx1.sendIdx["valueWithPossibleArguments:"]=2;
  60702. //>>excludeEnd("ctx");
  60703. self._assert_equals_($2,(7));
  60704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60705. $ctx1.sendIdx["assert:equals:"]=2;
  60706. //>>excludeEnd("ctx");
  60707. self._assert_equals_($recv((function(a,b){
  60708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60709. return $core.withContext(function($ctx2) {
  60710. //>>excludeEnd("ctx");
  60711. return $recv(a).__plus(b);
  60712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60713. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,3)});
  60714. //>>excludeEnd("ctx");
  60715. }))._valueWithPossibleArguments_([(3), (4), (5)]),(7));
  60716. return self;
  60717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60718. }, function($ctx1) {$ctx1.fill(self,"testValueWithPossibleArguments",{},$globals.BlockClosureTest)});
  60719. //>>excludeEnd("ctx");
  60720. },
  60721. //>>excludeStart("ide", pragmas.excludeIdeData);
  60722. args: [],
  60723. 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.",
  60724. referencedClasses: [],
  60725. //>>excludeEnd("ide");
  60726. messageSends: ["assert:equals:", "valueWithPossibleArguments:", "+"]
  60727. }),
  60728. $globals.BlockClosureTest);
  60729. $core.addMethod(
  60730. $core.method({
  60731. selector: "testWhileFalse",
  60732. protocol: 'tests',
  60733. fn: function (){
  60734. var self=this;
  60735. var i;
  60736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60737. return $core.withContext(function($ctx1) {
  60738. //>>excludeEnd("ctx");
  60739. i=(0);
  60740. $recv((function(){
  60741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60742. return $core.withContext(function($ctx2) {
  60743. //>>excludeEnd("ctx");
  60744. return $recv(i).__gt((5));
  60745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60746. $ctx2.sendIdx[">"]=1;
  60747. //>>excludeEnd("ctx");
  60748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60749. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60750. //>>excludeEnd("ctx");
  60751. }))._whileFalse_((function(){
  60752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60753. return $core.withContext(function($ctx2) {
  60754. //>>excludeEnd("ctx");
  60755. i=$recv(i).__plus((1));
  60756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60757. $ctx2.sendIdx["+"]=1;
  60758. //>>excludeEnd("ctx");
  60759. return i;
  60760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60761. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  60762. //>>excludeEnd("ctx");
  60763. }));
  60764. self._assert_equals_(i,(6));
  60765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60766. $ctx1.sendIdx["assert:equals:"]=1;
  60767. //>>excludeEnd("ctx");
  60768. i=(0);
  60769. $recv((function(){
  60770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60771. return $core.withContext(function($ctx2) {
  60772. //>>excludeEnd("ctx");
  60773. i=$recv(i).__plus((1));
  60774. i;
  60775. return $recv(i).__gt((5));
  60776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60777. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  60778. //>>excludeEnd("ctx");
  60779. }))._whileFalse();
  60780. self._assert_equals_(i,(6));
  60781. return self;
  60782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60783. }, function($ctx1) {$ctx1.fill(self,"testWhileFalse",{i:i},$globals.BlockClosureTest)});
  60784. //>>excludeEnd("ctx");
  60785. },
  60786. //>>excludeStart("ide", pragmas.excludeIdeData);
  60787. args: [],
  60788. 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",
  60789. referencedClasses: [],
  60790. //>>excludeEnd("ide");
  60791. messageSends: ["whileFalse:", ">", "+", "assert:equals:", "whileFalse"]
  60792. }),
  60793. $globals.BlockClosureTest);
  60794. $core.addMethod(
  60795. $core.method({
  60796. selector: "testWhileTrue",
  60797. protocol: 'tests',
  60798. fn: function (){
  60799. var self=this;
  60800. var i;
  60801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60802. return $core.withContext(function($ctx1) {
  60803. //>>excludeEnd("ctx");
  60804. i=(0);
  60805. $recv((function(){
  60806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60807. return $core.withContext(function($ctx2) {
  60808. //>>excludeEnd("ctx");
  60809. return $recv(i).__lt((5));
  60810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60811. $ctx2.sendIdx["<"]=1;
  60812. //>>excludeEnd("ctx");
  60813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60814. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60815. //>>excludeEnd("ctx");
  60816. }))._whileTrue_((function(){
  60817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60818. return $core.withContext(function($ctx2) {
  60819. //>>excludeEnd("ctx");
  60820. i=$recv(i).__plus((1));
  60821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60822. $ctx2.sendIdx["+"]=1;
  60823. //>>excludeEnd("ctx");
  60824. return i;
  60825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60826. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  60827. //>>excludeEnd("ctx");
  60828. }));
  60829. self._assert_equals_(i,(5));
  60830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60831. $ctx1.sendIdx["assert:equals:"]=1;
  60832. //>>excludeEnd("ctx");
  60833. i=(0);
  60834. $recv((function(){
  60835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60836. return $core.withContext(function($ctx2) {
  60837. //>>excludeEnd("ctx");
  60838. i=$recv(i).__plus((1));
  60839. i;
  60840. return $recv(i).__lt((5));
  60841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60842. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  60843. //>>excludeEnd("ctx");
  60844. }))._whileTrue();
  60845. self._assert_equals_(i,(5));
  60846. return self;
  60847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60848. }, function($ctx1) {$ctx1.fill(self,"testWhileTrue",{i:i},$globals.BlockClosureTest)});
  60849. //>>excludeEnd("ctx");
  60850. },
  60851. //>>excludeStart("ide", pragmas.excludeIdeData);
  60852. args: [],
  60853. 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",
  60854. referencedClasses: [],
  60855. //>>excludeEnd("ide");
  60856. messageSends: ["whileTrue:", "<", "+", "assert:equals:", "whileTrue"]
  60857. }),
  60858. $globals.BlockClosureTest);
  60859. $core.addClass('BooleanTest', $globals.TestCase, [], 'Kernel-Tests');
  60860. $core.addMethod(
  60861. $core.method({
  60862. selector: "testEquality",
  60863. protocol: 'tests',
  60864. fn: function (){
  60865. var self=this;
  60866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60867. return $core.withContext(function($ctx1) {
  60868. //>>excludeEnd("ctx");
  60869. var $1,$2,$3,$4,$5,$6,$7,$8,$10,$9,$12,$11;
  60870. $1=(0).__eq(false);
  60871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60872. $ctx1.sendIdx["="]=1;
  60873. //>>excludeEnd("ctx");
  60874. self._deny_($1);
  60875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60876. $ctx1.sendIdx["deny:"]=1;
  60877. //>>excludeEnd("ctx");
  60878. $2=false.__eq((0));
  60879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60880. $ctx1.sendIdx["="]=2;
  60881. //>>excludeEnd("ctx");
  60882. self._deny_($2);
  60883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60884. $ctx1.sendIdx["deny:"]=2;
  60885. //>>excludeEnd("ctx");
  60886. $3="".__eq(false);
  60887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60888. $ctx1.sendIdx["="]=3;
  60889. //>>excludeEnd("ctx");
  60890. self._deny_($3);
  60891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60892. $ctx1.sendIdx["deny:"]=3;
  60893. //>>excludeEnd("ctx");
  60894. $4=false.__eq("");
  60895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60896. $ctx1.sendIdx["="]=4;
  60897. //>>excludeEnd("ctx");
  60898. self._deny_($4);
  60899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60900. $ctx1.sendIdx["deny:"]=4;
  60901. //>>excludeEnd("ctx");
  60902. $5=true.__eq(true);
  60903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60904. $ctx1.sendIdx["="]=5;
  60905. //>>excludeEnd("ctx");
  60906. self._assert_($5);
  60907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60908. $ctx1.sendIdx["assert:"]=1;
  60909. //>>excludeEnd("ctx");
  60910. $6=false.__eq(true);
  60911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60912. $ctx1.sendIdx["="]=6;
  60913. //>>excludeEnd("ctx");
  60914. self._deny_($6);
  60915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60916. $ctx1.sendIdx["deny:"]=5;
  60917. //>>excludeEnd("ctx");
  60918. $7=true.__eq(false);
  60919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60920. $ctx1.sendIdx["="]=7;
  60921. //>>excludeEnd("ctx");
  60922. self._deny_($7);
  60923. $8=false.__eq(false);
  60924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60925. $ctx1.sendIdx["="]=8;
  60926. //>>excludeEnd("ctx");
  60927. self._assert_($8);
  60928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60929. $ctx1.sendIdx["assert:"]=2;
  60930. //>>excludeEnd("ctx");
  60931. $10=true._yourself();
  60932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60933. $ctx1.sendIdx["yourself"]=1;
  60934. //>>excludeEnd("ctx");
  60935. $9=$recv($10).__eq(true);
  60936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60937. $ctx1.sendIdx["="]=9;
  60938. //>>excludeEnd("ctx");
  60939. self._assert_($9);
  60940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60941. $ctx1.sendIdx["assert:"]=3;
  60942. //>>excludeEnd("ctx");
  60943. $12=true._yourself();
  60944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60945. $ctx1.sendIdx["yourself"]=2;
  60946. //>>excludeEnd("ctx");
  60947. $11=$recv($12).__eq(true._yourself());
  60948. self._assert_($11);
  60949. return self;
  60950. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60951. }, function($ctx1) {$ctx1.fill(self,"testEquality",{},$globals.BooleanTest)});
  60952. //>>excludeEnd("ctx");
  60953. },
  60954. //>>excludeStart("ide", pragmas.excludeIdeData);
  60955. args: [],
  60956. 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)",
  60957. referencedClasses: [],
  60958. //>>excludeEnd("ide");
  60959. messageSends: ["deny:", "=", "assert:", "yourself"]
  60960. }),
  60961. $globals.BooleanTest);
  60962. $core.addMethod(
  60963. $core.method({
  60964. selector: "testIdentity",
  60965. protocol: 'tests',
  60966. fn: function (){
  60967. var self=this;
  60968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60969. return $core.withContext(function($ctx1) {
  60970. //>>excludeEnd("ctx");
  60971. var $1,$2,$3,$4,$5,$6,$7,$8,$10,$9,$12,$11;
  60972. $1=(0).__eq_eq(false);
  60973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60974. $ctx1.sendIdx["=="]=1;
  60975. //>>excludeEnd("ctx");
  60976. self._deny_($1);
  60977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60978. $ctx1.sendIdx["deny:"]=1;
  60979. //>>excludeEnd("ctx");
  60980. $2=false.__eq_eq((0));
  60981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60982. $ctx1.sendIdx["=="]=2;
  60983. //>>excludeEnd("ctx");
  60984. self._deny_($2);
  60985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60986. $ctx1.sendIdx["deny:"]=2;
  60987. //>>excludeEnd("ctx");
  60988. $3="".__eq_eq(false);
  60989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60990. $ctx1.sendIdx["=="]=3;
  60991. //>>excludeEnd("ctx");
  60992. self._deny_($3);
  60993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60994. $ctx1.sendIdx["deny:"]=3;
  60995. //>>excludeEnd("ctx");
  60996. $4=false.__eq_eq("");
  60997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60998. $ctx1.sendIdx["=="]=4;
  60999. //>>excludeEnd("ctx");
  61000. self._deny_($4);
  61001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61002. $ctx1.sendIdx["deny:"]=4;
  61003. //>>excludeEnd("ctx");
  61004. $5=true.__eq_eq(true);
  61005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61006. $ctx1.sendIdx["=="]=5;
  61007. //>>excludeEnd("ctx");
  61008. self._assert_($5);
  61009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61010. $ctx1.sendIdx["assert:"]=1;
  61011. //>>excludeEnd("ctx");
  61012. $6=false.__eq_eq(true);
  61013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61014. $ctx1.sendIdx["=="]=6;
  61015. //>>excludeEnd("ctx");
  61016. self._deny_($6);
  61017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61018. $ctx1.sendIdx["deny:"]=5;
  61019. //>>excludeEnd("ctx");
  61020. $7=true.__eq_eq(false);
  61021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61022. $ctx1.sendIdx["=="]=7;
  61023. //>>excludeEnd("ctx");
  61024. self._deny_($7);
  61025. $8=false.__eq_eq(false);
  61026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61027. $ctx1.sendIdx["=="]=8;
  61028. //>>excludeEnd("ctx");
  61029. self._assert_($8);
  61030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61031. $ctx1.sendIdx["assert:"]=2;
  61032. //>>excludeEnd("ctx");
  61033. $10=true._yourself();
  61034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61035. $ctx1.sendIdx["yourself"]=1;
  61036. //>>excludeEnd("ctx");
  61037. $9=$recv($10).__eq_eq(true);
  61038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61039. $ctx1.sendIdx["=="]=9;
  61040. //>>excludeEnd("ctx");
  61041. self._assert_($9);
  61042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61043. $ctx1.sendIdx["assert:"]=3;
  61044. //>>excludeEnd("ctx");
  61045. $12=true._yourself();
  61046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61047. $ctx1.sendIdx["yourself"]=2;
  61048. //>>excludeEnd("ctx");
  61049. $11=$recv($12).__eq_eq(true._yourself());
  61050. self._assert_($11);
  61051. return self;
  61052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61053. }, function($ctx1) {$ctx1.fill(self,"testIdentity",{},$globals.BooleanTest)});
  61054. //>>excludeEnd("ctx");
  61055. },
  61056. //>>excludeStart("ide", pragmas.excludeIdeData);
  61057. args: [],
  61058. 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",
  61059. referencedClasses: [],
  61060. //>>excludeEnd("ide");
  61061. messageSends: ["deny:", "==", "assert:", "yourself"]
  61062. }),
  61063. $globals.BooleanTest);
  61064. $core.addMethod(
  61065. $core.method({
  61066. selector: "testIfTrueIfFalse",
  61067. protocol: 'tests',
  61068. fn: function (){
  61069. var self=this;
  61070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61071. return $core.withContext(function($ctx1) {
  61072. //>>excludeEnd("ctx");
  61073. var $1,$2,$3,$4,$5,$6,$7,$8;
  61074. if($core.assert(true)){
  61075. $1="alternative block";
  61076. };
  61077. self._assert_equals_($1,"alternative block");
  61078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61079. $ctx1.sendIdx["assert:equals:"]=1;
  61080. //>>excludeEnd("ctx");
  61081. if(!$core.assert(true)){
  61082. $2="alternative block";
  61083. };
  61084. self._assert_equals_($2,nil);
  61085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61086. $ctx1.sendIdx["assert:equals:"]=2;
  61087. //>>excludeEnd("ctx");
  61088. if($core.assert(false)){
  61089. $3="alternative block";
  61090. };
  61091. self._assert_equals_($3,nil);
  61092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61093. $ctx1.sendIdx["assert:equals:"]=3;
  61094. //>>excludeEnd("ctx");
  61095. if(!$core.assert(false)){
  61096. $4="alternative block";
  61097. };
  61098. self._assert_equals_($4,"alternative block");
  61099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61100. $ctx1.sendIdx["assert:equals:"]=4;
  61101. //>>excludeEnd("ctx");
  61102. if($core.assert(false)){
  61103. $5="alternative block";
  61104. } else {
  61105. $5="alternative block2";
  61106. };
  61107. self._assert_equals_($5,"alternative block2");
  61108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61109. $ctx1.sendIdx["assert:equals:"]=5;
  61110. //>>excludeEnd("ctx");
  61111. if($core.assert(false)){
  61112. $6="alternative block2";
  61113. } else {
  61114. $6="alternative block";
  61115. };
  61116. self._assert_equals_($6,"alternative block");
  61117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61118. $ctx1.sendIdx["assert:equals:"]=6;
  61119. //>>excludeEnd("ctx");
  61120. if($core.assert(true)){
  61121. $7="alternative block";
  61122. } else {
  61123. $7="alternative block2";
  61124. };
  61125. self._assert_equals_($7,"alternative block");
  61126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61127. $ctx1.sendIdx["assert:equals:"]=7;
  61128. //>>excludeEnd("ctx");
  61129. if($core.assert(true)){
  61130. $8="alternative block2";
  61131. } else {
  61132. $8="alternative block";
  61133. };
  61134. self._assert_equals_($8,"alternative block2");
  61135. return self;
  61136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61137. }, function($ctx1) {$ctx1.fill(self,"testIfTrueIfFalse",{},$globals.BooleanTest)});
  61138. //>>excludeEnd("ctx");
  61139. },
  61140. //>>excludeStart("ide", pragmas.excludeIdeData);
  61141. args: [],
  61142. 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'.",
  61143. referencedClasses: [],
  61144. //>>excludeEnd("ide");
  61145. messageSends: ["assert:equals:", "ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:"]
  61146. }),
  61147. $globals.BooleanTest);
  61148. $core.addMethod(
  61149. $core.method({
  61150. selector: "testIfTrueIfFalseWithBoxing",
  61151. protocol: 'tests',
  61152. fn: function (){
  61153. var self=this;
  61154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61155. return $core.withContext(function($ctx1) {
  61156. //>>excludeEnd("ctx");
  61157. var $2,$1,$4,$3,$6,$5,$8,$7,$10,$9,$12,$11,$14,$13,$16,$15;
  61158. $2=true._yourself();
  61159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61160. $ctx1.sendIdx["yourself"]=1;
  61161. //>>excludeEnd("ctx");
  61162. if($core.assert($2)){
  61163. $1="alternative block";
  61164. };
  61165. self._assert_equals_($1,"alternative block");
  61166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61167. $ctx1.sendIdx["assert:equals:"]=1;
  61168. //>>excludeEnd("ctx");
  61169. $4=true._yourself();
  61170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61171. $ctx1.sendIdx["yourself"]=2;
  61172. //>>excludeEnd("ctx");
  61173. if(!$core.assert($4)){
  61174. $3="alternative block";
  61175. };
  61176. self._assert_equals_($3,nil);
  61177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61178. $ctx1.sendIdx["assert:equals:"]=2;
  61179. //>>excludeEnd("ctx");
  61180. $6=false._yourself();
  61181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61182. $ctx1.sendIdx["yourself"]=3;
  61183. //>>excludeEnd("ctx");
  61184. if($core.assert($6)){
  61185. $5="alternative block";
  61186. };
  61187. self._assert_equals_($5,nil);
  61188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61189. $ctx1.sendIdx["assert:equals:"]=3;
  61190. //>>excludeEnd("ctx");
  61191. $8=false._yourself();
  61192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61193. $ctx1.sendIdx["yourself"]=4;
  61194. //>>excludeEnd("ctx");
  61195. if(!$core.assert($8)){
  61196. $7="alternative block";
  61197. };
  61198. self._assert_equals_($7,"alternative block");
  61199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61200. $ctx1.sendIdx["assert:equals:"]=4;
  61201. //>>excludeEnd("ctx");
  61202. $10=false._yourself();
  61203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61204. $ctx1.sendIdx["yourself"]=5;
  61205. //>>excludeEnd("ctx");
  61206. if($core.assert($10)){
  61207. $9="alternative block";
  61208. } else {
  61209. $9="alternative block2";
  61210. };
  61211. self._assert_equals_($9,"alternative block2");
  61212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61213. $ctx1.sendIdx["assert:equals:"]=5;
  61214. //>>excludeEnd("ctx");
  61215. $12=false._yourself();
  61216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61217. $ctx1.sendIdx["yourself"]=6;
  61218. //>>excludeEnd("ctx");
  61219. if($core.assert($12)){
  61220. $11="alternative block2";
  61221. } else {
  61222. $11="alternative block";
  61223. };
  61224. self._assert_equals_($11,"alternative block");
  61225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61226. $ctx1.sendIdx["assert:equals:"]=6;
  61227. //>>excludeEnd("ctx");
  61228. $14=true._yourself();
  61229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61230. $ctx1.sendIdx["yourself"]=7;
  61231. //>>excludeEnd("ctx");
  61232. if($core.assert($14)){
  61233. $13="alternative block";
  61234. } else {
  61235. $13="alternative block2";
  61236. };
  61237. self._assert_equals_($13,"alternative block");
  61238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61239. $ctx1.sendIdx["assert:equals:"]=7;
  61240. //>>excludeEnd("ctx");
  61241. $16=true._yourself();
  61242. if($core.assert($16)){
  61243. $15="alternative block2";
  61244. } else {
  61245. $15="alternative block";
  61246. };
  61247. self._assert_equals_($15,"alternative block2");
  61248. return self;
  61249. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61250. }, function($ctx1) {$ctx1.fill(self,"testIfTrueIfFalseWithBoxing",{},$globals.BooleanTest)});
  61251. //>>excludeEnd("ctx");
  61252. },
  61253. //>>excludeStart("ide", pragmas.excludeIdeData);
  61254. args: [],
  61255. 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'.",
  61256. referencedClasses: [],
  61257. //>>excludeEnd("ide");
  61258. messageSends: ["assert:equals:", "ifTrue:", "yourself", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:"]
  61259. }),
  61260. $globals.BooleanTest);
  61261. $core.addMethod(
  61262. $core.method({
  61263. selector: "testLogic",
  61264. protocol: 'tests',
  61265. fn: function (){
  61266. var self=this;
  61267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61268. return $core.withContext(function($ctx1) {
  61269. //>>excludeEnd("ctx");
  61270. 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;
  61271. $1=true.__and(true);
  61272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61273. $ctx1.sendIdx["&"]=1;
  61274. //>>excludeEnd("ctx");
  61275. self._assert_($1);
  61276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61277. $ctx1.sendIdx["assert:"]=1;
  61278. //>>excludeEnd("ctx");
  61279. $2=true.__and(false);
  61280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61281. $ctx1.sendIdx["&"]=2;
  61282. //>>excludeEnd("ctx");
  61283. self._deny_($2);
  61284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61285. $ctx1.sendIdx["deny:"]=1;
  61286. //>>excludeEnd("ctx");
  61287. $3=false.__and(true);
  61288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61289. $ctx1.sendIdx["&"]=3;
  61290. //>>excludeEnd("ctx");
  61291. self._deny_($3);
  61292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61293. $ctx1.sendIdx["deny:"]=2;
  61294. //>>excludeEnd("ctx");
  61295. $5=false.__and(false);
  61296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61297. $ctx1.sendIdx["&"]=4;
  61298. //>>excludeEnd("ctx");
  61299. $4=self._deny_($5);
  61300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61301. $ctx1.sendIdx["deny:"]=3;
  61302. //>>excludeEnd("ctx");
  61303. $6=true.__or(true);
  61304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61305. $ctx1.sendIdx["|"]=1;
  61306. //>>excludeEnd("ctx");
  61307. self._assert_($6);
  61308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61309. $ctx1.sendIdx["assert:"]=2;
  61310. //>>excludeEnd("ctx");
  61311. $7=true.__or(false);
  61312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61313. $ctx1.sendIdx["|"]=2;
  61314. //>>excludeEnd("ctx");
  61315. self._assert_($7);
  61316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61317. $ctx1.sendIdx["assert:"]=3;
  61318. //>>excludeEnd("ctx");
  61319. $8=false.__or(true);
  61320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61321. $ctx1.sendIdx["|"]=3;
  61322. //>>excludeEnd("ctx");
  61323. self._assert_($8);
  61324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61325. $ctx1.sendIdx["assert:"]=4;
  61326. //>>excludeEnd("ctx");
  61327. $10=false.__or(false);
  61328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61329. $ctx1.sendIdx["|"]=4;
  61330. //>>excludeEnd("ctx");
  61331. $9=self._deny_($10);
  61332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61333. $ctx1.sendIdx["deny:"]=4;
  61334. //>>excludeEnd("ctx");
  61335. $12=(1).__gt((0));
  61336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61337. $ctx1.sendIdx[">"]=1;
  61338. //>>excludeEnd("ctx");
  61339. $11=true.__and($12);
  61340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61341. $ctx1.sendIdx["&"]=5;
  61342. //>>excludeEnd("ctx");
  61343. self._assert_($11);
  61344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61345. $ctx1.sendIdx["assert:"]=5;
  61346. //>>excludeEnd("ctx");
  61347. $14=(1).__gt((0));
  61348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61349. $ctx1.sendIdx[">"]=2;
  61350. //>>excludeEnd("ctx");
  61351. $13=$recv($14).__and(false);
  61352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61353. $ctx1.sendIdx["&"]=6;
  61354. //>>excludeEnd("ctx");
  61355. self._deny_($13);
  61356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61357. $ctx1.sendIdx["deny:"]=5;
  61358. //>>excludeEnd("ctx");
  61359. $17=(1).__gt((0));
  61360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61361. $ctx1.sendIdx[">"]=3;
  61362. //>>excludeEnd("ctx");
  61363. $18=(1).__gt((2));
  61364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61365. $ctx1.sendIdx[">"]=4;
  61366. //>>excludeEnd("ctx");
  61367. $16=$recv($17).__and($18);
  61368. $15=self._deny_($16);
  61369. $20=(1).__gt((0));
  61370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61371. $ctx1.sendIdx[">"]=5;
  61372. //>>excludeEnd("ctx");
  61373. $19=false.__or($20);
  61374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61375. $ctx1.sendIdx["|"]=5;
  61376. //>>excludeEnd("ctx");
  61377. self._assert_($19);
  61378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61379. $ctx1.sendIdx["assert:"]=6;
  61380. //>>excludeEnd("ctx");
  61381. $22=(1).__gt((0));
  61382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61383. $ctx1.sendIdx[">"]=6;
  61384. //>>excludeEnd("ctx");
  61385. $21=$recv($22).__or(false);
  61386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61387. $ctx1.sendIdx["|"]=6;
  61388. //>>excludeEnd("ctx");
  61389. self._assert_($21);
  61390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61391. $ctx1.sendIdx["assert:"]=7;
  61392. //>>excludeEnd("ctx");
  61393. $25=(1).__gt((0));
  61394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61395. $ctx1.sendIdx[">"]=7;
  61396. //>>excludeEnd("ctx");
  61397. $24=$recv($25).__or((1).__gt((2)));
  61398. $23=self._assert_($24);
  61399. return self;
  61400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61401. }, function($ctx1) {$ctx1.fill(self,"testLogic",{},$globals.BooleanTest)});
  61402. //>>excludeEnd("ctx");
  61403. },
  61404. //>>excludeStart("ide", pragmas.excludeIdeData);
  61405. args: [],
  61406. 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))",
  61407. referencedClasses: [],
  61408. //>>excludeEnd("ide");
  61409. messageSends: ["assert:", "&", "deny:", "|", ">"]
  61410. }),
  61411. $globals.BooleanTest);
  61412. $core.addMethod(
  61413. $core.method({
  61414. selector: "testLogicKeywords",
  61415. protocol: 'tests',
  61416. fn: function (){
  61417. var self=this;
  61418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61419. return $core.withContext(function($ctx1) {
  61420. //>>excludeEnd("ctx");
  61421. var $1,$2,$3,$5,$4,$6,$7,$8,$10,$9,$11,$13,$12,$16,$15,$14,$17,$19,$18,$22,$21,$20;
  61422. $1=true._and_((function(){
  61423. return true;
  61424. }));
  61425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61426. $ctx1.sendIdx["and:"]=1;
  61427. //>>excludeEnd("ctx");
  61428. self._assert_($1);
  61429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61430. $ctx1.sendIdx["assert:"]=1;
  61431. //>>excludeEnd("ctx");
  61432. $2=true._and_((function(){
  61433. return false;
  61434. }));
  61435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61436. $ctx1.sendIdx["and:"]=2;
  61437. //>>excludeEnd("ctx");
  61438. self._deny_($2);
  61439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61440. $ctx1.sendIdx["deny:"]=1;
  61441. //>>excludeEnd("ctx");
  61442. $3=false._and_((function(){
  61443. return true;
  61444. }));
  61445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61446. $ctx1.sendIdx["and:"]=3;
  61447. //>>excludeEnd("ctx");
  61448. self._deny_($3);
  61449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61450. $ctx1.sendIdx["deny:"]=2;
  61451. //>>excludeEnd("ctx");
  61452. $5=false._and_((function(){
  61453. return false;
  61454. }));
  61455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61456. $ctx1.sendIdx["and:"]=4;
  61457. //>>excludeEnd("ctx");
  61458. $4=self._deny_($5);
  61459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61460. $ctx1.sendIdx["deny:"]=3;
  61461. //>>excludeEnd("ctx");
  61462. $6=true._or_((function(){
  61463. return true;
  61464. }));
  61465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61466. $ctx1.sendIdx["or:"]=1;
  61467. //>>excludeEnd("ctx");
  61468. self._assert_($6);
  61469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61470. $ctx1.sendIdx["assert:"]=2;
  61471. //>>excludeEnd("ctx");
  61472. $7=true._or_((function(){
  61473. return false;
  61474. }));
  61475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61476. $ctx1.sendIdx["or:"]=2;
  61477. //>>excludeEnd("ctx");
  61478. self._assert_($7);
  61479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61480. $ctx1.sendIdx["assert:"]=3;
  61481. //>>excludeEnd("ctx");
  61482. $8=false._or_((function(){
  61483. return true;
  61484. }));
  61485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61486. $ctx1.sendIdx["or:"]=3;
  61487. //>>excludeEnd("ctx");
  61488. self._assert_($8);
  61489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61490. $ctx1.sendIdx["assert:"]=4;
  61491. //>>excludeEnd("ctx");
  61492. $10=false._or_((function(){
  61493. return false;
  61494. }));
  61495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61496. $ctx1.sendIdx["or:"]=4;
  61497. //>>excludeEnd("ctx");
  61498. $9=self._deny_($10);
  61499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61500. $ctx1.sendIdx["deny:"]=4;
  61501. //>>excludeEnd("ctx");
  61502. $11=true._and_((function(){
  61503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61504. return $core.withContext(function($ctx2) {
  61505. //>>excludeEnd("ctx");
  61506. return (1).__gt((0));
  61507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61508. $ctx2.sendIdx[">"]=1;
  61509. //>>excludeEnd("ctx");
  61510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61511. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,9)});
  61512. //>>excludeEnd("ctx");
  61513. }));
  61514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61515. $ctx1.sendIdx["and:"]=5;
  61516. //>>excludeEnd("ctx");
  61517. self._assert_($11);
  61518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61519. $ctx1.sendIdx["assert:"]=5;
  61520. //>>excludeEnd("ctx");
  61521. $13=(1).__gt((0));
  61522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61523. $ctx1.sendIdx[">"]=2;
  61524. //>>excludeEnd("ctx");
  61525. $12=$recv($13)._and_((function(){
  61526. return false;
  61527. }));
  61528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61529. $ctx1.sendIdx["and:"]=6;
  61530. //>>excludeEnd("ctx");
  61531. self._deny_($12);
  61532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61533. $ctx1.sendIdx["deny:"]=5;
  61534. //>>excludeEnd("ctx");
  61535. $16=(1).__gt((0));
  61536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61537. $ctx1.sendIdx[">"]=3;
  61538. //>>excludeEnd("ctx");
  61539. $15=$recv($16)._and_((function(){
  61540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61541. return $core.withContext(function($ctx2) {
  61542. //>>excludeEnd("ctx");
  61543. return (1).__gt((2));
  61544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61545. $ctx2.sendIdx[">"]=4;
  61546. //>>excludeEnd("ctx");
  61547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61548. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,11)});
  61549. //>>excludeEnd("ctx");
  61550. }));
  61551. $14=self._deny_($15);
  61552. $17=false._or_((function(){
  61553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61554. return $core.withContext(function($ctx2) {
  61555. //>>excludeEnd("ctx");
  61556. return (1).__gt((0));
  61557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61558. $ctx2.sendIdx[">"]=5;
  61559. //>>excludeEnd("ctx");
  61560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61561. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,12)});
  61562. //>>excludeEnd("ctx");
  61563. }));
  61564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61565. $ctx1.sendIdx["or:"]=5;
  61566. //>>excludeEnd("ctx");
  61567. self._assert_($17);
  61568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61569. $ctx1.sendIdx["assert:"]=6;
  61570. //>>excludeEnd("ctx");
  61571. $19=(1).__gt((0));
  61572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61573. $ctx1.sendIdx[">"]=6;
  61574. //>>excludeEnd("ctx");
  61575. $18=$recv($19)._or_((function(){
  61576. return false;
  61577. }));
  61578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61579. $ctx1.sendIdx["or:"]=6;
  61580. //>>excludeEnd("ctx");
  61581. self._assert_($18);
  61582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61583. $ctx1.sendIdx["assert:"]=7;
  61584. //>>excludeEnd("ctx");
  61585. $22=(1).__gt((0));
  61586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61587. $ctx1.sendIdx[">"]=7;
  61588. //>>excludeEnd("ctx");
  61589. $21=$recv($22)._or_((function(){
  61590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61591. return $core.withContext(function($ctx2) {
  61592. //>>excludeEnd("ctx");
  61593. return (1).__gt((2));
  61594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61595. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,14)});
  61596. //>>excludeEnd("ctx");
  61597. }));
  61598. $20=self._assert_($21);
  61599. return self;
  61600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61601. }, function($ctx1) {$ctx1.fill(self,"testLogicKeywords",{},$globals.BooleanTest)});
  61602. //>>excludeEnd("ctx");
  61603. },
  61604. //>>excludeStart("ide", pragmas.excludeIdeData);
  61605. args: [],
  61606. 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 ])",
  61607. referencedClasses: [],
  61608. //>>excludeEnd("ide");
  61609. messageSends: ["assert:", "and:", "deny:", "or:", ">"]
  61610. }),
  61611. $globals.BooleanTest);
  61612. $core.addMethod(
  61613. $core.method({
  61614. selector: "testNonBooleanError",
  61615. protocol: 'tests',
  61616. fn: function (){
  61617. var self=this;
  61618. function $NonBooleanReceiver(){return $globals.NonBooleanReceiver||(typeof NonBooleanReceiver=="undefined"?nil:NonBooleanReceiver)}
  61619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61620. return $core.withContext(function($ctx1) {
  61621. //>>excludeEnd("ctx");
  61622. self._should_raise_((function(){
  61623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61624. return $core.withContext(function($ctx2) {
  61625. //>>excludeEnd("ctx");
  61626. if($core.assert("")){
  61627. } else {
  61628. };
  61629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61630. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  61631. //>>excludeEnd("ctx");
  61632. }),$NonBooleanReceiver());
  61633. return self;
  61634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61635. }, function($ctx1) {$ctx1.fill(self,"testNonBooleanError",{},$globals.BooleanTest)});
  61636. //>>excludeEnd("ctx");
  61637. },
  61638. //>>excludeStart("ide", pragmas.excludeIdeData);
  61639. args: [],
  61640. source: "testNonBooleanError\x0a\x09self should: [ '' ifTrue: [] ifFalse: [] ] raise: NonBooleanReceiver",
  61641. referencedClasses: ["NonBooleanReceiver"],
  61642. //>>excludeEnd("ide");
  61643. messageSends: ["should:raise:", "ifTrue:ifFalse:"]
  61644. }),
  61645. $globals.BooleanTest);
  61646. $core.addClass('ClassBuilderTest', $globals.TestCase, ['builder', 'theClass'], 'Kernel-Tests');
  61647. $core.addMethod(
  61648. $core.method({
  61649. selector: "setUp",
  61650. protocol: 'running',
  61651. fn: function (){
  61652. var self=this;
  61653. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  61654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61655. return $core.withContext(function($ctx1) {
  61656. //>>excludeEnd("ctx");
  61657. self["@builder"]=$recv($ClassBuilder())._new();
  61658. return self;
  61659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61660. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.ClassBuilderTest)});
  61661. //>>excludeEnd("ctx");
  61662. },
  61663. //>>excludeStart("ide", pragmas.excludeIdeData);
  61664. args: [],
  61665. source: "setUp\x0a\x09builder := ClassBuilder new",
  61666. referencedClasses: ["ClassBuilder"],
  61667. //>>excludeEnd("ide");
  61668. messageSends: ["new"]
  61669. }),
  61670. $globals.ClassBuilderTest);
  61671. $core.addMethod(
  61672. $core.method({
  61673. selector: "tearDown",
  61674. protocol: 'running',
  61675. fn: function (){
  61676. var self=this;
  61677. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  61678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61679. return $core.withContext(function($ctx1) {
  61680. //>>excludeEnd("ctx");
  61681. var $1,$receiver;
  61682. $1=self["@theClass"];
  61683. if(($receiver = $1) == null || $receiver.isNil){
  61684. $1;
  61685. } else {
  61686. $recv($Smalltalk())._removeClass_(self["@theClass"]);
  61687. self["@theClass"]=nil;
  61688. self["@theClass"];
  61689. };
  61690. return self;
  61691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61692. }, function($ctx1) {$ctx1.fill(self,"tearDown",{},$globals.ClassBuilderTest)});
  61693. //>>excludeEnd("ctx");
  61694. },
  61695. //>>excludeStart("ide", pragmas.excludeIdeData);
  61696. args: [],
  61697. source: "tearDown\x0a\x09theClass ifNotNil: [ Smalltalk removeClass: theClass. theClass := nil ]",
  61698. referencedClasses: ["Smalltalk"],
  61699. //>>excludeEnd("ide");
  61700. messageSends: ["ifNotNil:", "removeClass:"]
  61701. }),
  61702. $globals.ClassBuilderTest);
  61703. $core.addMethod(
  61704. $core.method({
  61705. selector: "testClassCopy",
  61706. protocol: 'tests',
  61707. fn: function (){
  61708. var self=this;
  61709. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  61710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61711. return $core.withContext(function($ctx1) {
  61712. //>>excludeEnd("ctx");
  61713. var $2,$1,$4,$3,$6,$5,$8,$7;
  61714. self["@theClass"]=$recv(self["@builder"])._copyClass_named_($ObjectMock(),"ObjectMock2");
  61715. $2=$recv(self["@theClass"])._superclass();
  61716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61717. $ctx1.sendIdx["superclass"]=1;
  61718. //>>excludeEnd("ctx");
  61719. $1=$recv($2).__eq_eq($recv($ObjectMock())._superclass());
  61720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61721. $ctx1.sendIdx["=="]=1;
  61722. //>>excludeEnd("ctx");
  61723. self._assert_($1);
  61724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61725. $ctx1.sendIdx["assert:"]=1;
  61726. //>>excludeEnd("ctx");
  61727. $4=$recv(self["@theClass"])._instanceVariableNames();
  61728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61729. $ctx1.sendIdx["instanceVariableNames"]=1;
  61730. //>>excludeEnd("ctx");
  61731. $3=$recv($4).__eq_eq($recv($ObjectMock())._instanceVariableNames());
  61732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61733. $ctx1.sendIdx["=="]=2;
  61734. //>>excludeEnd("ctx");
  61735. self._assert_($3);
  61736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61737. $ctx1.sendIdx["assert:"]=2;
  61738. //>>excludeEnd("ctx");
  61739. self._assert_equals_($recv(self["@theClass"])._name(),"ObjectMock2");
  61740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61741. $ctx1.sendIdx["assert:equals:"]=1;
  61742. //>>excludeEnd("ctx");
  61743. $6=$recv(self["@theClass"])._package();
  61744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61745. $ctx1.sendIdx["package"]=1;
  61746. //>>excludeEnd("ctx");
  61747. $5=$recv($6).__eq_eq($recv($ObjectMock())._package());
  61748. self._assert_($5);
  61749. $8=$recv(self["@theClass"])._methodDictionary();
  61750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61751. $ctx1.sendIdx["methodDictionary"]=1;
  61752. //>>excludeEnd("ctx");
  61753. $7=$recv($8)._keys();
  61754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61755. $ctx1.sendIdx["keys"]=1;
  61756. //>>excludeEnd("ctx");
  61757. self._assert_equals_($7,$recv($recv($ObjectMock())._methodDictionary())._keys());
  61758. return self;
  61759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61760. }, function($ctx1) {$ctx1.fill(self,"testClassCopy",{},$globals.ClassBuilderTest)});
  61761. //>>excludeEnd("ctx");
  61762. },
  61763. //>>excludeStart("ide", pragmas.excludeIdeData);
  61764. args: [],
  61765. 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",
  61766. referencedClasses: ["ObjectMock"],
  61767. //>>excludeEnd("ide");
  61768. messageSends: ["copyClass:named:", "assert:", "==", "superclass", "instanceVariableNames", "assert:equals:", "name", "package", "keys", "methodDictionary"]
  61769. }),
  61770. $globals.ClassBuilderTest);
  61771. $core.addMethod(
  61772. $core.method({
  61773. selector: "testClassMigration",
  61774. protocol: 'tests',
  61775. fn: function (){
  61776. var self=this;
  61777. var instance,oldClass;
  61778. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  61779. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  61780. function $ObjectMock2(){return $globals.ObjectMock2||(typeof ObjectMock2=="undefined"?nil:ObjectMock2)}
  61781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61782. return $core.withContext(function($ctx1) {
  61783. //>>excludeEnd("ctx");
  61784. var $2,$1,$4,$3,$5,$6,$7,$8,$9,$11,$10;
  61785. oldClass=$recv(self["@builder"])._copyClass_named_($ObjectMock(),"ObjectMock2");
  61786. $2=$recv($Smalltalk())._globals();
  61787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61788. $ctx1.sendIdx["globals"]=1;
  61789. //>>excludeEnd("ctx");
  61790. $1=$recv($2)._at_("ObjectMock2");
  61791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61792. $ctx1.sendIdx["at:"]=1;
  61793. //>>excludeEnd("ctx");
  61794. instance=$recv($1)._new();
  61795. $4=$recv($Smalltalk())._globals();
  61796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61797. $ctx1.sendIdx["globals"]=2;
  61798. //>>excludeEnd("ctx");
  61799. $3=$recv($4)._at_("ObjectMock2");
  61800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61801. $ctx1.sendIdx["at:"]=2;
  61802. //>>excludeEnd("ctx");
  61803. $recv($ObjectMock())._subclass_instanceVariableNames_package_($3,"","Kernel-Tests");
  61804. $5=$recv(oldClass).__eq_eq($ObjectMock2());
  61805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61806. $ctx1.sendIdx["=="]=1;
  61807. //>>excludeEnd("ctx");
  61808. self._deny_($5);
  61809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61810. $ctx1.sendIdx["deny:"]=1;
  61811. //>>excludeEnd("ctx");
  61812. $6=$recv($recv($ObjectMock2())._superclass()).__eq_eq($ObjectMock());
  61813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61814. $ctx1.sendIdx["=="]=2;
  61815. //>>excludeEnd("ctx");
  61816. self._assert_($6);
  61817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61818. $ctx1.sendIdx["assert:"]=1;
  61819. //>>excludeEnd("ctx");
  61820. self._assert_($recv($recv($ObjectMock2())._instanceVariableNames())._isEmpty());
  61821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61822. $ctx1.sendIdx["assert:"]=2;
  61823. //>>excludeEnd("ctx");
  61824. $7=$recv($ObjectMock2())._selectors();
  61825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61826. $ctx1.sendIdx["selectors"]=1;
  61827. //>>excludeEnd("ctx");
  61828. self._assert_equals_($7,$recv(oldClass)._selectors());
  61829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61830. $ctx1.sendIdx["assert:equals:"]=1;
  61831. //>>excludeEnd("ctx");
  61832. $8=$recv($ObjectMock2())._comment();
  61833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61834. $ctx1.sendIdx["comment"]=1;
  61835. //>>excludeEnd("ctx");
  61836. self._assert_equals_($8,$recv(oldClass)._comment());
  61837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61838. $ctx1.sendIdx["assert:equals:"]=2;
  61839. //>>excludeEnd("ctx");
  61840. $9=$recv($recv($ObjectMock2())._package())._name();
  61841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61842. $ctx1.sendIdx["name"]=1;
  61843. //>>excludeEnd("ctx");
  61844. self._assert_equals_($9,"Kernel-Tests");
  61845. $11=$recv(instance)._class();
  61846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61847. $ctx1.sendIdx["class"]=1;
  61848. //>>excludeEnd("ctx");
  61849. $10=$recv($11).__eq_eq($ObjectMock2());
  61850. self._deny_($10);
  61851. self._assert_($recv($recv($recv($Smalltalk())._globals())._at_($recv($recv(instance)._class())._name()))._isNil());
  61852. $recv($Smalltalk())._removeClass_($ObjectMock2());
  61853. return self;
  61854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61855. }, function($ctx1) {$ctx1.fill(self,"testClassMigration",{instance:instance,oldClass:oldClass},$globals.ClassBuilderTest)});
  61856. //>>excludeEnd("ctx");
  61857. },
  61858. //>>excludeStart("ide", pragmas.excludeIdeData);
  61859. args: [],
  61860. 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",
  61861. referencedClasses: ["ObjectMock", "Smalltalk", "ObjectMock2"],
  61862. //>>excludeEnd("ide");
  61863. messageSends: ["copyClass:named:", "new", "at:", "globals", "subclass:instanceVariableNames:package:", "deny:", "==", "assert:", "superclass", "isEmpty", "instanceVariableNames", "assert:equals:", "selectors", "comment", "name", "package", "class", "isNil", "removeClass:"]
  61864. }),
  61865. $globals.ClassBuilderTest);
  61866. $core.addMethod(
  61867. $core.method({
  61868. selector: "testClassMigrationWithClassInstanceVariables",
  61869. protocol: 'tests',
  61870. fn: function (){
  61871. var self=this;
  61872. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  61873. function $ObjectMock2(){return $globals.ObjectMock2||(typeof ObjectMock2=="undefined"?nil:ObjectMock2)}
  61874. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  61875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61876. return $core.withContext(function($ctx1) {
  61877. //>>excludeEnd("ctx");
  61878. var $1;
  61879. $recv(self["@builder"])._copyClass_named_($ObjectMock(),"ObjectMock2");
  61880. $1=$recv($ObjectMock2())._class();
  61881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61882. $ctx1.sendIdx["class"]=1;
  61883. //>>excludeEnd("ctx");
  61884. $recv($1)._instanceVariableNames_("foo bar");
  61885. $recv($ObjectMock())._subclass_instanceVariableNames_package_($recv($recv($Smalltalk())._globals())._at_("ObjectMock2"),"","Kernel-Tests");
  61886. self._assert_equals_($recv($recv($ObjectMock2())._class())._instanceVariableNames(),["foo", "bar"]);
  61887. $recv($Smalltalk())._removeClass_($ObjectMock2());
  61888. return self;
  61889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61890. }, function($ctx1) {$ctx1.fill(self,"testClassMigrationWithClassInstanceVariables",{},$globals.ClassBuilderTest)});
  61891. //>>excludeEnd("ctx");
  61892. },
  61893. //>>excludeStart("ide", pragmas.excludeIdeData);
  61894. args: [],
  61895. 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",
  61896. referencedClasses: ["ObjectMock", "ObjectMock2", "Smalltalk"],
  61897. //>>excludeEnd("ide");
  61898. messageSends: ["copyClass:named:", "instanceVariableNames:", "class", "subclass:instanceVariableNames:package:", "at:", "globals", "assert:equals:", "instanceVariableNames", "removeClass:"]
  61899. }),
  61900. $globals.ClassBuilderTest);
  61901. $core.addMethod(
  61902. $core.method({
  61903. selector: "testClassMigrationWithSubclasses",
  61904. protocol: 'tests',
  61905. fn: function (){
  61906. var self=this;
  61907. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  61908. function $ObjectMock2(){return $globals.ObjectMock2||(typeof ObjectMock2=="undefined"?nil:ObjectMock2)}
  61909. function $ObjectMock3(){return $globals.ObjectMock3||(typeof ObjectMock3=="undefined"?nil:ObjectMock3)}
  61910. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  61911. function $ObjectMock4(){return $globals.ObjectMock4||(typeof ObjectMock4=="undefined"?nil:ObjectMock4)}
  61912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61913. return $core.withContext(function($ctx1) {
  61914. //>>excludeEnd("ctx");
  61915. var $2,$1,$4,$3;
  61916. $recv(self["@builder"])._copyClass_named_($ObjectMock(),"ObjectMock2");
  61917. $recv($ObjectMock2())._subclass_instanceVariableNames_package_("ObjectMock3","","Kernel-Tests");
  61918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61919. $ctx1.sendIdx["subclass:instanceVariableNames:package:"]=1;
  61920. //>>excludeEnd("ctx");
  61921. $recv($ObjectMock3())._subclass_instanceVariableNames_package_("ObjectMock4","","Kernel-Tests");
  61922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61923. $ctx1.sendIdx["subclass:instanceVariableNames:package:"]=2;
  61924. //>>excludeEnd("ctx");
  61925. $recv($ObjectMock())._subclass_instanceVariableNames_package_($recv($recv($Smalltalk())._globals())._at_("ObjectMock2"),"","Kernel-Tests");
  61926. $2=$recv($ObjectMock())._subclasses();
  61927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61928. $ctx1.sendIdx["subclasses"]=1;
  61929. //>>excludeEnd("ctx");
  61930. $1=$recv($2)._includes_($ObjectMock2());
  61931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61932. $ctx1.sendIdx["includes:"]=1;
  61933. //>>excludeEnd("ctx");
  61934. self._assert_($1);
  61935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61936. $ctx1.sendIdx["assert:"]=1;
  61937. //>>excludeEnd("ctx");
  61938. $4=$recv($ObjectMock2())._subclasses();
  61939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61940. $ctx1.sendIdx["subclasses"]=2;
  61941. //>>excludeEnd("ctx");
  61942. $3=$recv($4)._includes_($ObjectMock3());
  61943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61944. $ctx1.sendIdx["includes:"]=2;
  61945. //>>excludeEnd("ctx");
  61946. self._assert_($3);
  61947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61948. $ctx1.sendIdx["assert:"]=2;
  61949. //>>excludeEnd("ctx");
  61950. self._assert_($recv($recv($ObjectMock3())._subclasses())._includes_($ObjectMock4()));
  61951. $recv($recv($ObjectMock())._allSubclasses())._do_((function(each){
  61952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61953. return $core.withContext(function($ctx2) {
  61954. //>>excludeEnd("ctx");
  61955. return $recv($Smalltalk())._removeClass_(each);
  61956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61957. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  61958. //>>excludeEnd("ctx");
  61959. }));
  61960. return self;
  61961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61962. }, function($ctx1) {$ctx1.fill(self,"testClassMigrationWithSubclasses",{},$globals.ClassBuilderTest)});
  61963. //>>excludeEnd("ctx");
  61964. },
  61965. //>>excludeStart("ide", pragmas.excludeIdeData);
  61966. args: [],
  61967. 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 ]",
  61968. referencedClasses: ["ObjectMock", "ObjectMock2", "ObjectMock3", "Smalltalk", "ObjectMock4"],
  61969. //>>excludeEnd("ide");
  61970. messageSends: ["copyClass:named:", "subclass:instanceVariableNames:package:", "at:", "globals", "assert:", "includes:", "subclasses", "do:", "allSubclasses", "removeClass:"]
  61971. }),
  61972. $globals.ClassBuilderTest);
  61973. $core.addMethod(
  61974. $core.method({
  61975. selector: "testInstanceVariableNames",
  61976. protocol: 'tests',
  61977. fn: function (){
  61978. var self=this;
  61979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61980. return $core.withContext(function($ctx1) {
  61981. //>>excludeEnd("ctx");
  61982. self._assert_equals_($recv(self["@builder"])._instanceVariableNamesFor_(" hello world "),["hello", "world"]);
  61983. return self;
  61984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61985. }, function($ctx1) {$ctx1.fill(self,"testInstanceVariableNames",{},$globals.ClassBuilderTest)});
  61986. //>>excludeEnd("ctx");
  61987. },
  61988. //>>excludeStart("ide", pragmas.excludeIdeData);
  61989. args: [],
  61990. source: "testInstanceVariableNames\x0a\x09self assert: (builder instanceVariableNamesFor: ' hello world ') equals: #('hello' 'world')",
  61991. referencedClasses: [],
  61992. //>>excludeEnd("ide");
  61993. messageSends: ["assert:equals:", "instanceVariableNamesFor:"]
  61994. }),
  61995. $globals.ClassBuilderTest);
  61996. $core.addClass('CollectionTest', $globals.TestCase, [], 'Kernel-Tests');
  61997. $core.addMethod(
  61998. $core.method({
  61999. selector: "assertSameContents:as:",
  62000. protocol: 'convenience',
  62001. fn: function (aCollection,anotherCollection){
  62002. var self=this;
  62003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62004. return $core.withContext(function($ctx1) {
  62005. //>>excludeEnd("ctx");
  62006. var $2,$1,$4,$3;
  62007. $2=$recv(aCollection)._size();
  62008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62009. $ctx1.sendIdx["size"]=1;
  62010. //>>excludeEnd("ctx");
  62011. $1=$recv($2).__eq($recv(anotherCollection)._size());
  62012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62013. $ctx1.sendIdx["="]=1;
  62014. //>>excludeEnd("ctx");
  62015. self._assert_($1);
  62016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62017. $ctx1.sendIdx["assert:"]=1;
  62018. //>>excludeEnd("ctx");
  62019. $recv(aCollection)._do_((function(each){
  62020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62021. return $core.withContext(function($ctx2) {
  62022. //>>excludeEnd("ctx");
  62023. $4=$recv(aCollection)._occurrencesOf_(each);
  62024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62025. $ctx2.sendIdx["occurrencesOf:"]=1;
  62026. //>>excludeEnd("ctx");
  62027. $3=$recv($4).__eq($recv(anotherCollection)._occurrencesOf_(each));
  62028. return self._assert_($3);
  62029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62030. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62031. //>>excludeEnd("ctx");
  62032. }));
  62033. return self;
  62034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62035. }, function($ctx1) {$ctx1.fill(self,"assertSameContents:as:",{aCollection:aCollection,anotherCollection:anotherCollection},$globals.CollectionTest)});
  62036. //>>excludeEnd("ctx");
  62037. },
  62038. //>>excludeStart("ide", pragmas.excludeIdeData);
  62039. args: ["aCollection", "anotherCollection"],
  62040. 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)) ]",
  62041. referencedClasses: [],
  62042. //>>excludeEnd("ide");
  62043. messageSends: ["assert:", "=", "size", "do:", "occurrencesOf:"]
  62044. }),
  62045. $globals.CollectionTest);
  62046. $core.addMethod(
  62047. $core.method({
  62048. selector: "collection",
  62049. protocol: 'fixture',
  62050. fn: function (){
  62051. var self=this;
  62052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62053. return $core.withContext(function($ctx1) {
  62054. //>>excludeEnd("ctx");
  62055. self._subclassResponsibility();
  62056. return self;
  62057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62058. }, function($ctx1) {$ctx1.fill(self,"collection",{},$globals.CollectionTest)});
  62059. //>>excludeEnd("ctx");
  62060. },
  62061. //>>excludeStart("ide", pragmas.excludeIdeData);
  62062. args: [],
  62063. source: "collection\x0a\x09\x22Answers pre-filled collection of type tested.\x22\x0a\x0a\x09self subclassResponsibility",
  62064. referencedClasses: [],
  62065. //>>excludeEnd("ide");
  62066. messageSends: ["subclassResponsibility"]
  62067. }),
  62068. $globals.CollectionTest);
  62069. $core.addMethod(
  62070. $core.method({
  62071. selector: "collectionClass",
  62072. protocol: 'fixture',
  62073. fn: function (){
  62074. var self=this;
  62075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62076. return $core.withContext(function($ctx1) {
  62077. //>>excludeEnd("ctx");
  62078. var $1;
  62079. $1=$recv(self._class())._collectionClass();
  62080. return $1;
  62081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62082. }, function($ctx1) {$ctx1.fill(self,"collectionClass",{},$globals.CollectionTest)});
  62083. //>>excludeEnd("ctx");
  62084. },
  62085. //>>excludeStart("ide", pragmas.excludeIdeData);
  62086. args: [],
  62087. source: "collectionClass\x0a\x09\x22Answers class of collection type tested\x22\x0a\x0a\x09^ self class collectionClass",
  62088. referencedClasses: [],
  62089. //>>excludeEnd("ide");
  62090. messageSends: ["collectionClass", "class"]
  62091. }),
  62092. $globals.CollectionTest);
  62093. $core.addMethod(
  62094. $core.method({
  62095. selector: "collectionOfPrintStrings",
  62096. protocol: 'fixture',
  62097. fn: function (){
  62098. var self=this;
  62099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62100. return $core.withContext(function($ctx1) {
  62101. //>>excludeEnd("ctx");
  62102. self._subclassResponsibility();
  62103. return self;
  62104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62105. }, function($ctx1) {$ctx1.fill(self,"collectionOfPrintStrings",{},$globals.CollectionTest)});
  62106. //>>excludeEnd("ctx");
  62107. },
  62108. //>>excludeStart("ide", pragmas.excludeIdeData);
  62109. args: [],
  62110. source: "collectionOfPrintStrings\x0a\x09\x22Answers self collection but with values\x0a\x09changed to their printStrings\x22\x0a\x0a\x09self subclassResponsibility",
  62111. referencedClasses: [],
  62112. //>>excludeEnd("ide");
  62113. messageSends: ["subclassResponsibility"]
  62114. }),
  62115. $globals.CollectionTest);
  62116. $core.addMethod(
  62117. $core.method({
  62118. selector: "collectionSize",
  62119. protocol: 'fixture',
  62120. fn: function (){
  62121. var self=this;
  62122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62123. return $core.withContext(function($ctx1) {
  62124. //>>excludeEnd("ctx");
  62125. self._subclassResponsibility();
  62126. return self;
  62127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62128. }, function($ctx1) {$ctx1.fill(self,"collectionSize",{},$globals.CollectionTest)});
  62129. //>>excludeEnd("ctx");
  62130. },
  62131. //>>excludeStart("ide", pragmas.excludeIdeData);
  62132. args: [],
  62133. source: "collectionSize\x0a\x09\x22Answers size of self collection.\x22\x0a\x0a\x09self subclassResponsibility",
  62134. referencedClasses: [],
  62135. //>>excludeEnd("ide");
  62136. messageSends: ["subclassResponsibility"]
  62137. }),
  62138. $globals.CollectionTest);
  62139. $core.addMethod(
  62140. $core.method({
  62141. selector: "collectionWithDuplicates",
  62142. protocol: 'fixture',
  62143. fn: function (){
  62144. var self=this;
  62145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62146. return $core.withContext(function($ctx1) {
  62147. //>>excludeEnd("ctx");
  62148. self._subclassResponsibility();
  62149. return self;
  62150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62151. }, function($ctx1) {$ctx1.fill(self,"collectionWithDuplicates",{},$globals.CollectionTest)});
  62152. //>>excludeEnd("ctx");
  62153. },
  62154. //>>excludeStart("ide", pragmas.excludeIdeData);
  62155. args: [],
  62156. 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",
  62157. referencedClasses: [],
  62158. //>>excludeEnd("ide");
  62159. messageSends: ["subclassResponsibility"]
  62160. }),
  62161. $globals.CollectionTest);
  62162. $core.addMethod(
  62163. $core.method({
  62164. selector: "collectionWithNewValue",
  62165. protocol: 'fixture',
  62166. fn: function (){
  62167. var self=this;
  62168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62169. return $core.withContext(function($ctx1) {
  62170. //>>excludeEnd("ctx");
  62171. self._subclassResponsibility();
  62172. return self;
  62173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62174. }, function($ctx1) {$ctx1.fill(self,"collectionWithNewValue",{},$globals.CollectionTest)});
  62175. //>>excludeEnd("ctx");
  62176. },
  62177. //>>excludeStart("ide", pragmas.excludeIdeData);
  62178. args: [],
  62179. 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",
  62180. referencedClasses: [],
  62181. //>>excludeEnd("ide");
  62182. messageSends: ["subclassResponsibility"]
  62183. }),
  62184. $globals.CollectionTest);
  62185. $core.addMethod(
  62186. $core.method({
  62187. selector: "isCollectionReadOnly",
  62188. protocol: 'testing',
  62189. fn: function (){
  62190. var self=this;
  62191. return false;
  62192. },
  62193. //>>excludeStart("ide", pragmas.excludeIdeData);
  62194. args: [],
  62195. source: "isCollectionReadOnly\x0a\x09^ false",
  62196. referencedClasses: [],
  62197. //>>excludeEnd("ide");
  62198. messageSends: []
  62199. }),
  62200. $globals.CollectionTest);
  62201. $core.addMethod(
  62202. $core.method({
  62203. selector: "sampleNewValue",
  62204. protocol: 'fixture',
  62205. fn: function (){
  62206. var self=this;
  62207. return "N";
  62208. },
  62209. //>>excludeStart("ide", pragmas.excludeIdeData);
  62210. args: [],
  62211. 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'",
  62212. referencedClasses: [],
  62213. //>>excludeEnd("ide");
  62214. messageSends: []
  62215. }),
  62216. $globals.CollectionTest);
  62217. $core.addMethod(
  62218. $core.method({
  62219. selector: "sampleNewValueAsCollection",
  62220. protocol: 'fixture',
  62221. fn: function (){
  62222. var self=this;
  62223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62224. return $core.withContext(function($ctx1) {
  62225. //>>excludeEnd("ctx");
  62226. var $1;
  62227. $1=$recv(self._collectionClass())._with_(self._sampleNewValue());
  62228. return $1;
  62229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62230. }, function($ctx1) {$ctx1.fill(self,"sampleNewValueAsCollection",{},$globals.CollectionTest)});
  62231. //>>excludeEnd("ctx");
  62232. },
  62233. //>>excludeStart("ide", pragmas.excludeIdeData);
  62234. args: [],
  62235. 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",
  62236. referencedClasses: [],
  62237. //>>excludeEnd("ide");
  62238. messageSends: ["with:", "collectionClass", "sampleNewValue"]
  62239. }),
  62240. $globals.CollectionTest);
  62241. $core.addMethod(
  62242. $core.method({
  62243. selector: "testAddAll",
  62244. protocol: 'tests',
  62245. fn: function (){
  62246. var self=this;
  62247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62248. return $core.withContext(function($ctx1) {
  62249. //>>excludeEnd("ctx");
  62250. 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;
  62251. $2=self._collection();
  62252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62253. $ctx1.sendIdx["collection"]=1;
  62254. //>>excludeEnd("ctx");
  62255. $3=$2;
  62256. $5=self._collectionClass();
  62257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62258. $ctx1.sendIdx["collectionClass"]=1;
  62259. //>>excludeEnd("ctx");
  62260. $4=$recv($5)._new();
  62261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62262. $ctx1.sendIdx["new"]=1;
  62263. //>>excludeEnd("ctx");
  62264. $recv($3)._addAll_($4);
  62265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62266. $ctx1.sendIdx["addAll:"]=1;
  62267. //>>excludeEnd("ctx");
  62268. $6=$recv($2)._yourself();
  62269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62270. $ctx1.sendIdx["yourself"]=1;
  62271. //>>excludeEnd("ctx");
  62272. $1=$6;
  62273. $7=self._collection();
  62274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62275. $ctx1.sendIdx["collection"]=2;
  62276. //>>excludeEnd("ctx");
  62277. self._assert_equals_($1,$7);
  62278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62279. $ctx1.sendIdx["assert:equals:"]=1;
  62280. //>>excludeEnd("ctx");
  62281. $10=self._collectionClass();
  62282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62283. $ctx1.sendIdx["collectionClass"]=2;
  62284. //>>excludeEnd("ctx");
  62285. $9=$recv($10)._new();
  62286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62287. $ctx1.sendIdx["new"]=2;
  62288. //>>excludeEnd("ctx");
  62289. $11=$9;
  62290. $12=self._collection();
  62291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62292. $ctx1.sendIdx["collection"]=3;
  62293. //>>excludeEnd("ctx");
  62294. $recv($11)._addAll_($12);
  62295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62296. $ctx1.sendIdx["addAll:"]=2;
  62297. //>>excludeEnd("ctx");
  62298. $13=$recv($9)._yourself();
  62299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62300. $ctx1.sendIdx["yourself"]=2;
  62301. //>>excludeEnd("ctx");
  62302. $8=$13;
  62303. $14=self._collection();
  62304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62305. $ctx1.sendIdx["collection"]=4;
  62306. //>>excludeEnd("ctx");
  62307. self._assert_equals_($8,$14);
  62308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62309. $ctx1.sendIdx["assert:equals:"]=2;
  62310. //>>excludeEnd("ctx");
  62311. $17=self._collectionClass();
  62312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62313. $ctx1.sendIdx["collectionClass"]=3;
  62314. //>>excludeEnd("ctx");
  62315. $16=$recv($17)._new();
  62316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62317. $ctx1.sendIdx["new"]=3;
  62318. //>>excludeEnd("ctx");
  62319. $18=$16;
  62320. $20=self._collectionClass();
  62321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62322. $ctx1.sendIdx["collectionClass"]=4;
  62323. //>>excludeEnd("ctx");
  62324. $19=$recv($20)._new();
  62325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62326. $ctx1.sendIdx["new"]=4;
  62327. //>>excludeEnd("ctx");
  62328. $recv($18)._addAll_($19);
  62329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62330. $ctx1.sendIdx["addAll:"]=3;
  62331. //>>excludeEnd("ctx");
  62332. $21=$recv($16)._yourself();
  62333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62334. $ctx1.sendIdx["yourself"]=3;
  62335. //>>excludeEnd("ctx");
  62336. $15=$21;
  62337. self._assert_equals_($15,$recv(self._collectionClass())._new());
  62338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62339. $ctx1.sendIdx["assert:equals:"]=3;
  62340. //>>excludeEnd("ctx");
  62341. $23=self._collection();
  62342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62343. $ctx1.sendIdx["collection"]=5;
  62344. //>>excludeEnd("ctx");
  62345. $24=$23;
  62346. $25=self._sampleNewValueAsCollection();
  62347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62348. $ctx1.sendIdx["sampleNewValueAsCollection"]=1;
  62349. //>>excludeEnd("ctx");
  62350. $recv($24)._addAll_($25);
  62351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62352. $ctx1.sendIdx["addAll:"]=4;
  62353. //>>excludeEnd("ctx");
  62354. $26=$recv($23)._yourself();
  62355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62356. $ctx1.sendIdx["yourself"]=4;
  62357. //>>excludeEnd("ctx");
  62358. $22=$26;
  62359. $27=self._collectionWithNewValue();
  62360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62361. $ctx1.sendIdx["collectionWithNewValue"]=1;
  62362. //>>excludeEnd("ctx");
  62363. self._assert_equals_($22,$27);
  62364. $28=self._sampleNewValueAsCollection();
  62365. $recv($28)._addAll_(self._collection());
  62366. $29=$recv($28)._yourself();
  62367. self._assertSameContents_as_($29,self._collectionWithNewValue());
  62368. return self;
  62369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62370. }, function($ctx1) {$ctx1.fill(self,"testAddAll",{},$globals.CollectionTest)});
  62371. //>>excludeEnd("ctx");
  62372. },
  62373. //>>excludeStart("ide", pragmas.excludeIdeData);
  62374. args: [],
  62375. 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",
  62376. referencedClasses: [],
  62377. //>>excludeEnd("ide");
  62378. messageSends: ["assert:equals:", "addAll:", "collection", "new", "collectionClass", "yourself", "sampleNewValueAsCollection", "collectionWithNewValue", "assertSameContents:as:"]
  62379. }),
  62380. $globals.CollectionTest);
  62381. $core.addMethod(
  62382. $core.method({
  62383. selector: "testAllSatisfy",
  62384. protocol: 'tests',
  62385. fn: function (){
  62386. var self=this;
  62387. var collection,anyOne;
  62388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62389. return $core.withContext(function($ctx1) {
  62390. //>>excludeEnd("ctx");
  62391. var $1;
  62392. collection=self._collection();
  62393. anyOne=$recv(collection)._anyOne();
  62394. $1=$recv(collection)._allSatisfy_((function(each){
  62395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62396. return $core.withContext(function($ctx2) {
  62397. //>>excludeEnd("ctx");
  62398. return $recv(collection)._includes_(each);
  62399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62400. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62401. //>>excludeEnd("ctx");
  62402. }));
  62403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62404. $ctx1.sendIdx["allSatisfy:"]=1;
  62405. //>>excludeEnd("ctx");
  62406. self._assert_($1);
  62407. self._deny_($recv(collection)._allSatisfy_((function(each){
  62408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62409. return $core.withContext(function($ctx2) {
  62410. //>>excludeEnd("ctx");
  62411. return $recv(each).__tild_eq(anyOne);
  62412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62413. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  62414. //>>excludeEnd("ctx");
  62415. })));
  62416. return self;
  62417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62418. }, function($ctx1) {$ctx1.fill(self,"testAllSatisfy",{collection:collection,anyOne:anyOne},$globals.CollectionTest)});
  62419. //>>excludeEnd("ctx");
  62420. },
  62421. //>>excludeStart("ide", pragmas.excludeIdeData);
  62422. args: [],
  62423. 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 ])",
  62424. referencedClasses: [],
  62425. //>>excludeEnd("ide");
  62426. messageSends: ["collection", "anyOne", "assert:", "allSatisfy:", "includes:", "deny:", "~="]
  62427. }),
  62428. $globals.CollectionTest);
  62429. $core.addMethod(
  62430. $core.method({
  62431. selector: "testAnyOne",
  62432. protocol: 'tests',
  62433. fn: function (){
  62434. var self=this;
  62435. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  62436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62437. return $core.withContext(function($ctx1) {
  62438. //>>excludeEnd("ctx");
  62439. var $2,$1;
  62440. self._should_raise_((function(){
  62441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62442. return $core.withContext(function($ctx2) {
  62443. //>>excludeEnd("ctx");
  62444. return $recv($recv(self._collectionClass())._new())._anyOne();
  62445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62446. $ctx2.sendIdx["anyOne"]=1;
  62447. //>>excludeEnd("ctx");
  62448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62449. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  62450. //>>excludeEnd("ctx");
  62451. }),$Error());
  62452. $2=self._collection();
  62453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62454. $ctx1.sendIdx["collection"]=1;
  62455. //>>excludeEnd("ctx");
  62456. $1=$recv($2)._includes_($recv(self._collection())._anyOne());
  62457. self._assert_($1);
  62458. return self;
  62459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62460. }, function($ctx1) {$ctx1.fill(self,"testAnyOne",{},$globals.CollectionTest)});
  62461. //>>excludeEnd("ctx");
  62462. },
  62463. //>>excludeStart("ide", pragmas.excludeIdeData);
  62464. args: [],
  62465. source: "testAnyOne\x0a\x09self should: [ self collectionClass new anyOne ] raise: Error.\x0a\x09self assert: (self collection includes: self collection anyOne)",
  62466. referencedClasses: ["Error"],
  62467. //>>excludeEnd("ide");
  62468. messageSends: ["should:raise:", "anyOne", "new", "collectionClass", "assert:", "includes:", "collection"]
  62469. }),
  62470. $globals.CollectionTest);
  62471. $core.addMethod(
  62472. $core.method({
  62473. selector: "testAnySatisfy",
  62474. protocol: 'tests',
  62475. fn: function (){
  62476. var self=this;
  62477. var anyOne;
  62478. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  62479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62480. return $core.withContext(function($ctx1) {
  62481. //>>excludeEnd("ctx");
  62482. var $1,$3,$2;
  62483. $1=self._collection();
  62484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62485. $ctx1.sendIdx["collection"]=1;
  62486. //>>excludeEnd("ctx");
  62487. anyOne=$recv($1)._anyOne();
  62488. $3=self._collection();
  62489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62490. $ctx1.sendIdx["collection"]=2;
  62491. //>>excludeEnd("ctx");
  62492. $2=$recv($3)._anySatisfy_((function(each){
  62493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62494. return $core.withContext(function($ctx2) {
  62495. //>>excludeEnd("ctx");
  62496. return $recv(each).__eq(anyOne);
  62497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62498. $ctx2.sendIdx["="]=1;
  62499. //>>excludeEnd("ctx");
  62500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62501. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62502. //>>excludeEnd("ctx");
  62503. }));
  62504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62505. $ctx1.sendIdx["anySatisfy:"]=1;
  62506. //>>excludeEnd("ctx");
  62507. self._assert_($2);
  62508. self._deny_($recv(self._collection())._anySatisfy_((function(each){
  62509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62510. return $core.withContext(function($ctx2) {
  62511. //>>excludeEnd("ctx");
  62512. return $recv(each).__eq($recv($Object())._new());
  62513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62514. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  62515. //>>excludeEnd("ctx");
  62516. })));
  62517. return self;
  62518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62519. }, function($ctx1) {$ctx1.fill(self,"testAnySatisfy",{anyOne:anyOne},$globals.CollectionTest)});
  62520. //>>excludeEnd("ctx");
  62521. },
  62522. //>>excludeStart("ide", pragmas.excludeIdeData);
  62523. args: [],
  62524. 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 ])",
  62525. referencedClasses: ["Object"],
  62526. //>>excludeEnd("ide");
  62527. messageSends: ["anyOne", "collection", "assert:", "anySatisfy:", "=", "deny:", "new"]
  62528. }),
  62529. $globals.CollectionTest);
  62530. $core.addMethod(
  62531. $core.method({
  62532. selector: "testAsArray",
  62533. protocol: 'tests',
  62534. fn: function (){
  62535. var self=this;
  62536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62537. return $core.withContext(function($ctx1) {
  62538. //>>excludeEnd("ctx");
  62539. var $1;
  62540. $1=self._collection();
  62541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62542. $ctx1.sendIdx["collection"]=1;
  62543. //>>excludeEnd("ctx");
  62544. self._assertSameContents_as_($1,$recv(self._collection())._asArray());
  62545. return self;
  62546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62547. }, function($ctx1) {$ctx1.fill(self,"testAsArray",{},$globals.CollectionTest)});
  62548. //>>excludeEnd("ctx");
  62549. },
  62550. //>>excludeStart("ide", pragmas.excludeIdeData);
  62551. args: [],
  62552. source: "testAsArray\x0a\x09self\x0a\x09\x09assertSameContents: self collection\x0a\x09\x09as: self collection asArray",
  62553. referencedClasses: [],
  62554. //>>excludeEnd("ide");
  62555. messageSends: ["assertSameContents:as:", "collection", "asArray"]
  62556. }),
  62557. $globals.CollectionTest);
  62558. $core.addMethod(
  62559. $core.method({
  62560. selector: "testAsOrderedCollection",
  62561. protocol: 'tests',
  62562. fn: function (){
  62563. var self=this;
  62564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62565. return $core.withContext(function($ctx1) {
  62566. //>>excludeEnd("ctx");
  62567. var $1;
  62568. $1=self._collection();
  62569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62570. $ctx1.sendIdx["collection"]=1;
  62571. //>>excludeEnd("ctx");
  62572. self._assertSameContents_as_($1,$recv(self._collection())._asOrderedCollection());
  62573. return self;
  62574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62575. }, function($ctx1) {$ctx1.fill(self,"testAsOrderedCollection",{},$globals.CollectionTest)});
  62576. //>>excludeEnd("ctx");
  62577. },
  62578. //>>excludeStart("ide", pragmas.excludeIdeData);
  62579. args: [],
  62580. source: "testAsOrderedCollection\x0a\x09self\x0a\x09\x09assertSameContents: self collection\x0a\x09\x09as: self collection asOrderedCollection",
  62581. referencedClasses: [],
  62582. //>>excludeEnd("ide");
  62583. messageSends: ["assertSameContents:as:", "collection", "asOrderedCollection"]
  62584. }),
  62585. $globals.CollectionTest);
  62586. $core.addMethod(
  62587. $core.method({
  62588. selector: "testAsSet",
  62589. protocol: 'tests',
  62590. fn: function (){
  62591. var self=this;
  62592. var c,set;
  62593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62594. return $core.withContext(function($ctx1) {
  62595. //>>excludeEnd("ctx");
  62596. c=self._collectionWithDuplicates();
  62597. set=$recv(c)._asSet();
  62598. self._assert_equals_($recv(set)._size(),(5));
  62599. $recv(c)._do_((function(each){
  62600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62601. return $core.withContext(function($ctx2) {
  62602. //>>excludeEnd("ctx");
  62603. return self._assert_($recv(set)._includes_(each));
  62604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62605. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62606. //>>excludeEnd("ctx");
  62607. }));
  62608. return self;
  62609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62610. }, function($ctx1) {$ctx1.fill(self,"testAsSet",{c:c,set:set},$globals.CollectionTest)});
  62611. //>>excludeEnd("ctx");
  62612. },
  62613. //>>excludeStart("ide", pragmas.excludeIdeData);
  62614. args: [],
  62615. 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) ]",
  62616. referencedClasses: [],
  62617. //>>excludeEnd("ide");
  62618. messageSends: ["collectionWithDuplicates", "asSet", "assert:equals:", "size", "do:", "assert:", "includes:"]
  62619. }),
  62620. $globals.CollectionTest);
  62621. $core.addMethod(
  62622. $core.method({
  62623. selector: "testCollect",
  62624. protocol: 'tests',
  62625. fn: function (){
  62626. var self=this;
  62627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62628. return $core.withContext(function($ctx1) {
  62629. //>>excludeEnd("ctx");
  62630. var $2,$1,$3,$5,$4,$8,$7,$6,$11,$10,$9;
  62631. $2=self._collection();
  62632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62633. $ctx1.sendIdx["collection"]=1;
  62634. //>>excludeEnd("ctx");
  62635. $1=$recv($2)._collect_((function(each){
  62636. return each;
  62637. }));
  62638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62639. $ctx1.sendIdx["collect:"]=1;
  62640. //>>excludeEnd("ctx");
  62641. $3=self._collection();
  62642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62643. $ctx1.sendIdx["collection"]=2;
  62644. //>>excludeEnd("ctx");
  62645. self._assert_equals_($1,$3);
  62646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62647. $ctx1.sendIdx["assert:equals:"]=1;
  62648. //>>excludeEnd("ctx");
  62649. $5=self._collectionWithNewValue();
  62650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62651. $ctx1.sendIdx["collectionWithNewValue"]=1;
  62652. //>>excludeEnd("ctx");
  62653. $4=$recv($5)._collect_((function(each){
  62654. return each;
  62655. }));
  62656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62657. $ctx1.sendIdx["collect:"]=2;
  62658. //>>excludeEnd("ctx");
  62659. self._assert_equals_($4,self._collectionWithNewValue());
  62660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62661. $ctx1.sendIdx["assert:equals:"]=2;
  62662. //>>excludeEnd("ctx");
  62663. $8=self._collectionClass();
  62664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62665. $ctx1.sendIdx["collectionClass"]=1;
  62666. //>>excludeEnd("ctx");
  62667. $7=$recv($8)._new();
  62668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62669. $ctx1.sendIdx["new"]=1;
  62670. //>>excludeEnd("ctx");
  62671. $6=$recv($7)._collect_((function(each){
  62672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62673. return $core.withContext(function($ctx2) {
  62674. //>>excludeEnd("ctx");
  62675. return $recv(each)._printString();
  62676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62677. $ctx2.sendIdx["printString"]=1;
  62678. //>>excludeEnd("ctx");
  62679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62680. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  62681. //>>excludeEnd("ctx");
  62682. }));
  62683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62684. $ctx1.sendIdx["collect:"]=3;
  62685. //>>excludeEnd("ctx");
  62686. self._assert_equals_($6,$recv(self._collectionClass())._new());
  62687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62688. $ctx1.sendIdx["assert:equals:"]=3;
  62689. //>>excludeEnd("ctx");
  62690. $11=self._collection();
  62691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62692. $ctx1.sendIdx["collection"]=3;
  62693. //>>excludeEnd("ctx");
  62694. $10=$recv($11)._collect_((function(){
  62695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62696. return $core.withContext(function($ctx2) {
  62697. //>>excludeEnd("ctx");
  62698. return self._sampleNewValue();
  62699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62700. $ctx2.sendIdx["sampleNewValue"]=1;
  62701. //>>excludeEnd("ctx");
  62702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62703. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  62704. //>>excludeEnd("ctx");
  62705. }));
  62706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62707. $ctx1.sendIdx["collect:"]=4;
  62708. //>>excludeEnd("ctx");
  62709. $9=$recv($10)._detect_((function(){
  62710. return true;
  62711. }));
  62712. self._assert_equals_($9,self._sampleNewValue());
  62713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62714. $ctx1.sendIdx["assert:equals:"]=4;
  62715. //>>excludeEnd("ctx");
  62716. self._assert_equals_($recv(self._collection())._collect_((function(each){
  62717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62718. return $core.withContext(function($ctx2) {
  62719. //>>excludeEnd("ctx");
  62720. return $recv(each)._printString();
  62721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62722. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,6)});
  62723. //>>excludeEnd("ctx");
  62724. })),self._collectionOfPrintStrings());
  62725. return self;
  62726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62727. }, function($ctx1) {$ctx1.fill(self,"testCollect",{},$globals.CollectionTest)});
  62728. //>>excludeEnd("ctx");
  62729. },
  62730. //>>excludeStart("ide", pragmas.excludeIdeData);
  62731. args: [],
  62732. 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",
  62733. referencedClasses: [],
  62734. //>>excludeEnd("ide");
  62735. messageSends: ["assert:equals:", "collect:", "collection", "collectionWithNewValue", "new", "collectionClass", "printString", "detect:", "sampleNewValue", "collectionOfPrintStrings"]
  62736. }),
  62737. $globals.CollectionTest);
  62738. $core.addMethod(
  62739. $core.method({
  62740. selector: "testComma",
  62741. protocol: 'tests',
  62742. fn: function (){
  62743. var self=this;
  62744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62745. return $core.withContext(function($ctx1) {
  62746. //>>excludeEnd("ctx");
  62747. var $2,$4,$3,$1,$5,$8,$7,$9,$6,$10,$13,$12,$15,$14,$11,$17,$18,$16,$19;
  62748. $2=self._collection();
  62749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62750. $ctx1.sendIdx["collection"]=1;
  62751. //>>excludeEnd("ctx");
  62752. $4=self._collectionClass();
  62753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62754. $ctx1.sendIdx["collectionClass"]=1;
  62755. //>>excludeEnd("ctx");
  62756. $3=$recv($4)._new();
  62757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62758. $ctx1.sendIdx["new"]=1;
  62759. //>>excludeEnd("ctx");
  62760. $1=$recv($2).__comma($3);
  62761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62762. $ctx1.sendIdx[","]=1;
  62763. //>>excludeEnd("ctx");
  62764. $5=self._collection();
  62765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62766. $ctx1.sendIdx["collection"]=2;
  62767. //>>excludeEnd("ctx");
  62768. self._assert_equals_($1,$5);
  62769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62770. $ctx1.sendIdx["assert:equals:"]=1;
  62771. //>>excludeEnd("ctx");
  62772. $8=self._collectionClass();
  62773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62774. $ctx1.sendIdx["collectionClass"]=2;
  62775. //>>excludeEnd("ctx");
  62776. $7=$recv($8)._new();
  62777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62778. $ctx1.sendIdx["new"]=2;
  62779. //>>excludeEnd("ctx");
  62780. $9=self._collection();
  62781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62782. $ctx1.sendIdx["collection"]=3;
  62783. //>>excludeEnd("ctx");
  62784. $6=$recv($7).__comma($9);
  62785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62786. $ctx1.sendIdx[","]=2;
  62787. //>>excludeEnd("ctx");
  62788. $10=self._collection();
  62789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62790. $ctx1.sendIdx["collection"]=4;
  62791. //>>excludeEnd("ctx");
  62792. self._assert_equals_($6,$10);
  62793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62794. $ctx1.sendIdx["assert:equals:"]=2;
  62795. //>>excludeEnd("ctx");
  62796. $13=self._collectionClass();
  62797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62798. $ctx1.sendIdx["collectionClass"]=3;
  62799. //>>excludeEnd("ctx");
  62800. $12=$recv($13)._new();
  62801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62802. $ctx1.sendIdx["new"]=3;
  62803. //>>excludeEnd("ctx");
  62804. $15=self._collectionClass();
  62805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62806. $ctx1.sendIdx["collectionClass"]=4;
  62807. //>>excludeEnd("ctx");
  62808. $14=$recv($15)._new();
  62809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62810. $ctx1.sendIdx["new"]=4;
  62811. //>>excludeEnd("ctx");
  62812. $11=$recv($12).__comma($14);
  62813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62814. $ctx1.sendIdx[","]=3;
  62815. //>>excludeEnd("ctx");
  62816. self._assert_equals_($11,$recv(self._collectionClass())._new());
  62817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62818. $ctx1.sendIdx["assert:equals:"]=3;
  62819. //>>excludeEnd("ctx");
  62820. $17=self._collection();
  62821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62822. $ctx1.sendIdx["collection"]=5;
  62823. //>>excludeEnd("ctx");
  62824. $18=self._sampleNewValueAsCollection();
  62825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62826. $ctx1.sendIdx["sampleNewValueAsCollection"]=1;
  62827. //>>excludeEnd("ctx");
  62828. $16=$recv($17).__comma($18);
  62829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62830. $ctx1.sendIdx[","]=4;
  62831. //>>excludeEnd("ctx");
  62832. $19=self._collectionWithNewValue();
  62833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62834. $ctx1.sendIdx["collectionWithNewValue"]=1;
  62835. //>>excludeEnd("ctx");
  62836. self._assert_equals_($16,$19);
  62837. self._assertSameContents_as_($recv(self._sampleNewValueAsCollection()).__comma(self._collection()),self._collectionWithNewValue());
  62838. return self;
  62839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62840. }, function($ctx1) {$ctx1.fill(self,"testComma",{},$globals.CollectionTest)});
  62841. //>>excludeEnd("ctx");
  62842. },
  62843. //>>excludeStart("ide", pragmas.excludeIdeData);
  62844. args: [],
  62845. 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",
  62846. referencedClasses: [],
  62847. //>>excludeEnd("ide");
  62848. messageSends: ["assert:equals:", ",", "collection", "new", "collectionClass", "sampleNewValueAsCollection", "collectionWithNewValue", "assertSameContents:as:"]
  62849. }),
  62850. $globals.CollectionTest);
  62851. $core.addMethod(
  62852. $core.method({
  62853. selector: "testDetect",
  62854. protocol: 'tests',
  62855. fn: function (){
  62856. var self=this;
  62857. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  62858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62859. return $core.withContext(function($ctx1) {
  62860. //>>excludeEnd("ctx");
  62861. var $1,$2,$3,$4,$6,$5,$7;
  62862. self._shouldnt_raise_((function(){
  62863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62864. return $core.withContext(function($ctx2) {
  62865. //>>excludeEnd("ctx");
  62866. $1=self._collection();
  62867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62868. $ctx2.sendIdx["collection"]=1;
  62869. //>>excludeEnd("ctx");
  62870. return $recv($1)._detect_((function(){
  62871. return true;
  62872. }));
  62873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62874. $ctx2.sendIdx["detect:"]=1;
  62875. //>>excludeEnd("ctx");
  62876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62877. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  62878. //>>excludeEnd("ctx");
  62879. }),$Error());
  62880. self._should_raise_((function(){
  62881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62882. return $core.withContext(function($ctx2) {
  62883. //>>excludeEnd("ctx");
  62884. $2=self._collection();
  62885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62886. $ctx2.sendIdx["collection"]=2;
  62887. //>>excludeEnd("ctx");
  62888. return $recv($2)._detect_((function(){
  62889. return false;
  62890. }));
  62891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62892. $ctx2.sendIdx["detect:"]=2;
  62893. //>>excludeEnd("ctx");
  62894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62895. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  62896. //>>excludeEnd("ctx");
  62897. }),$Error());
  62898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62899. $ctx1.sendIdx["should:raise:"]=1;
  62900. //>>excludeEnd("ctx");
  62901. $3=$recv(self._sampleNewValueAsCollection())._detect_((function(){
  62902. return true;
  62903. }));
  62904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62905. $ctx1.sendIdx["detect:"]=3;
  62906. //>>excludeEnd("ctx");
  62907. $4=self._sampleNewValue();
  62908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62909. $ctx1.sendIdx["sampleNewValue"]=1;
  62910. //>>excludeEnd("ctx");
  62911. self._assert_equals_($3,$4);
  62912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62913. $ctx1.sendIdx["assert:equals:"]=1;
  62914. //>>excludeEnd("ctx");
  62915. $5=$recv(self._collectionWithNewValue())._detect_((function(each){
  62916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62917. return $core.withContext(function($ctx2) {
  62918. //>>excludeEnd("ctx");
  62919. $6=self._sampleNewValue();
  62920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62921. $ctx2.sendIdx["sampleNewValue"]=2;
  62922. //>>excludeEnd("ctx");
  62923. return $recv(each).__eq($6);
  62924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62925. $ctx2.sendIdx["="]=1;
  62926. //>>excludeEnd("ctx");
  62927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62928. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,6)});
  62929. //>>excludeEnd("ctx");
  62930. }));
  62931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62932. $ctx1.sendIdx["detect:"]=4;
  62933. //>>excludeEnd("ctx");
  62934. $7=self._sampleNewValue();
  62935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62936. $ctx1.sendIdx["sampleNewValue"]=3;
  62937. //>>excludeEnd("ctx");
  62938. self._assert_equals_($5,$7);
  62939. self._should_raise_((function(){
  62940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62941. return $core.withContext(function($ctx2) {
  62942. //>>excludeEnd("ctx");
  62943. return $recv(self._collection())._detect_((function(each){
  62944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62945. return $core.withContext(function($ctx3) {
  62946. //>>excludeEnd("ctx");
  62947. return $recv(each).__eq(self._sampleNewValue());
  62948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62949. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,8)});
  62950. //>>excludeEnd("ctx");
  62951. }));
  62952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62953. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  62954. //>>excludeEnd("ctx");
  62955. }),$Error());
  62956. return self;
  62957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62958. }, function($ctx1) {$ctx1.fill(self,"testDetect",{},$globals.CollectionTest)});
  62959. //>>excludeEnd("ctx");
  62960. },
  62961. //>>excludeStart("ide", pragmas.excludeIdeData);
  62962. args: [],
  62963. 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",
  62964. referencedClasses: ["Error"],
  62965. //>>excludeEnd("ide");
  62966. messageSends: ["shouldnt:raise:", "detect:", "collection", "should:raise:", "assert:equals:", "sampleNewValueAsCollection", "sampleNewValue", "collectionWithNewValue", "="]
  62967. }),
  62968. $globals.CollectionTest);
  62969. $core.addMethod(
  62970. $core.method({
  62971. selector: "testDetectIfNone",
  62972. protocol: 'tests',
  62973. fn: function (){
  62974. var self=this;
  62975. var sentinel;
  62976. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  62977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62978. return $core.withContext(function($ctx1) {
  62979. //>>excludeEnd("ctx");
  62980. var $3,$2,$1,$5,$4,$6,$7,$9,$8,$10;
  62981. sentinel=$recv($Object())._new();
  62982. $3=self._collection();
  62983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62984. $ctx1.sendIdx["collection"]=1;
  62985. //>>excludeEnd("ctx");
  62986. $2=$recv($3)._detect_ifNone_((function(){
  62987. return true;
  62988. }),(function(){
  62989. return sentinel;
  62990. }));
  62991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62992. $ctx1.sendIdx["detect:ifNone:"]=1;
  62993. //>>excludeEnd("ctx");
  62994. $1=$recv($2).__tild_eq(sentinel);
  62995. self._assert_($1);
  62996. $5=self._collection();
  62997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62998. $ctx1.sendIdx["collection"]=2;
  62999. //>>excludeEnd("ctx");
  63000. $4=$recv($5)._detect_ifNone_((function(){
  63001. return false;
  63002. }),(function(){
  63003. return sentinel;
  63004. }));
  63005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63006. $ctx1.sendIdx["detect:ifNone:"]=2;
  63007. //>>excludeEnd("ctx");
  63008. self._assert_equals_($4,sentinel);
  63009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63010. $ctx1.sendIdx["assert:equals:"]=1;
  63011. //>>excludeEnd("ctx");
  63012. $6=$recv(self._sampleNewValueAsCollection())._detect_ifNone_((function(){
  63013. return true;
  63014. }),(function(){
  63015. return sentinel;
  63016. }));
  63017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63018. $ctx1.sendIdx["detect:ifNone:"]=3;
  63019. //>>excludeEnd("ctx");
  63020. $7=self._sampleNewValue();
  63021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63022. $ctx1.sendIdx["sampleNewValue"]=1;
  63023. //>>excludeEnd("ctx");
  63024. self._assert_equals_($6,$7);
  63025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63026. $ctx1.sendIdx["assert:equals:"]=2;
  63027. //>>excludeEnd("ctx");
  63028. $8=$recv(self._collectionWithNewValue())._detect_ifNone_((function(each){
  63029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63030. return $core.withContext(function($ctx2) {
  63031. //>>excludeEnd("ctx");
  63032. $9=self._sampleNewValue();
  63033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63034. $ctx2.sendIdx["sampleNewValue"]=2;
  63035. //>>excludeEnd("ctx");
  63036. return $recv(each).__eq($9);
  63037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63038. $ctx2.sendIdx["="]=1;
  63039. //>>excludeEnd("ctx");
  63040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63041. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,7)});
  63042. //>>excludeEnd("ctx");
  63043. }),(function(){
  63044. return sentinel;
  63045. }));
  63046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63047. $ctx1.sendIdx["detect:ifNone:"]=4;
  63048. //>>excludeEnd("ctx");
  63049. $10=self._sampleNewValue();
  63050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63051. $ctx1.sendIdx["sampleNewValue"]=3;
  63052. //>>excludeEnd("ctx");
  63053. self._assert_equals_($8,$10);
  63054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63055. $ctx1.sendIdx["assert:equals:"]=3;
  63056. //>>excludeEnd("ctx");
  63057. self._assert_equals_($recv(self._collection())._detect_ifNone_((function(each){
  63058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63059. return $core.withContext(function($ctx2) {
  63060. //>>excludeEnd("ctx");
  63061. return $recv(each).__eq(self._sampleNewValue());
  63062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63063. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,9)});
  63064. //>>excludeEnd("ctx");
  63065. }),(function(){
  63066. return sentinel;
  63067. })),sentinel);
  63068. return self;
  63069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63070. }, function($ctx1) {$ctx1.fill(self,"testDetectIfNone",{sentinel:sentinel},$globals.CollectionTest)});
  63071. //>>excludeEnd("ctx");
  63072. },
  63073. //>>excludeStart("ide", pragmas.excludeIdeData);
  63074. args: [],
  63075. 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",
  63076. referencedClasses: ["Object"],
  63077. //>>excludeEnd("ide");
  63078. messageSends: ["new", "assert:", "~=", "detect:ifNone:", "collection", "assert:equals:", "sampleNewValueAsCollection", "sampleNewValue", "collectionWithNewValue", "="]
  63079. }),
  63080. $globals.CollectionTest);
  63081. $core.addMethod(
  63082. $core.method({
  63083. selector: "testDo",
  63084. protocol: 'tests',
  63085. fn: function (){
  63086. var self=this;
  63087. var newCollection;
  63088. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  63089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63090. return $core.withContext(function($ctx1) {
  63091. //>>excludeEnd("ctx");
  63092. var $1,$2;
  63093. newCollection=$recv($OrderedCollection())._new();
  63094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63095. $ctx1.sendIdx["new"]=1;
  63096. //>>excludeEnd("ctx");
  63097. $1=self._collection();
  63098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63099. $ctx1.sendIdx["collection"]=1;
  63100. //>>excludeEnd("ctx");
  63101. $recv($1)._do_((function(each){
  63102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63103. return $core.withContext(function($ctx2) {
  63104. //>>excludeEnd("ctx");
  63105. return $recv(newCollection)._add_(each);
  63106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63107. $ctx2.sendIdx["add:"]=1;
  63108. //>>excludeEnd("ctx");
  63109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63110. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  63111. //>>excludeEnd("ctx");
  63112. }));
  63113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63114. $ctx1.sendIdx["do:"]=1;
  63115. //>>excludeEnd("ctx");
  63116. self._assertSameContents_as_(self._collection(),newCollection);
  63117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63118. $ctx1.sendIdx["assertSameContents:as:"]=1;
  63119. //>>excludeEnd("ctx");
  63120. newCollection=$recv($OrderedCollection())._new();
  63121. $2=self._collectionWithDuplicates();
  63122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63123. $ctx1.sendIdx["collectionWithDuplicates"]=1;
  63124. //>>excludeEnd("ctx");
  63125. $recv($2)._do_((function(each){
  63126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63127. return $core.withContext(function($ctx2) {
  63128. //>>excludeEnd("ctx");
  63129. return $recv(newCollection)._add_(each);
  63130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63131. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  63132. //>>excludeEnd("ctx");
  63133. }));
  63134. self._assertSameContents_as_(self._collectionWithDuplicates(),newCollection);
  63135. return self;
  63136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63137. }, function($ctx1) {$ctx1.fill(self,"testDo",{newCollection:newCollection},$globals.CollectionTest)});
  63138. //>>excludeEnd("ctx");
  63139. },
  63140. //>>excludeStart("ide", pragmas.excludeIdeData);
  63141. args: [],
  63142. 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",
  63143. referencedClasses: ["OrderedCollection"],
  63144. //>>excludeEnd("ide");
  63145. messageSends: ["new", "do:", "collection", "add:", "assertSameContents:as:", "collectionWithDuplicates"]
  63146. }),
  63147. $globals.CollectionTest);
  63148. $core.addMethod(
  63149. $core.method({
  63150. selector: "testIfEmptyFamily",
  63151. protocol: 'tests',
  63152. fn: function (){
  63153. var self=this;
  63154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63155. return $core.withContext(function($ctx1) {
  63156. //>>excludeEnd("ctx");
  63157. 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;
  63158. $3=self._collectionClass();
  63159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63160. $ctx1.sendIdx["collectionClass"]=1;
  63161. //>>excludeEnd("ctx");
  63162. $2=$recv($3)._new();
  63163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63164. $ctx1.sendIdx["new"]=1;
  63165. //>>excludeEnd("ctx");
  63166. $1=$recv($2)._ifEmpty_((function(){
  63167. return (42);
  63168. }));
  63169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63170. $ctx1.sendIdx["ifEmpty:"]=1;
  63171. //>>excludeEnd("ctx");
  63172. self._assert_equals_($1,(42));
  63173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63174. $ctx1.sendIdx["assert:equals:"]=1;
  63175. //>>excludeEnd("ctx");
  63176. $5=self._collection();
  63177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63178. $ctx1.sendIdx["collection"]=1;
  63179. //>>excludeEnd("ctx");
  63180. $4=$recv($5)._ifEmpty_((function(){
  63181. return (42);
  63182. }));
  63183. $6=self._collection();
  63184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63185. $ctx1.sendIdx["collection"]=2;
  63186. //>>excludeEnd("ctx");
  63187. self._assert_equals_($4,$6);
  63188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63189. $ctx1.sendIdx["assert:equals:"]=2;
  63190. //>>excludeEnd("ctx");
  63191. $9=self._collectionClass();
  63192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63193. $ctx1.sendIdx["collectionClass"]=2;
  63194. //>>excludeEnd("ctx");
  63195. $8=$recv($9)._new();
  63196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63197. $ctx1.sendIdx["new"]=2;
  63198. //>>excludeEnd("ctx");
  63199. $7=$recv($8)._ifNotEmpty_((function(){
  63200. return (42);
  63201. }));
  63202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63203. $ctx1.sendIdx["ifNotEmpty:"]=1;
  63204. //>>excludeEnd("ctx");
  63205. $11=self._collectionClass();
  63206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63207. $ctx1.sendIdx["collectionClass"]=3;
  63208. //>>excludeEnd("ctx");
  63209. $10=$recv($11)._new();
  63210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63211. $ctx1.sendIdx["new"]=3;
  63212. //>>excludeEnd("ctx");
  63213. self._assert_equals_($7,$10);
  63214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63215. $ctx1.sendIdx["assert:equals:"]=3;
  63216. //>>excludeEnd("ctx");
  63217. $13=self._collection();
  63218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63219. $ctx1.sendIdx["collection"]=3;
  63220. //>>excludeEnd("ctx");
  63221. $12=$recv($13)._ifNotEmpty_((function(){
  63222. return (42);
  63223. }));
  63224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63225. $ctx1.sendIdx["ifNotEmpty:"]=2;
  63226. //>>excludeEnd("ctx");
  63227. self._assert_equals_($12,(42));
  63228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63229. $ctx1.sendIdx["assert:equals:"]=4;
  63230. //>>excludeEnd("ctx");
  63231. $15=self._collection();
  63232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63233. $ctx1.sendIdx["collection"]=4;
  63234. //>>excludeEnd("ctx");
  63235. $14=$recv($15)._ifNotEmpty_((function(col){
  63236. return col;
  63237. }));
  63238. $16=self._collection();
  63239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63240. $ctx1.sendIdx["collection"]=5;
  63241. //>>excludeEnd("ctx");
  63242. self._assert_equals_($14,$16);
  63243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63244. $ctx1.sendIdx["assert:equals:"]=5;
  63245. //>>excludeEnd("ctx");
  63246. $19=self._collectionClass();
  63247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63248. $ctx1.sendIdx["collectionClass"]=4;
  63249. //>>excludeEnd("ctx");
  63250. $18=$recv($19)._new();
  63251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63252. $ctx1.sendIdx["new"]=4;
  63253. //>>excludeEnd("ctx");
  63254. $17=$recv($18)._ifEmpty_ifNotEmpty_((function(){
  63255. return (42);
  63256. }),(function(){
  63257. return (999);
  63258. }));
  63259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63260. $ctx1.sendIdx["ifEmpty:ifNotEmpty:"]=1;
  63261. //>>excludeEnd("ctx");
  63262. self._assert_equals_($17,(42));
  63263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63264. $ctx1.sendIdx["assert:equals:"]=6;
  63265. //>>excludeEnd("ctx");
  63266. $21=self._collection();
  63267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63268. $ctx1.sendIdx["collection"]=6;
  63269. //>>excludeEnd("ctx");
  63270. $20=$recv($21)._ifEmpty_ifNotEmpty_((function(){
  63271. return (42);
  63272. }),(function(){
  63273. return (999);
  63274. }));
  63275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63276. $ctx1.sendIdx["ifEmpty:ifNotEmpty:"]=2;
  63277. //>>excludeEnd("ctx");
  63278. self._assert_equals_($20,(999));
  63279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63280. $ctx1.sendIdx["assert:equals:"]=7;
  63281. //>>excludeEnd("ctx");
  63282. $23=self._collection();
  63283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63284. $ctx1.sendIdx["collection"]=7;
  63285. //>>excludeEnd("ctx");
  63286. $22=$recv($23)._ifEmpty_ifNotEmpty_((function(){
  63287. return (42);
  63288. }),(function(col){
  63289. return col;
  63290. }));
  63291. $24=self._collection();
  63292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63293. $ctx1.sendIdx["collection"]=8;
  63294. //>>excludeEnd("ctx");
  63295. self._assert_equals_($22,$24);
  63296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63297. $ctx1.sendIdx["assert:equals:"]=8;
  63298. //>>excludeEnd("ctx");
  63299. $25=$recv($recv(self._collectionClass())._new())._ifNotEmpty_ifEmpty_((function(){
  63300. return (42);
  63301. }),(function(){
  63302. return (999);
  63303. }));
  63304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63305. $ctx1.sendIdx["ifNotEmpty:ifEmpty:"]=1;
  63306. //>>excludeEnd("ctx");
  63307. self._assert_equals_($25,(999));
  63308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63309. $ctx1.sendIdx["assert:equals:"]=9;
  63310. //>>excludeEnd("ctx");
  63311. $27=self._collection();
  63312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63313. $ctx1.sendIdx["collection"]=9;
  63314. //>>excludeEnd("ctx");
  63315. $26=$recv($27)._ifNotEmpty_ifEmpty_((function(){
  63316. return (42);
  63317. }),(function(){
  63318. return (999);
  63319. }));
  63320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63321. $ctx1.sendIdx["ifNotEmpty:ifEmpty:"]=2;
  63322. //>>excludeEnd("ctx");
  63323. self._assert_equals_($26,(42));
  63324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63325. $ctx1.sendIdx["assert:equals:"]=10;
  63326. //>>excludeEnd("ctx");
  63327. $29=self._collection();
  63328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63329. $ctx1.sendIdx["collection"]=10;
  63330. //>>excludeEnd("ctx");
  63331. $28=$recv($29)._ifNotEmpty_ifEmpty_((function(col){
  63332. return col;
  63333. }),(function(){
  63334. return (999);
  63335. }));
  63336. self._assert_equals_($28,self._collection());
  63337. return self;
  63338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63339. }, function($ctx1) {$ctx1.fill(self,"testIfEmptyFamily",{},$globals.CollectionTest)});
  63340. //>>excludeEnd("ctx");
  63341. },
  63342. //>>excludeStart("ide", pragmas.excludeIdeData);
  63343. args: [],
  63344. 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.",
  63345. referencedClasses: [],
  63346. //>>excludeEnd("ide");
  63347. messageSends: ["assert:equals:", "ifEmpty:", "new", "collectionClass", "collection", "ifNotEmpty:", "ifEmpty:ifNotEmpty:", "ifNotEmpty:ifEmpty:"]
  63348. }),
  63349. $globals.CollectionTest);
  63350. $core.addMethod(
  63351. $core.method({
  63352. selector: "testIsEmpty",
  63353. protocol: 'tests',
  63354. fn: function (){
  63355. var self=this;
  63356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63357. return $core.withContext(function($ctx1) {
  63358. //>>excludeEnd("ctx");
  63359. var $1;
  63360. $1=$recv($recv(self._collectionClass())._new())._isEmpty();
  63361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63362. $ctx1.sendIdx["isEmpty"]=1;
  63363. //>>excludeEnd("ctx");
  63364. self._assert_($1);
  63365. self._deny_($recv(self._collection())._isEmpty());
  63366. return self;
  63367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63368. }, function($ctx1) {$ctx1.fill(self,"testIsEmpty",{},$globals.CollectionTest)});
  63369. //>>excludeEnd("ctx");
  63370. },
  63371. //>>excludeStart("ide", pragmas.excludeIdeData);
  63372. args: [],
  63373. source: "testIsEmpty\x0a\x09self assert: self collectionClass new isEmpty.\x0a\x09self deny: self collection isEmpty",
  63374. referencedClasses: [],
  63375. //>>excludeEnd("ide");
  63376. messageSends: ["assert:", "isEmpty", "new", "collectionClass", "deny:", "collection"]
  63377. }),
  63378. $globals.CollectionTest);
  63379. $core.addMethod(
  63380. $core.method({
  63381. selector: "testNoneSatisfy",
  63382. protocol: 'tests',
  63383. fn: function (){
  63384. var self=this;
  63385. var anyOne;
  63386. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  63387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63388. return $core.withContext(function($ctx1) {
  63389. //>>excludeEnd("ctx");
  63390. var $1,$3,$2;
  63391. $1=self._collection();
  63392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63393. $ctx1.sendIdx["collection"]=1;
  63394. //>>excludeEnd("ctx");
  63395. anyOne=$recv($1)._anyOne();
  63396. $3=self._collection();
  63397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63398. $ctx1.sendIdx["collection"]=2;
  63399. //>>excludeEnd("ctx");
  63400. $2=$recv($3)._noneSatisfy_((function(each){
  63401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63402. return $core.withContext(function($ctx2) {
  63403. //>>excludeEnd("ctx");
  63404. return $recv(each).__eq(anyOne);
  63405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63406. $ctx2.sendIdx["="]=1;
  63407. //>>excludeEnd("ctx");
  63408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63409. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  63410. //>>excludeEnd("ctx");
  63411. }));
  63412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63413. $ctx1.sendIdx["noneSatisfy:"]=1;
  63414. //>>excludeEnd("ctx");
  63415. self._deny_($2);
  63416. self._assert_($recv(self._collection())._noneSatisfy_((function(each){
  63417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63418. return $core.withContext(function($ctx2) {
  63419. //>>excludeEnd("ctx");
  63420. return $recv(each).__eq($recv($Object())._new());
  63421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63422. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  63423. //>>excludeEnd("ctx");
  63424. })));
  63425. return self;
  63426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63427. }, function($ctx1) {$ctx1.fill(self,"testNoneSatisfy",{anyOne:anyOne},$globals.CollectionTest)});
  63428. //>>excludeEnd("ctx");
  63429. },
  63430. //>>excludeStart("ide", pragmas.excludeIdeData);
  63431. args: [],
  63432. 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 ])",
  63433. referencedClasses: ["Object"],
  63434. //>>excludeEnd("ide");
  63435. messageSends: ["anyOne", "collection", "deny:", "noneSatisfy:", "=", "assert:", "new"]
  63436. }),
  63437. $globals.CollectionTest);
  63438. $core.addMethod(
  63439. $core.method({
  63440. selector: "testRemoveAll",
  63441. protocol: 'tests',
  63442. fn: function (){
  63443. var self=this;
  63444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63445. return $core.withContext(function($ctx1) {
  63446. //>>excludeEnd("ctx");
  63447. var $1,$2;
  63448. $1=self._collection();
  63449. $recv($1)._removeAll();
  63450. $2=$recv($1)._yourself();
  63451. self._assert_equals_($2,$recv(self._collectionClass())._new());
  63452. return self;
  63453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63454. }, function($ctx1) {$ctx1.fill(self,"testRemoveAll",{},$globals.CollectionTest)});
  63455. //>>excludeEnd("ctx");
  63456. },
  63457. //>>excludeStart("ide", pragmas.excludeIdeData);
  63458. args: [],
  63459. source: "testRemoveAll\x0a\x09self assert: (self collection removeAll; yourself) equals: self collectionClass new",
  63460. referencedClasses: [],
  63461. //>>excludeEnd("ide");
  63462. messageSends: ["assert:equals:", "removeAll", "collection", "yourself", "new", "collectionClass"]
  63463. }),
  63464. $globals.CollectionTest);
  63465. $core.addMethod(
  63466. $core.method({
  63467. selector: "testSelect",
  63468. protocol: 'tests',
  63469. fn: function (){
  63470. var self=this;
  63471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63472. return $core.withContext(function($ctx1) {
  63473. //>>excludeEnd("ctx");
  63474. var $2,$1,$4,$3,$6,$5,$7,$9,$10,$8,$12,$13,$11,$14,$16,$17,$15;
  63475. $2=self._collection();
  63476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63477. $ctx1.sendIdx["collection"]=1;
  63478. //>>excludeEnd("ctx");
  63479. $1=$recv($2)._select_((function(){
  63480. return false;
  63481. }));
  63482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63483. $ctx1.sendIdx["select:"]=1;
  63484. //>>excludeEnd("ctx");
  63485. $4=self._collectionClass();
  63486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63487. $ctx1.sendIdx["collectionClass"]=1;
  63488. //>>excludeEnd("ctx");
  63489. $3=$recv($4)._new();
  63490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63491. $ctx1.sendIdx["new"]=1;
  63492. //>>excludeEnd("ctx");
  63493. self._assert_equals_($1,$3);
  63494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63495. $ctx1.sendIdx["assert:equals:"]=1;
  63496. //>>excludeEnd("ctx");
  63497. $6=self._collection();
  63498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63499. $ctx1.sendIdx["collection"]=2;
  63500. //>>excludeEnd("ctx");
  63501. $5=$recv($6)._select_((function(){
  63502. return true;
  63503. }));
  63504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63505. $ctx1.sendIdx["select:"]=2;
  63506. //>>excludeEnd("ctx");
  63507. $7=self._collection();
  63508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63509. $ctx1.sendIdx["collection"]=3;
  63510. //>>excludeEnd("ctx");
  63511. self._assert_equals_($5,$7);
  63512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63513. $ctx1.sendIdx["assert:equals:"]=2;
  63514. //>>excludeEnd("ctx");
  63515. $9=self._collectionWithNewValue();
  63516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63517. $ctx1.sendIdx["collectionWithNewValue"]=1;
  63518. //>>excludeEnd("ctx");
  63519. $8=$recv($9)._select_((function(each){
  63520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63521. return $core.withContext(function($ctx2) {
  63522. //>>excludeEnd("ctx");
  63523. $10=self._sampleNewValue();
  63524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63525. $ctx2.sendIdx["sampleNewValue"]=1;
  63526. //>>excludeEnd("ctx");
  63527. return $recv(each).__eq($10);
  63528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63529. $ctx2.sendIdx["="]=1;
  63530. //>>excludeEnd("ctx");
  63531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63532. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  63533. //>>excludeEnd("ctx");
  63534. }));
  63535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63536. $ctx1.sendIdx["select:"]=3;
  63537. //>>excludeEnd("ctx");
  63538. self._assert_equals_($8,self._sampleNewValueAsCollection());
  63539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63540. $ctx1.sendIdx["assert:equals:"]=3;
  63541. //>>excludeEnd("ctx");
  63542. $12=self._collectionWithNewValue();
  63543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63544. $ctx1.sendIdx["collectionWithNewValue"]=2;
  63545. //>>excludeEnd("ctx");
  63546. $11=$recv($12)._select_((function(each){
  63547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63548. return $core.withContext(function($ctx2) {
  63549. //>>excludeEnd("ctx");
  63550. $13=self._sampleNewValue();
  63551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63552. $ctx2.sendIdx["sampleNewValue"]=2;
  63553. //>>excludeEnd("ctx");
  63554. return $recv(each).__tild_eq($13);
  63555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63556. $ctx2.sendIdx["~="]=1;
  63557. //>>excludeEnd("ctx");
  63558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63559. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  63560. //>>excludeEnd("ctx");
  63561. }));
  63562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63563. $ctx1.sendIdx["select:"]=4;
  63564. //>>excludeEnd("ctx");
  63565. $14=self._collection();
  63566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63567. $ctx1.sendIdx["collection"]=4;
  63568. //>>excludeEnd("ctx");
  63569. self._assert_equals_($11,$14);
  63570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63571. $ctx1.sendIdx["assert:equals:"]=4;
  63572. //>>excludeEnd("ctx");
  63573. $16=self._collection();
  63574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63575. $ctx1.sendIdx["collection"]=5;
  63576. //>>excludeEnd("ctx");
  63577. $15=$recv($16)._select_((function(each){
  63578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63579. return $core.withContext(function($ctx2) {
  63580. //>>excludeEnd("ctx");
  63581. $17=self._sampleNewValue();
  63582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63583. $ctx2.sendIdx["sampleNewValue"]=3;
  63584. //>>excludeEnd("ctx");
  63585. return $recv(each).__eq($17);
  63586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63587. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,5)});
  63588. //>>excludeEnd("ctx");
  63589. }));
  63590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63591. $ctx1.sendIdx["select:"]=5;
  63592. //>>excludeEnd("ctx");
  63593. self._assert_equals_($15,$recv(self._collectionClass())._new());
  63594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63595. $ctx1.sendIdx["assert:equals:"]=5;
  63596. //>>excludeEnd("ctx");
  63597. self._assert_equals_($recv(self._collectionWithNewValue())._select_((function(each){
  63598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63599. return $core.withContext(function($ctx2) {
  63600. //>>excludeEnd("ctx");
  63601. return $recv(each).__tild_eq(self._sampleNewValue());
  63602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63603. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,6)});
  63604. //>>excludeEnd("ctx");
  63605. })),self._collection());
  63606. return self;
  63607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63608. }, function($ctx1) {$ctx1.fill(self,"testSelect",{},$globals.CollectionTest)});
  63609. //>>excludeEnd("ctx");
  63610. },
  63611. //>>excludeStart("ide", pragmas.excludeIdeData);
  63612. args: [],
  63613. 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",
  63614. referencedClasses: [],
  63615. //>>excludeEnd("ide");
  63616. messageSends: ["assert:equals:", "select:", "collection", "new", "collectionClass", "collectionWithNewValue", "=", "sampleNewValue", "sampleNewValueAsCollection", "~="]
  63617. }),
  63618. $globals.CollectionTest);
  63619. $core.addMethod(
  63620. $core.method({
  63621. selector: "testSize",
  63622. protocol: 'tests',
  63623. fn: function (){
  63624. var self=this;
  63625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63626. return $core.withContext(function($ctx1) {
  63627. //>>excludeEnd("ctx");
  63628. var $1,$2;
  63629. $1=$recv($recv(self._collectionClass())._new())._size();
  63630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63631. $ctx1.sendIdx["size"]=1;
  63632. //>>excludeEnd("ctx");
  63633. self._assert_equals_($1,(0));
  63634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63635. $ctx1.sendIdx["assert:equals:"]=1;
  63636. //>>excludeEnd("ctx");
  63637. $2=$recv(self._sampleNewValueAsCollection())._size();
  63638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63639. $ctx1.sendIdx["size"]=2;
  63640. //>>excludeEnd("ctx");
  63641. self._assert_equals_($2,(1));
  63642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63643. $ctx1.sendIdx["assert:equals:"]=2;
  63644. //>>excludeEnd("ctx");
  63645. self._assert_equals_($recv(self._collection())._size(),self._collectionSize());
  63646. return self;
  63647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63648. }, function($ctx1) {$ctx1.fill(self,"testSize",{},$globals.CollectionTest)});
  63649. //>>excludeEnd("ctx");
  63650. },
  63651. //>>excludeStart("ide", pragmas.excludeIdeData);
  63652. args: [],
  63653. 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",
  63654. referencedClasses: [],
  63655. //>>excludeEnd("ide");
  63656. messageSends: ["assert:equals:", "size", "new", "collectionClass", "sampleNewValueAsCollection", "collection", "collectionSize"]
  63657. }),
  63658. $globals.CollectionTest);
  63659. $core.addMethod(
  63660. $core.method({
  63661. selector: "collectionClass",
  63662. protocol: 'fixture',
  63663. fn: function (){
  63664. var self=this;
  63665. return nil;
  63666. },
  63667. //>>excludeStart("ide", pragmas.excludeIdeData);
  63668. args: [],
  63669. source: "collectionClass\x0a\x09\x22Answers class of collection type tested,\x0a\x09or nil if test is abstract\x22\x0a\x0a\x09^ nil",
  63670. referencedClasses: [],
  63671. //>>excludeEnd("ide");
  63672. messageSends: []
  63673. }),
  63674. $globals.CollectionTest.klass);
  63675. $core.addMethod(
  63676. $core.method({
  63677. selector: "isAbstract",
  63678. protocol: 'testing',
  63679. fn: function (){
  63680. var self=this;
  63681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63682. return $core.withContext(function($ctx1) {
  63683. //>>excludeEnd("ctx");
  63684. var $1;
  63685. $1=$recv(self._collectionClass())._isNil();
  63686. return $1;
  63687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63688. }, function($ctx1) {$ctx1.fill(self,"isAbstract",{},$globals.CollectionTest.klass)});
  63689. //>>excludeEnd("ctx");
  63690. },
  63691. //>>excludeStart("ide", pragmas.excludeIdeData);
  63692. args: [],
  63693. source: "isAbstract\x0a\x09^ self collectionClass isNil",
  63694. referencedClasses: [],
  63695. //>>excludeEnd("ide");
  63696. messageSends: ["isNil", "collectionClass"]
  63697. }),
  63698. $globals.CollectionTest.klass);
  63699. $core.addClass('IndexableCollectionTest', $globals.CollectionTest, [], 'Kernel-Tests');
  63700. $core.addMethod(
  63701. $core.method({
  63702. selector: "collectionWithNewValue",
  63703. protocol: 'fixture',
  63704. fn: function (){
  63705. var self=this;
  63706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63707. return $core.withContext(function($ctx1) {
  63708. //>>excludeEnd("ctx");
  63709. self._subclassResponsibility();
  63710. return self;
  63711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63712. }, function($ctx1) {$ctx1.fill(self,"collectionWithNewValue",{},$globals.IndexableCollectionTest)});
  63713. //>>excludeEnd("ctx");
  63714. },
  63715. //>>excludeStart("ide", pragmas.excludeIdeData);
  63716. args: [],
  63717. 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",
  63718. referencedClasses: [],
  63719. //>>excludeEnd("ide");
  63720. messageSends: ["subclassResponsibility"]
  63721. }),
  63722. $globals.IndexableCollectionTest);
  63723. $core.addMethod(
  63724. $core.method({
  63725. selector: "sampleNewIndex",
  63726. protocol: 'fixture',
  63727. fn: function (){
  63728. var self=this;
  63729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63730. return $core.withContext(function($ctx1) {
  63731. //>>excludeEnd("ctx");
  63732. self._subclassResponsibility();
  63733. return self;
  63734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63735. }, function($ctx1) {$ctx1.fill(self,"sampleNewIndex",{},$globals.IndexableCollectionTest)});
  63736. //>>excludeEnd("ctx");
  63737. },
  63738. //>>excludeStart("ide", pragmas.excludeIdeData);
  63739. args: [],
  63740. 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",
  63741. referencedClasses: [],
  63742. //>>excludeEnd("ide");
  63743. messageSends: ["subclassResponsibility"]
  63744. }),
  63745. $globals.IndexableCollectionTest);
  63746. $core.addMethod(
  63747. $core.method({
  63748. selector: "sampleNonIndexesDo:",
  63749. protocol: 'fixture',
  63750. fn: function (aBlock){
  63751. var self=this;
  63752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63753. return $core.withContext(function($ctx1) {
  63754. //>>excludeEnd("ctx");
  63755. self._subclassResponsibility();
  63756. return self;
  63757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63758. }, function($ctx1) {$ctx1.fill(self,"sampleNonIndexesDo:",{aBlock:aBlock},$globals.IndexableCollectionTest)});
  63759. //>>excludeEnd("ctx");
  63760. },
  63761. //>>excludeStart("ide", pragmas.excludeIdeData);
  63762. args: ["aBlock"],
  63763. 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",
  63764. referencedClasses: [],
  63765. //>>excludeEnd("ide");
  63766. messageSends: ["subclassResponsibility"]
  63767. }),
  63768. $globals.IndexableCollectionTest);
  63769. $core.addMethod(
  63770. $core.method({
  63771. selector: "samplesDo:",
  63772. protocol: 'fixture',
  63773. fn: function (aBlock){
  63774. var self=this;
  63775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63776. return $core.withContext(function($ctx1) {
  63777. //>>excludeEnd("ctx");
  63778. self._subclassResponsibility();
  63779. return self;
  63780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63781. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.IndexableCollectionTest)});
  63782. //>>excludeEnd("ctx");
  63783. },
  63784. //>>excludeStart("ide", pragmas.excludeIdeData);
  63785. args: ["aBlock"],
  63786. 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",
  63787. referencedClasses: [],
  63788. //>>excludeEnd("ide");
  63789. messageSends: ["subclassResponsibility"]
  63790. }),
  63791. $globals.IndexableCollectionTest);
  63792. $core.addMethod(
  63793. $core.method({
  63794. selector: "testAt",
  63795. protocol: 'tests',
  63796. fn: function (){
  63797. var self=this;
  63798. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  63799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63800. return $core.withContext(function($ctx1) {
  63801. //>>excludeEnd("ctx");
  63802. var $1;
  63803. self._nonIndexesDo_((function(each){
  63804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63805. return $core.withContext(function($ctx2) {
  63806. //>>excludeEnd("ctx");
  63807. return self._should_raise_((function(){
  63808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63809. return $core.withContext(function($ctx3) {
  63810. //>>excludeEnd("ctx");
  63811. $1=self._collection();
  63812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63813. $ctx3.sendIdx["collection"]=1;
  63814. //>>excludeEnd("ctx");
  63815. return $recv($1)._at_(each);
  63816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63817. $ctx3.sendIdx["at:"]=1;
  63818. //>>excludeEnd("ctx");
  63819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63820. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  63821. //>>excludeEnd("ctx");
  63822. }),$Error());
  63823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63824. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  63825. //>>excludeEnd("ctx");
  63826. }));
  63827. self._samplesDo_((function(index,value){
  63828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63829. return $core.withContext(function($ctx2) {
  63830. //>>excludeEnd("ctx");
  63831. return self._assert_equals_($recv(self._collection())._at_(index),value);
  63832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63833. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,3)});
  63834. //>>excludeEnd("ctx");
  63835. }));
  63836. return self;
  63837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63838. }, function($ctx1) {$ctx1.fill(self,"testAt",{},$globals.IndexableCollectionTest)});
  63839. //>>excludeEnd("ctx");
  63840. },
  63841. //>>excludeStart("ide", pragmas.excludeIdeData);
  63842. args: [],
  63843. 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 ]",
  63844. referencedClasses: ["Error"],
  63845. //>>excludeEnd("ide");
  63846. messageSends: ["nonIndexesDo:", "should:raise:", "at:", "collection", "samplesDo:", "assert:equals:"]
  63847. }),
  63848. $globals.IndexableCollectionTest);
  63849. $core.addMethod(
  63850. $core.method({
  63851. selector: "testAtIfAbsent",
  63852. protocol: 'tests',
  63853. fn: function (){
  63854. var self=this;
  63855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63856. return $core.withContext(function($ctx1) {
  63857. //>>excludeEnd("ctx");
  63858. var $2,$1,$3;
  63859. self._nonIndexesDo_((function(each){
  63860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63861. return $core.withContext(function($ctx2) {
  63862. //>>excludeEnd("ctx");
  63863. $2=self._collection();
  63864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63865. $ctx2.sendIdx["collection"]=1;
  63866. //>>excludeEnd("ctx");
  63867. $1=$recv($2)._at_ifAbsent_(each,(function(){
  63868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63869. return $core.withContext(function($ctx3) {
  63870. //>>excludeEnd("ctx");
  63871. return self._sampleNewValue();
  63872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63873. $ctx3.sendIdx["sampleNewValue"]=1;
  63874. //>>excludeEnd("ctx");
  63875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63876. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  63877. //>>excludeEnd("ctx");
  63878. }));
  63879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63880. $ctx2.sendIdx["at:ifAbsent:"]=1;
  63881. //>>excludeEnd("ctx");
  63882. $3=self._sampleNewValue();
  63883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63884. $ctx2.sendIdx["sampleNewValue"]=2;
  63885. //>>excludeEnd("ctx");
  63886. return self._assert_equals_($1,$3);
  63887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63888. $ctx2.sendIdx["assert:equals:"]=1;
  63889. //>>excludeEnd("ctx");
  63890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63891. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  63892. //>>excludeEnd("ctx");
  63893. }));
  63894. self._samplesDo_((function(index,value){
  63895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63896. return $core.withContext(function($ctx2) {
  63897. //>>excludeEnd("ctx");
  63898. return self._assert_equals_($recv(self._collection())._at_ifAbsent_(index,(function(){
  63899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63900. return $core.withContext(function($ctx3) {
  63901. //>>excludeEnd("ctx");
  63902. return self._sampleNewValue();
  63903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63904. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,4)});
  63905. //>>excludeEnd("ctx");
  63906. })),value);
  63907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63908. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,3)});
  63909. //>>excludeEnd("ctx");
  63910. }));
  63911. return self;
  63912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63913. }, function($ctx1) {$ctx1.fill(self,"testAtIfAbsent",{},$globals.IndexableCollectionTest)});
  63914. //>>excludeEnd("ctx");
  63915. },
  63916. //>>excludeStart("ide", pragmas.excludeIdeData);
  63917. args: [],
  63918. 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 ].",
  63919. referencedClasses: [],
  63920. //>>excludeEnd("ide");
  63921. messageSends: ["nonIndexesDo:", "assert:equals:", "at:ifAbsent:", "collection", "sampleNewValue", "samplesDo:"]
  63922. }),
  63923. $globals.IndexableCollectionTest);
  63924. $core.addMethod(
  63925. $core.method({
  63926. selector: "testAtIfAbsentPut",
  63927. protocol: 'tests',
  63928. fn: function (){
  63929. var self=this;
  63930. var newCollection;
  63931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63932. return $core.withContext(function($ctx1) {
  63933. //>>excludeEnd("ctx");
  63934. var $1;
  63935. newCollection=self._collection();
  63936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63937. $ctx1.sendIdx["collection"]=1;
  63938. //>>excludeEnd("ctx");
  63939. self._samplesDo_((function(index,value){
  63940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63941. return $core.withContext(function($ctx2) {
  63942. //>>excludeEnd("ctx");
  63943. $1=$recv(newCollection)._at_ifAbsentPut_(index,(function(){
  63944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63945. return $core.withContext(function($ctx3) {
  63946. //>>excludeEnd("ctx");
  63947. return self._sampleNewValue();
  63948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63949. $ctx3.sendIdx["sampleNewValue"]=1;
  63950. //>>excludeEnd("ctx");
  63951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63952. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  63953. //>>excludeEnd("ctx");
  63954. }));
  63955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63956. $ctx2.sendIdx["at:ifAbsentPut:"]=1;
  63957. //>>excludeEnd("ctx");
  63958. return self._assert_equals_($1,value);
  63959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63960. $ctx2.sendIdx["assert:equals:"]=1;
  63961. //>>excludeEnd("ctx");
  63962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63963. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,1)});
  63964. //>>excludeEnd("ctx");
  63965. }));
  63966. self._assert_equals_(newCollection,self._collection());
  63967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63968. $ctx1.sendIdx["assert:equals:"]=2;
  63969. //>>excludeEnd("ctx");
  63970. self._assert_equals_($recv(newCollection)._at_ifAbsentPut_(self._sampleNewIndex(),(function(){
  63971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63972. return $core.withContext(function($ctx2) {
  63973. //>>excludeEnd("ctx");
  63974. return self._sampleNewValue();
  63975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63976. $ctx2.sendIdx["sampleNewValue"]=2;
  63977. //>>excludeEnd("ctx");
  63978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63979. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  63980. //>>excludeEnd("ctx");
  63981. })),self._sampleNewValue());
  63982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63983. $ctx1.sendIdx["assert:equals:"]=3;
  63984. //>>excludeEnd("ctx");
  63985. self._assert_equals_(newCollection,self._collectionWithNewValue());
  63986. return self;
  63987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63988. }, function($ctx1) {$ctx1.fill(self,"testAtIfAbsentPut",{newCollection:newCollection},$globals.IndexableCollectionTest)});
  63989. //>>excludeEnd("ctx");
  63990. },
  63991. //>>excludeStart("ide", pragmas.excludeIdeData);
  63992. args: [],
  63993. 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",
  63994. referencedClasses: [],
  63995. //>>excludeEnd("ide");
  63996. messageSends: ["collection", "samplesDo:", "assert:equals:", "at:ifAbsentPut:", "sampleNewValue", "sampleNewIndex", "collectionWithNewValue"]
  63997. }),
  63998. $globals.IndexableCollectionTest);
  63999. $core.addMethod(
  64000. $core.method({
  64001. selector: "testAtIfPresent",
  64002. protocol: 'tests',
  64003. fn: function (){
  64004. var self=this;
  64005. var visited,sentinel;
  64006. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  64007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64008. return $core.withContext(function($ctx1) {
  64009. //>>excludeEnd("ctx");
  64010. var $2,$1,$4,$3;
  64011. sentinel=$recv($Object())._new();
  64012. self._nonIndexesDo_((function(each){
  64013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64014. return $core.withContext(function($ctx2) {
  64015. //>>excludeEnd("ctx");
  64016. visited=nil;
  64017. visited;
  64018. $2=self._collection();
  64019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64020. $ctx2.sendIdx["collection"]=1;
  64021. //>>excludeEnd("ctx");
  64022. $1=$recv($2)._at_ifPresent_(each,(function(value1){
  64023. visited=value1;
  64024. visited;
  64025. return sentinel;
  64026. }));
  64027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64028. $ctx2.sendIdx["at:ifPresent:"]=1;
  64029. //>>excludeEnd("ctx");
  64030. self._assert_equals_($1,nil);
  64031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64032. $ctx2.sendIdx["assert:equals:"]=1;
  64033. //>>excludeEnd("ctx");
  64034. return self._assert_($recv(visited)._isNil());
  64035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64036. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  64037. //>>excludeEnd("ctx");
  64038. }));
  64039. self._samplesDo_((function(index,value){
  64040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64041. return $core.withContext(function($ctx2) {
  64042. //>>excludeEnd("ctx");
  64043. visited=nil;
  64044. visited;
  64045. $4=self._collection();
  64046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64047. $ctx2.sendIdx["collection"]=2;
  64048. //>>excludeEnd("ctx");
  64049. $3=$recv($4)._at_ifPresent_(index,(function(value2){
  64050. visited=value2;
  64051. visited;
  64052. return sentinel;
  64053. }));
  64054. self._assert_equals_($3,sentinel);
  64055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64056. $ctx2.sendIdx["assert:equals:"]=2;
  64057. //>>excludeEnd("ctx");
  64058. return self._assert_equals_(visited,$recv(self._collection())._at_(index));
  64059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64060. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,3)});
  64061. //>>excludeEnd("ctx");
  64062. }));
  64063. return self;
  64064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64065. }, function($ctx1) {$ctx1.fill(self,"testAtIfPresent",{visited:visited,sentinel:sentinel},$globals.IndexableCollectionTest)});
  64066. //>>excludeEnd("ctx");
  64067. },
  64068. //>>excludeStart("ide", pragmas.excludeIdeData);
  64069. args: [],
  64070. 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) ]",
  64071. referencedClasses: ["Object"],
  64072. //>>excludeEnd("ide");
  64073. messageSends: ["new", "nonIndexesDo:", "assert:equals:", "at:ifPresent:", "collection", "assert:", "isNil", "samplesDo:", "at:"]
  64074. }),
  64075. $globals.IndexableCollectionTest);
  64076. $core.addMethod(
  64077. $core.method({
  64078. selector: "testAtIfPresentIfAbsent",
  64079. protocol: 'tests',
  64080. fn: function (){
  64081. var self=this;
  64082. var visited,sentinel;
  64083. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  64084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64085. return $core.withContext(function($ctx1) {
  64086. //>>excludeEnd("ctx");
  64087. var $2,$1,$3,$5,$4;
  64088. sentinel=$recv($Object())._new();
  64089. self._nonIndexesDo_((function(each){
  64090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64091. return $core.withContext(function($ctx2) {
  64092. //>>excludeEnd("ctx");
  64093. visited=nil;
  64094. visited;
  64095. $2=self._collection();
  64096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64097. $ctx2.sendIdx["collection"]=1;
  64098. //>>excludeEnd("ctx");
  64099. $1=$recv($2)._at_ifPresent_ifAbsent_(each,(function(value1){
  64100. visited=value1;
  64101. visited;
  64102. return sentinel;
  64103. }),(function(){
  64104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64105. return $core.withContext(function($ctx3) {
  64106. //>>excludeEnd("ctx");
  64107. return self._sampleNewValue();
  64108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64109. $ctx3.sendIdx["sampleNewValue"]=1;
  64110. //>>excludeEnd("ctx");
  64111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64112. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  64113. //>>excludeEnd("ctx");
  64114. }));
  64115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64116. $ctx2.sendIdx["at:ifPresent:ifAbsent:"]=1;
  64117. //>>excludeEnd("ctx");
  64118. $3=self._sampleNewValue();
  64119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64120. $ctx2.sendIdx["sampleNewValue"]=2;
  64121. //>>excludeEnd("ctx");
  64122. self._assert_equals_($1,$3);
  64123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64124. $ctx2.sendIdx["assert:equals:"]=1;
  64125. //>>excludeEnd("ctx");
  64126. return self._assert_($recv(visited)._isNil());
  64127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64128. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  64129. //>>excludeEnd("ctx");
  64130. }));
  64131. self._samplesDo_((function(index,value){
  64132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64133. return $core.withContext(function($ctx2) {
  64134. //>>excludeEnd("ctx");
  64135. visited=nil;
  64136. visited;
  64137. $5=self._collection();
  64138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64139. $ctx2.sendIdx["collection"]=2;
  64140. //>>excludeEnd("ctx");
  64141. $4=$recv($5)._at_ifPresent_ifAbsent_(index,(function(value2){
  64142. visited=value2;
  64143. visited;
  64144. return sentinel;
  64145. }),(function(){
  64146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64147. return $core.withContext(function($ctx3) {
  64148. //>>excludeEnd("ctx");
  64149. return self._sampleNewValue();
  64150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64151. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,6)});
  64152. //>>excludeEnd("ctx");
  64153. }));
  64154. self._assert_equals_($4,sentinel);
  64155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64156. $ctx2.sendIdx["assert:equals:"]=2;
  64157. //>>excludeEnd("ctx");
  64158. return self._assert_equals_(visited,$recv(self._collection())._at_(index));
  64159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64160. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,4)});
  64161. //>>excludeEnd("ctx");
  64162. }));
  64163. return self;
  64164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64165. }, function($ctx1) {$ctx1.fill(self,"testAtIfPresentIfAbsent",{visited:visited,sentinel:sentinel},$globals.IndexableCollectionTest)});
  64166. //>>excludeEnd("ctx");
  64167. },
  64168. //>>excludeStart("ide", pragmas.excludeIdeData);
  64169. args: [],
  64170. 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) ]",
  64171. referencedClasses: ["Object"],
  64172. //>>excludeEnd("ide");
  64173. messageSends: ["new", "nonIndexesDo:", "assert:equals:", "at:ifPresent:ifAbsent:", "collection", "sampleNewValue", "assert:", "isNil", "samplesDo:", "at:"]
  64174. }),
  64175. $globals.IndexableCollectionTest);
  64176. $core.addMethod(
  64177. $core.method({
  64178. selector: "testAtPut",
  64179. protocol: 'tests',
  64180. fn: function (){
  64181. var self=this;
  64182. var newCollection;
  64183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64184. return $core.withContext(function($ctx1) {
  64185. //>>excludeEnd("ctx");
  64186. newCollection=self._collection();
  64187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64188. $ctx1.sendIdx["collection"]=1;
  64189. //>>excludeEnd("ctx");
  64190. self._samplesDo_((function(index,value){
  64191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64192. return $core.withContext(function($ctx2) {
  64193. //>>excludeEnd("ctx");
  64194. return $recv(newCollection)._at_put_(index,value);
  64195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64196. $ctx2.sendIdx["at:put:"]=1;
  64197. //>>excludeEnd("ctx");
  64198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64199. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,1)});
  64200. //>>excludeEnd("ctx");
  64201. }));
  64202. self._assert_equals_(newCollection,self._collection());
  64203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64204. $ctx1.sendIdx["assert:equals:"]=1;
  64205. //>>excludeEnd("ctx");
  64206. $recv(newCollection)._at_put_(self._sampleNewIndex(),self._sampleNewValue());
  64207. self._assert_equals_(newCollection,self._collectionWithNewValue());
  64208. return self;
  64209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64210. }, function($ctx1) {$ctx1.fill(self,"testAtPut",{newCollection:newCollection},$globals.IndexableCollectionTest)});
  64211. //>>excludeEnd("ctx");
  64212. },
  64213. //>>excludeStart("ide", pragmas.excludeIdeData);
  64214. args: [],
  64215. 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",
  64216. referencedClasses: [],
  64217. //>>excludeEnd("ide");
  64218. messageSends: ["collection", "samplesDo:", "at:put:", "assert:equals:", "sampleNewIndex", "sampleNewValue", "collectionWithNewValue"]
  64219. }),
  64220. $globals.IndexableCollectionTest);
  64221. $core.addMethod(
  64222. $core.method({
  64223. selector: "testEquality",
  64224. protocol: 'tests',
  64225. fn: function (){
  64226. var self=this;
  64227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64228. return $core.withContext(function($ctx1) {
  64229. //>>excludeEnd("ctx");
  64230. var $2,$1,$4,$3,$5,$6,$7,$10,$9,$11,$8;
  64231. $2=self._collectionClass();
  64232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64233. $ctx1.sendIdx["collectionClass"]=1;
  64234. //>>excludeEnd("ctx");
  64235. $1=$recv($2)._new();
  64236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64237. $ctx1.sendIdx["new"]=1;
  64238. //>>excludeEnd("ctx");
  64239. $4=self._collectionClass();
  64240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64241. $ctx1.sendIdx["collectionClass"]=2;
  64242. //>>excludeEnd("ctx");
  64243. $3=$recv($4)._new();
  64244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64245. $ctx1.sendIdx["new"]=2;
  64246. //>>excludeEnd("ctx");
  64247. self._assert_equals_($1,$3);
  64248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64249. $ctx1.sendIdx["assert:equals:"]=1;
  64250. //>>excludeEnd("ctx");
  64251. $5=self._collection();
  64252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64253. $ctx1.sendIdx["collection"]=1;
  64254. //>>excludeEnd("ctx");
  64255. $6=self._collection();
  64256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64257. $ctx1.sendIdx["collection"]=2;
  64258. //>>excludeEnd("ctx");
  64259. self._assert_equals_($5,$6);
  64260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64261. $ctx1.sendIdx["assert:equals:"]=2;
  64262. //>>excludeEnd("ctx");
  64263. $7=self._collectionWithNewValue();
  64264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64265. $ctx1.sendIdx["collectionWithNewValue"]=1;
  64266. //>>excludeEnd("ctx");
  64267. self._assert_equals_($7,self._collectionWithNewValue());
  64268. $10=self._collectionClass();
  64269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64270. $ctx1.sendIdx["collectionClass"]=3;
  64271. //>>excludeEnd("ctx");
  64272. $9=$recv($10)._new();
  64273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64274. $ctx1.sendIdx["new"]=3;
  64275. //>>excludeEnd("ctx");
  64276. $11=self._collection();
  64277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64278. $ctx1.sendIdx["collection"]=3;
  64279. //>>excludeEnd("ctx");
  64280. $8=$recv($9).__eq($11);
  64281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64282. $ctx1.sendIdx["="]=1;
  64283. //>>excludeEnd("ctx");
  64284. self._deny_($8);
  64285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64286. $ctx1.sendIdx["deny:"]=1;
  64287. //>>excludeEnd("ctx");
  64288. self._deny_($recv(self._collection()).__eq($recv(self._collectionClass())._new()));
  64289. return self;
  64290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64291. }, function($ctx1) {$ctx1.fill(self,"testEquality",{},$globals.IndexableCollectionTest)});
  64292. //>>excludeEnd("ctx");
  64293. },
  64294. //>>excludeStart("ide", pragmas.excludeIdeData);
  64295. args: [],
  64296. 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",
  64297. referencedClasses: [],
  64298. //>>excludeEnd("ide");
  64299. messageSends: ["assert:equals:", "new", "collectionClass", "collection", "collectionWithNewValue", "deny:", "="]
  64300. }),
  64301. $globals.IndexableCollectionTest);
  64302. $core.addMethod(
  64303. $core.method({
  64304. selector: "testIndexOf",
  64305. protocol: 'tests',
  64306. fn: function (){
  64307. var self=this;
  64308. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  64309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64310. return $core.withContext(function($ctx1) {
  64311. //>>excludeEnd("ctx");
  64312. var $1;
  64313. self._should_raise_((function(){
  64314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64315. return $core.withContext(function($ctx2) {
  64316. //>>excludeEnd("ctx");
  64317. $1=self._collection();
  64318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64319. $ctx2.sendIdx["collection"]=1;
  64320. //>>excludeEnd("ctx");
  64321. return $recv($1)._indexOf_(self._sampleNewValue());
  64322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64323. $ctx2.sendIdx["indexOf:"]=1;
  64324. //>>excludeEnd("ctx");
  64325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64326. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  64327. //>>excludeEnd("ctx");
  64328. }),$Error());
  64329. self._samplesDo_((function(index,value){
  64330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64331. return $core.withContext(function($ctx2) {
  64332. //>>excludeEnd("ctx");
  64333. return self._assert_equals_($recv(self._collection())._indexOf_(value),index);
  64334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64335. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,2)});
  64336. //>>excludeEnd("ctx");
  64337. }));
  64338. return self;
  64339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64340. }, function($ctx1) {$ctx1.fill(self,"testIndexOf",{},$globals.IndexableCollectionTest)});
  64341. //>>excludeEnd("ctx");
  64342. },
  64343. //>>excludeStart("ide", pragmas.excludeIdeData);
  64344. args: [],
  64345. 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 ]",
  64346. referencedClasses: ["Error"],
  64347. //>>excludeEnd("ide");
  64348. messageSends: ["should:raise:", "indexOf:", "collection", "sampleNewValue", "samplesDo:", "assert:equals:"]
  64349. }),
  64350. $globals.IndexableCollectionTest);
  64351. $core.addMethod(
  64352. $core.method({
  64353. selector: "testIndexOfWithNull",
  64354. protocol: 'tests',
  64355. fn: function (){
  64356. var self=this;
  64357. var jsNull;
  64358. function $JSON(){return $globals.JSON||(typeof JSON=="undefined"?nil:JSON)}
  64359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64360. return $core.withContext(function($ctx1) {
  64361. //>>excludeEnd("ctx");
  64362. var $1,$2;
  64363. jsNull=$recv($JSON())._parse_("null");
  64364. self._samplesDo_((function(index,value){
  64365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64366. return $core.withContext(function($ctx2) {
  64367. //>>excludeEnd("ctx");
  64368. $1=self._collection();
  64369. $recv($1)._at_put_(index,jsNull);
  64370. $2=$recv($1)._indexOf_(jsNull);
  64371. return self._assert_equals_($2,index);
  64372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64373. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,1)});
  64374. //>>excludeEnd("ctx");
  64375. }));
  64376. return self;
  64377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64378. }, function($ctx1) {$ctx1.fill(self,"testIndexOfWithNull",{jsNull:jsNull},$globals.IndexableCollectionTest)});
  64379. //>>excludeEnd("ctx");
  64380. },
  64381. //>>excludeStart("ide", pragmas.excludeIdeData);
  64382. args: [],
  64383. 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 ]",
  64384. referencedClasses: ["JSON"],
  64385. //>>excludeEnd("ide");
  64386. messageSends: ["parse:", "samplesDo:", "assert:equals:", "at:put:", "collection", "indexOf:"]
  64387. }),
  64388. $globals.IndexableCollectionTest);
  64389. $core.addMethod(
  64390. $core.method({
  64391. selector: "testWithIndexDo",
  64392. protocol: 'tests',
  64393. fn: function (){
  64394. var self=this;
  64395. var collection;
  64396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64397. return $core.withContext(function($ctx1) {
  64398. //>>excludeEnd("ctx");
  64399. collection=self._collection();
  64400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64401. $ctx1.sendIdx["collection"]=1;
  64402. //>>excludeEnd("ctx");
  64403. $recv(self._collection())._withIndexDo_((function(each,index){
  64404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64405. return $core.withContext(function($ctx2) {
  64406. //>>excludeEnd("ctx");
  64407. return self._assert_equals_($recv(collection)._at_(index),each);
  64408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64409. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,1)});
  64410. //>>excludeEnd("ctx");
  64411. }));
  64412. return self;
  64413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64414. }, function($ctx1) {$ctx1.fill(self,"testWithIndexDo",{collection:collection},$globals.IndexableCollectionTest)});
  64415. //>>excludeEnd("ctx");
  64416. },
  64417. //>>excludeStart("ide", pragmas.excludeIdeData);
  64418. args: [],
  64419. 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 ]",
  64420. referencedClasses: [],
  64421. //>>excludeEnd("ide");
  64422. messageSends: ["collection", "withIndexDo:", "assert:equals:", "at:"]
  64423. }),
  64424. $globals.IndexableCollectionTest);
  64425. $core.addClass('AssociativeCollectionTest', $globals.IndexableCollectionTest, [], 'Kernel-Tests');
  64426. $core.addMethod(
  64427. $core.method({
  64428. selector: "collectionKeys",
  64429. protocol: 'fixture',
  64430. fn: function (){
  64431. var self=this;
  64432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64433. return $core.withContext(function($ctx1) {
  64434. //>>excludeEnd("ctx");
  64435. self._subclassResponsibility();
  64436. return self;
  64437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64438. }, function($ctx1) {$ctx1.fill(self,"collectionKeys",{},$globals.AssociativeCollectionTest)});
  64439. //>>excludeEnd("ctx");
  64440. },
  64441. //>>excludeStart("ide", pragmas.excludeIdeData);
  64442. args: [],
  64443. source: "collectionKeys\x0a\x09self subclassResponsibility",
  64444. referencedClasses: [],
  64445. //>>excludeEnd("ide");
  64446. messageSends: ["subclassResponsibility"]
  64447. }),
  64448. $globals.AssociativeCollectionTest);
  64449. $core.addMethod(
  64450. $core.method({
  64451. selector: "collectionValues",
  64452. protocol: 'fixture',
  64453. fn: function (){
  64454. var self=this;
  64455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64456. return $core.withContext(function($ctx1) {
  64457. //>>excludeEnd("ctx");
  64458. self._subclassResponsibility();
  64459. return self;
  64460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64461. }, function($ctx1) {$ctx1.fill(self,"collectionValues",{},$globals.AssociativeCollectionTest)});
  64462. //>>excludeEnd("ctx");
  64463. },
  64464. //>>excludeStart("ide", pragmas.excludeIdeData);
  64465. args: [],
  64466. source: "collectionValues\x0a\x09self subclassResponsibility",
  64467. referencedClasses: [],
  64468. //>>excludeEnd("ide");
  64469. messageSends: ["subclassResponsibility"]
  64470. }),
  64471. $globals.AssociativeCollectionTest);
  64472. $core.addMethod(
  64473. $core.method({
  64474. selector: "nonIndexesDo:",
  64475. protocol: 'fixture',
  64476. fn: function (aBlock){
  64477. var self=this;
  64478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64479. return $core.withContext(function($ctx1) {
  64480. //>>excludeEnd("ctx");
  64481. $recv(aBlock)._value_((5));
  64482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64483. $ctx1.sendIdx["value:"]=1;
  64484. //>>excludeEnd("ctx");
  64485. $recv(aBlock)._value_("z");
  64486. return self;
  64487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64488. }, function($ctx1) {$ctx1.fill(self,"nonIndexesDo:",{aBlock:aBlock},$globals.AssociativeCollectionTest)});
  64489. //>>excludeEnd("ctx");
  64490. },
  64491. //>>excludeStart("ide", pragmas.excludeIdeData);
  64492. args: ["aBlock"],
  64493. source: "nonIndexesDo: aBlock\x0a\x09aBlock value: 5.\x0a\x09aBlock value: 'z'",
  64494. referencedClasses: [],
  64495. //>>excludeEnd("ide");
  64496. messageSends: ["value:"]
  64497. }),
  64498. $globals.AssociativeCollectionTest);
  64499. $core.addMethod(
  64500. $core.method({
  64501. selector: "sampleNewIndex",
  64502. protocol: 'fixture',
  64503. fn: function (){
  64504. var self=this;
  64505. return "new";
  64506. },
  64507. //>>excludeStart("ide", pragmas.excludeIdeData);
  64508. args: [],
  64509. source: "sampleNewIndex\x0a\x09^ 'new'",
  64510. referencedClasses: [],
  64511. //>>excludeEnd("ide");
  64512. messageSends: []
  64513. }),
  64514. $globals.AssociativeCollectionTest);
  64515. $core.addMethod(
  64516. $core.method({
  64517. selector: "samplesDo:",
  64518. protocol: 'fixture',
  64519. fn: function (aBlock){
  64520. var self=this;
  64521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64522. return $core.withContext(function($ctx1) {
  64523. //>>excludeEnd("ctx");
  64524. $recv(aBlock)._value_value_("a",(2));
  64525. return self;
  64526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64527. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.AssociativeCollectionTest)});
  64528. //>>excludeEnd("ctx");
  64529. },
  64530. //>>excludeStart("ide", pragmas.excludeIdeData);
  64531. args: ["aBlock"],
  64532. source: "samplesDo: aBlock\x0a\x09aBlock value: 'a' value: 2",
  64533. referencedClasses: [],
  64534. //>>excludeEnd("ide");
  64535. messageSends: ["value:value:"]
  64536. }),
  64537. $globals.AssociativeCollectionTest);
  64538. $core.addMethod(
  64539. $core.method({
  64540. selector: "testAddAll",
  64541. protocol: 'tests',
  64542. fn: function (){
  64543. var self=this;
  64544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64545. return $core.withContext(function($ctx1) {
  64546. //>>excludeEnd("ctx");
  64547. var $2,$3,$4,$5,$1,$6,$8,$9,$10,$11,$7,$12,$14,$15,$13;
  64548. (
  64549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64550. $ctx1.supercall = true,
  64551. //>>excludeEnd("ctx");
  64552. $globals.AssociativeCollectionTest.superclass.fn.prototype._testAddAll.apply($recv(self), []));
  64553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64554. $ctx1.supercall = false;
  64555. //>>excludeEnd("ctx");;
  64556. $2=self._collection();
  64557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64558. $ctx1.sendIdx["collection"]=1;
  64559. //>>excludeEnd("ctx");
  64560. $3=$2;
  64561. $4=self._collection();
  64562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64563. $ctx1.sendIdx["collection"]=2;
  64564. //>>excludeEnd("ctx");
  64565. $recv($3)._addAll_($4);
  64566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64567. $ctx1.sendIdx["addAll:"]=1;
  64568. //>>excludeEnd("ctx");
  64569. $5=$recv($2)._yourself();
  64570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64571. $ctx1.sendIdx["yourself"]=1;
  64572. //>>excludeEnd("ctx");
  64573. $1=$5;
  64574. $6=self._collection();
  64575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64576. $ctx1.sendIdx["collection"]=3;
  64577. //>>excludeEnd("ctx");
  64578. self._assert_equals_($1,$6);
  64579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64580. $ctx1.sendIdx["assert:equals:"]=1;
  64581. //>>excludeEnd("ctx");
  64582. $8=self._collection();
  64583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64584. $ctx1.sendIdx["collection"]=4;
  64585. //>>excludeEnd("ctx");
  64586. $9=$8;
  64587. $10=self._collectionWithNewValue();
  64588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64589. $ctx1.sendIdx["collectionWithNewValue"]=1;
  64590. //>>excludeEnd("ctx");
  64591. $recv($9)._addAll_($10);
  64592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64593. $ctx1.sendIdx["addAll:"]=2;
  64594. //>>excludeEnd("ctx");
  64595. $11=$recv($8)._yourself();
  64596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64597. $ctx1.sendIdx["yourself"]=2;
  64598. //>>excludeEnd("ctx");
  64599. $7=$11;
  64600. $12=self._collectionWithNewValue();
  64601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64602. $ctx1.sendIdx["collectionWithNewValue"]=2;
  64603. //>>excludeEnd("ctx");
  64604. self._assert_equals_($7,$12);
  64605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64606. $ctx1.sendIdx["assert:equals:"]=2;
  64607. //>>excludeEnd("ctx");
  64608. $14=self._collectionWithNewValue();
  64609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64610. $ctx1.sendIdx["collectionWithNewValue"]=3;
  64611. //>>excludeEnd("ctx");
  64612. $recv($14)._addAll_(self._collection());
  64613. $15=$recv($14)._yourself();
  64614. $13=$15;
  64615. self._assert_equals_($13,self._collectionWithNewValue());
  64616. return self;
  64617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64618. }, function($ctx1) {$ctx1.fill(self,"testAddAll",{},$globals.AssociativeCollectionTest)});
  64619. //>>excludeEnd("ctx");
  64620. },
  64621. //>>excludeStart("ide", pragmas.excludeIdeData);
  64622. args: [],
  64623. 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",
  64624. referencedClasses: [],
  64625. //>>excludeEnd("ide");
  64626. messageSends: ["testAddAll", "assert:equals:", "addAll:", "collection", "yourself", "collectionWithNewValue"]
  64627. }),
  64628. $globals.AssociativeCollectionTest);
  64629. $core.addMethod(
  64630. $core.method({
  64631. selector: "testAsDictionary",
  64632. protocol: 'tests',
  64633. fn: function (){
  64634. var self=this;
  64635. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  64636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64637. return $core.withContext(function($ctx1) {
  64638. //>>excludeEnd("ctx");
  64639. self._assert_($recv($recv($recv(self._collectionClass())._new())._asDictionary())._isMemberOf_($Dictionary()));
  64640. return self;
  64641. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64642. }, function($ctx1) {$ctx1.fill(self,"testAsDictionary",{},$globals.AssociativeCollectionTest)});
  64643. //>>excludeEnd("ctx");
  64644. },
  64645. //>>excludeStart("ide", pragmas.excludeIdeData);
  64646. args: [],
  64647. source: "testAsDictionary\x0aself assert: ( self collectionClass new asDictionary isMemberOf: Dictionary ).",
  64648. referencedClasses: ["Dictionary"],
  64649. //>>excludeEnd("ide");
  64650. messageSends: ["assert:", "isMemberOf:", "asDictionary", "new", "collectionClass"]
  64651. }),
  64652. $globals.AssociativeCollectionTest);
  64653. $core.addMethod(
  64654. $core.method({
  64655. selector: "testAsHashedCollection",
  64656. protocol: 'tests',
  64657. fn: function (){
  64658. var self=this;
  64659. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  64660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64661. return $core.withContext(function($ctx1) {
  64662. //>>excludeEnd("ctx");
  64663. self._assert_($recv($recv($recv(self._collectionClass())._new())._asHashedCollection())._isMemberOf_($HashedCollection()));
  64664. return self;
  64665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64666. }, function($ctx1) {$ctx1.fill(self,"testAsHashedCollection",{},$globals.AssociativeCollectionTest)});
  64667. //>>excludeEnd("ctx");
  64668. },
  64669. //>>excludeStart("ide", pragmas.excludeIdeData);
  64670. args: [],
  64671. source: "testAsHashedCollection\x0aself assert: ( self collectionClass new asHashedCollection isMemberOf: HashedCollection ).",
  64672. referencedClasses: ["HashedCollection"],
  64673. //>>excludeEnd("ide");
  64674. messageSends: ["assert:", "isMemberOf:", "asHashedCollection", "new", "collectionClass"]
  64675. }),
  64676. $globals.AssociativeCollectionTest);
  64677. $core.addMethod(
  64678. $core.method({
  64679. selector: "testComma",
  64680. protocol: 'tests',
  64681. fn: function (){
  64682. var self=this;
  64683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64684. return $core.withContext(function($ctx1) {
  64685. //>>excludeEnd("ctx");
  64686. var $2,$3,$1,$4,$6,$7,$5,$8,$10,$9;
  64687. (
  64688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64689. $ctx1.supercall = true,
  64690. //>>excludeEnd("ctx");
  64691. $globals.AssociativeCollectionTest.superclass.fn.prototype._testComma.apply($recv(self), []));
  64692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64693. $ctx1.supercall = false;
  64694. //>>excludeEnd("ctx");;
  64695. $2=self._collection();
  64696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64697. $ctx1.sendIdx["collection"]=1;
  64698. //>>excludeEnd("ctx");
  64699. $3=self._collection();
  64700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64701. $ctx1.sendIdx["collection"]=2;
  64702. //>>excludeEnd("ctx");
  64703. $1=$recv($2).__comma($3);
  64704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64705. $ctx1.sendIdx[","]=1;
  64706. //>>excludeEnd("ctx");
  64707. $4=self._collection();
  64708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64709. $ctx1.sendIdx["collection"]=3;
  64710. //>>excludeEnd("ctx");
  64711. self._assert_equals_($1,$4);
  64712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64713. $ctx1.sendIdx["assert:equals:"]=1;
  64714. //>>excludeEnd("ctx");
  64715. $6=self._collection();
  64716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64717. $ctx1.sendIdx["collection"]=4;
  64718. //>>excludeEnd("ctx");
  64719. $7=self._collectionWithNewValue();
  64720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64721. $ctx1.sendIdx["collectionWithNewValue"]=1;
  64722. //>>excludeEnd("ctx");
  64723. $5=$recv($6).__comma($7);
  64724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64725. $ctx1.sendIdx[","]=2;
  64726. //>>excludeEnd("ctx");
  64727. $8=self._collectionWithNewValue();
  64728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64729. $ctx1.sendIdx["collectionWithNewValue"]=2;
  64730. //>>excludeEnd("ctx");
  64731. self._assert_equals_($5,$8);
  64732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64733. $ctx1.sendIdx["assert:equals:"]=2;
  64734. //>>excludeEnd("ctx");
  64735. $10=self._collectionWithNewValue();
  64736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64737. $ctx1.sendIdx["collectionWithNewValue"]=3;
  64738. //>>excludeEnd("ctx");
  64739. $9=$recv($10).__comma(self._collection());
  64740. self._assert_equals_($9,self._collectionWithNewValue());
  64741. return self;
  64742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64743. }, function($ctx1) {$ctx1.fill(self,"testComma",{},$globals.AssociativeCollectionTest)});
  64744. //>>excludeEnd("ctx");
  64745. },
  64746. //>>excludeStart("ide", pragmas.excludeIdeData);
  64747. args: [],
  64748. 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",
  64749. referencedClasses: [],
  64750. //>>excludeEnd("ide");
  64751. messageSends: ["testComma", "assert:equals:", ",", "collection", "collectionWithNewValue"]
  64752. }),
  64753. $globals.AssociativeCollectionTest);
  64754. $core.addMethod(
  64755. $core.method({
  64756. selector: "testFrom",
  64757. protocol: 'tests',
  64758. fn: function (){
  64759. var self=this;
  64760. var associations;
  64761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64762. return $core.withContext(function($ctx1) {
  64763. //>>excludeEnd("ctx");
  64764. var $1;
  64765. $1="a".__minus_gt((1));
  64766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64767. $ctx1.sendIdx["->"]=1;
  64768. //>>excludeEnd("ctx");
  64769. associations=[$1,"b".__minus_gt((2))];
  64770. self._assertSameContents_as_($recv($recv(self._class())._collectionClass())._from_(associations),$globals.HashedCollection._newFromPairs_(["a",(1),"b",(2)]));
  64771. return self;
  64772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64773. }, function($ctx1) {$ctx1.fill(self,"testFrom",{associations:associations},$globals.AssociativeCollectionTest)});
  64774. //>>excludeEnd("ctx");
  64775. },
  64776. //>>excludeStart("ide", pragmas.excludeIdeData);
  64777. args: [],
  64778. 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 }.",
  64779. referencedClasses: [],
  64780. //>>excludeEnd("ide");
  64781. messageSends: ["->", "assertSameContents:as:", "from:", "collectionClass", "class"]
  64782. }),
  64783. $globals.AssociativeCollectionTest);
  64784. $core.addMethod(
  64785. $core.method({
  64786. selector: "testKeys",
  64787. protocol: 'tests',
  64788. fn: function (){
  64789. var self=this;
  64790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64791. return $core.withContext(function($ctx1) {
  64792. //>>excludeEnd("ctx");
  64793. var $2,$1,$3,$4;
  64794. $2=$recv($recv(self._collectionClass())._new())._keys();
  64795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64796. $ctx1.sendIdx["keys"]=1;
  64797. //>>excludeEnd("ctx");
  64798. $1=$recv($2)._isEmpty();
  64799. self._assert_($1);
  64800. $3=$recv(self._collection())._keys();
  64801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64802. $ctx1.sendIdx["keys"]=2;
  64803. //>>excludeEnd("ctx");
  64804. $4=self._collectionKeys();
  64805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64806. $ctx1.sendIdx["collectionKeys"]=1;
  64807. //>>excludeEnd("ctx");
  64808. self._assertSameContents_as_($3,$4);
  64809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64810. $ctx1.sendIdx["assertSameContents:as:"]=1;
  64811. //>>excludeEnd("ctx");
  64812. self._assertSameContents_as_($recv(self._collectionWithNewValue())._keys(),$recv(self._collectionKeys()).__comma([self._sampleNewIndex()]));
  64813. return self;
  64814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64815. }, function($ctx1) {$ctx1.fill(self,"testKeys",{},$globals.AssociativeCollectionTest)});
  64816. //>>excludeEnd("ctx");
  64817. },
  64818. //>>excludeStart("ide", pragmas.excludeIdeData);
  64819. args: [],
  64820. 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 }",
  64821. referencedClasses: [],
  64822. //>>excludeEnd("ide");
  64823. messageSends: ["assert:", "isEmpty", "keys", "new", "collectionClass", "assertSameContents:as:", "collection", "collectionKeys", "collectionWithNewValue", ",", "sampleNewIndex"]
  64824. }),
  64825. $globals.AssociativeCollectionTest);
  64826. $core.addMethod(
  64827. $core.method({
  64828. selector: "testNewFromPairs",
  64829. protocol: 'tests',
  64830. fn: function (){
  64831. var self=this;
  64832. var flattenedAssociations;
  64833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64834. return $core.withContext(function($ctx1) {
  64835. //>>excludeEnd("ctx");
  64836. flattenedAssociations=["a",(1),"b",(2)];
  64837. self._assertSameContents_as_($recv($recv(self._class())._collectionClass())._newFromPairs_(flattenedAssociations),$globals.HashedCollection._newFromPairs_(["a",(1),"b",(2)]));
  64838. return self;
  64839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64840. }, function($ctx1) {$ctx1.fill(self,"testNewFromPairs",{flattenedAssociations:flattenedAssociations},$globals.AssociativeCollectionTest)});
  64841. //>>excludeEnd("ctx");
  64842. },
  64843. //>>excludeStart("ide", pragmas.excludeIdeData);
  64844. args: [],
  64845. 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 }.",
  64846. referencedClasses: [],
  64847. //>>excludeEnd("ide");
  64848. messageSends: ["assertSameContents:as:", "newFromPairs:", "collectionClass", "class"]
  64849. }),
  64850. $globals.AssociativeCollectionTest);
  64851. $core.addMethod(
  64852. $core.method({
  64853. selector: "testPrintString",
  64854. protocol: 'tests',
  64855. fn: function (){
  64856. var self=this;
  64857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64858. return $core.withContext(function($ctx1) {
  64859. //>>excludeEnd("ctx");
  64860. var $3,$2,$4,$1,$5;
  64861. $3=self._collectionClass();
  64862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64863. $ctx1.sendIdx["collectionClass"]=1;
  64864. //>>excludeEnd("ctx");
  64865. $2=$recv($3)._new();
  64866. $recv($2)._at_put_("firstname","James");
  64867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64868. $ctx1.sendIdx["at:put:"]=1;
  64869. //>>excludeEnd("ctx");
  64870. $recv($2)._at_put_("lastname","Bond");
  64871. $4=$recv($2)._printString();
  64872. $1=$4;
  64873. $5=$recv("a ".__comma($recv(self._collectionClass())._name())).__comma(" ('firstname' -> 'James' , 'lastname' -> 'Bond')");
  64874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64875. $ctx1.sendIdx[","]=1;
  64876. //>>excludeEnd("ctx");
  64877. self._assert_equals_($1,$5);
  64878. return self;
  64879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64880. }, function($ctx1) {$ctx1.fill(self,"testPrintString",{},$globals.AssociativeCollectionTest)});
  64881. //>>excludeEnd("ctx");
  64882. },
  64883. //>>excludeStart("ide", pragmas.excludeIdeData);
  64884. args: [],
  64885. 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'')'",
  64886. referencedClasses: [],
  64887. //>>excludeEnd("ide");
  64888. messageSends: ["assert:equals:", "at:put:", "new", "collectionClass", "printString", ",", "name"]
  64889. }),
  64890. $globals.AssociativeCollectionTest);
  64891. $core.addMethod(
  64892. $core.method({
  64893. selector: "testRemoveKey",
  64894. protocol: 'tests',
  64895. fn: function (){
  64896. var self=this;
  64897. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  64898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64899. return $core.withContext(function($ctx1) {
  64900. //>>excludeEnd("ctx");
  64901. var $1,$2,$3,$5,$6,$4,$7,$8;
  64902. self._nonIndexesDo_((function(each){
  64903. var collection;
  64904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64905. return $core.withContext(function($ctx2) {
  64906. //>>excludeEnd("ctx");
  64907. collection=self._collection();
  64908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64909. $ctx2.sendIdx["collection"]=1;
  64910. //>>excludeEnd("ctx");
  64911. collection;
  64912. self._should_raise_((function(){
  64913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64914. return $core.withContext(function($ctx3) {
  64915. //>>excludeEnd("ctx");
  64916. return $recv(collection)._removeKey_(each);
  64917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64918. $ctx3.sendIdx["removeKey:"]=1;
  64919. //>>excludeEnd("ctx");
  64920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64921. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  64922. //>>excludeEnd("ctx");
  64923. }),$Error());
  64924. $1=collection;
  64925. $2=self._collection();
  64926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64927. $ctx2.sendIdx["collection"]=2;
  64928. //>>excludeEnd("ctx");
  64929. return self._assert_equals_($1,$2);
  64930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64931. $ctx2.sendIdx["assert:equals:"]=1;
  64932. //>>excludeEnd("ctx");
  64933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64934. }, function($ctx2) {$ctx2.fillBlock({each:each,collection:collection},$ctx1,1)});
  64935. //>>excludeEnd("ctx");
  64936. }));
  64937. self._samplesDo_((function(index,value){
  64938. var collection;
  64939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64940. return $core.withContext(function($ctx2) {
  64941. //>>excludeEnd("ctx");
  64942. collection=self._collection();
  64943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64944. $ctx2.sendIdx["collection"]=3;
  64945. //>>excludeEnd("ctx");
  64946. collection;
  64947. $3=$recv(collection)._removeKey_(index);
  64948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64949. $ctx2.sendIdx["removeKey:"]=2;
  64950. //>>excludeEnd("ctx");
  64951. self._assert_equals_($3,value);
  64952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64953. $ctx2.sendIdx["assert:equals:"]=2;
  64954. //>>excludeEnd("ctx");
  64955. $5=collection;
  64956. $6=self._collection();
  64957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64958. $ctx2.sendIdx["collection"]=4;
  64959. //>>excludeEnd("ctx");
  64960. $4=$recv($5).__eq($6);
  64961. return self._deny_($4);
  64962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64963. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value,collection:collection},$ctx1,3)});
  64964. //>>excludeEnd("ctx");
  64965. }));
  64966. $7=self._collectionWithNewValue();
  64967. $recv($7)._removeKey_(self._sampleNewIndex());
  64968. $8=$recv($7)._yourself();
  64969. self._assert_equals_($8,self._collection());
  64970. return self;
  64971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64972. }, function($ctx1) {$ctx1.fill(self,"testRemoveKey",{},$globals.AssociativeCollectionTest)});
  64973. //>>excludeEnd("ctx");
  64974. },
  64975. //>>excludeStart("ide", pragmas.excludeIdeData);
  64976. args: [],
  64977. 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",
  64978. referencedClasses: ["Error"],
  64979. //>>excludeEnd("ide");
  64980. messageSends: ["nonIndexesDo:", "collection", "should:raise:", "removeKey:", "assert:equals:", "samplesDo:", "deny:", "=", "collectionWithNewValue", "sampleNewIndex", "yourself"]
  64981. }),
  64982. $globals.AssociativeCollectionTest);
  64983. $core.addMethod(
  64984. $core.method({
  64985. selector: "testRemoveKeyIfAbsent",
  64986. protocol: 'tests',
  64987. fn: function (){
  64988. var self=this;
  64989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64990. return $core.withContext(function($ctx1) {
  64991. //>>excludeEnd("ctx");
  64992. var $1,$2,$3,$4,$5,$7,$8,$6,$9,$10;
  64993. self._nonIndexesDo_((function(each){
  64994. var collection;
  64995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64996. return $core.withContext(function($ctx2) {
  64997. //>>excludeEnd("ctx");
  64998. collection=self._collection();
  64999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65000. $ctx2.sendIdx["collection"]=1;
  65001. //>>excludeEnd("ctx");
  65002. collection;
  65003. $1=$recv(collection)._removeKey_ifAbsent_(each,(function(){
  65004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65005. return $core.withContext(function($ctx3) {
  65006. //>>excludeEnd("ctx");
  65007. return self._sampleNewValue();
  65008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65009. $ctx3.sendIdx["sampleNewValue"]=1;
  65010. //>>excludeEnd("ctx");
  65011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65012. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  65013. //>>excludeEnd("ctx");
  65014. }));
  65015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65016. $ctx2.sendIdx["removeKey:ifAbsent:"]=1;
  65017. //>>excludeEnd("ctx");
  65018. $2=self._sampleNewValue();
  65019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65020. $ctx2.sendIdx["sampleNewValue"]=2;
  65021. //>>excludeEnd("ctx");
  65022. self._assert_equals_($1,$2);
  65023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65024. $ctx2.sendIdx["assert:equals:"]=1;
  65025. //>>excludeEnd("ctx");
  65026. $3=collection;
  65027. $4=self._collection();
  65028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65029. $ctx2.sendIdx["collection"]=2;
  65030. //>>excludeEnd("ctx");
  65031. return self._assert_equals_($3,$4);
  65032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65033. $ctx2.sendIdx["assert:equals:"]=2;
  65034. //>>excludeEnd("ctx");
  65035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65036. }, function($ctx2) {$ctx2.fillBlock({each:each,collection:collection},$ctx1,1)});
  65037. //>>excludeEnd("ctx");
  65038. }));
  65039. self._samplesDo_((function(index,value){
  65040. var collection;
  65041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65042. return $core.withContext(function($ctx2) {
  65043. //>>excludeEnd("ctx");
  65044. collection=self._collection();
  65045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65046. $ctx2.sendIdx["collection"]=3;
  65047. //>>excludeEnd("ctx");
  65048. collection;
  65049. $5=$recv(collection)._removeKey_ifAbsent_(index,(function(){
  65050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65051. return $core.withContext(function($ctx3) {
  65052. //>>excludeEnd("ctx");
  65053. return self._sampleNewValue();
  65054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65055. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,4)});
  65056. //>>excludeEnd("ctx");
  65057. }));
  65058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65059. $ctx2.sendIdx["removeKey:ifAbsent:"]=2;
  65060. //>>excludeEnd("ctx");
  65061. self._assert_equals_($5,value);
  65062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65063. $ctx2.sendIdx["assert:equals:"]=3;
  65064. //>>excludeEnd("ctx");
  65065. $7=collection;
  65066. $8=self._collection();
  65067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65068. $ctx2.sendIdx["collection"]=4;
  65069. //>>excludeEnd("ctx");
  65070. $6=$recv($7).__eq($8);
  65071. return self._deny_($6);
  65072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65073. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value,collection:collection},$ctx1,3)});
  65074. //>>excludeEnd("ctx");
  65075. }));
  65076. $9=self._collectionWithNewValue();
  65077. $recv($9)._removeKey_ifAbsent_(self._sampleNewIndex(),(function(){
  65078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65079. return $core.withContext(function($ctx2) {
  65080. //>>excludeEnd("ctx");
  65081. return self._assert_(false);
  65082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65083. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  65084. //>>excludeEnd("ctx");
  65085. }));
  65086. $10=$recv($9)._yourself();
  65087. self._assert_equals_($10,self._collection());
  65088. return self;
  65089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65090. }, function($ctx1) {$ctx1.fill(self,"testRemoveKeyIfAbsent",{},$globals.AssociativeCollectionTest)});
  65091. //>>excludeEnd("ctx");
  65092. },
  65093. //>>excludeStart("ide", pragmas.excludeIdeData);
  65094. args: [],
  65095. 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",
  65096. referencedClasses: [],
  65097. //>>excludeEnd("ide");
  65098. messageSends: ["nonIndexesDo:", "collection", "assert:equals:", "removeKey:ifAbsent:", "sampleNewValue", "samplesDo:", "deny:", "=", "collectionWithNewValue", "sampleNewIndex", "assert:", "yourself"]
  65099. }),
  65100. $globals.AssociativeCollectionTest);
  65101. $core.addMethod(
  65102. $core.method({
  65103. selector: "testValues",
  65104. protocol: 'tests',
  65105. fn: function (){
  65106. var self=this;
  65107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65108. return $core.withContext(function($ctx1) {
  65109. //>>excludeEnd("ctx");
  65110. var $2,$1,$3,$4;
  65111. $2=$recv($recv(self._collectionClass())._new())._values();
  65112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65113. $ctx1.sendIdx["values"]=1;
  65114. //>>excludeEnd("ctx");
  65115. $1=$recv($2)._isEmpty();
  65116. self._assert_($1);
  65117. $3=$recv(self._collection())._values();
  65118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65119. $ctx1.sendIdx["values"]=2;
  65120. //>>excludeEnd("ctx");
  65121. $4=self._collectionValues();
  65122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65123. $ctx1.sendIdx["collectionValues"]=1;
  65124. //>>excludeEnd("ctx");
  65125. self._assertSameContents_as_($3,$4);
  65126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65127. $ctx1.sendIdx["assertSameContents:as:"]=1;
  65128. //>>excludeEnd("ctx");
  65129. self._assertSameContents_as_($recv(self._collectionWithNewValue())._values(),$recv(self._collectionValues()).__comma([self._sampleNewValue()]));
  65130. return self;
  65131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65132. }, function($ctx1) {$ctx1.fill(self,"testValues",{},$globals.AssociativeCollectionTest)});
  65133. //>>excludeEnd("ctx");
  65134. },
  65135. //>>excludeStart("ide", pragmas.excludeIdeData);
  65136. args: [],
  65137. 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 }",
  65138. referencedClasses: [],
  65139. //>>excludeEnd("ide");
  65140. messageSends: ["assert:", "isEmpty", "values", "new", "collectionClass", "assertSameContents:as:", "collection", "collectionValues", "collectionWithNewValue", ",", "sampleNewValue"]
  65141. }),
  65142. $globals.AssociativeCollectionTest);
  65143. $core.addClass('DictionaryTest', $globals.AssociativeCollectionTest, [], 'Kernel-Tests');
  65144. $core.addMethod(
  65145. $core.method({
  65146. selector: "collection",
  65147. protocol: 'fixture',
  65148. fn: function (){
  65149. var self=this;
  65150. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  65151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65152. return $core.withContext(function($ctx1) {
  65153. //>>excludeEnd("ctx");
  65154. var $2,$3,$1;
  65155. $2=$recv($Dictionary())._new();
  65156. $recv($2)._at_put_((1),(1));
  65157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65158. $ctx1.sendIdx["at:put:"]=1;
  65159. //>>excludeEnd("ctx");
  65160. $recv($2)._at_put_("a",(2));
  65161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65162. $ctx1.sendIdx["at:put:"]=2;
  65163. //>>excludeEnd("ctx");
  65164. $recv($2)._at_put_(true,(3));
  65165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65166. $ctx1.sendIdx["at:put:"]=3;
  65167. //>>excludeEnd("ctx");
  65168. $recv($2)._at_put_((1).__at((3)),(-4));
  65169. $3=$recv($2)._yourself();
  65170. $1=$3;
  65171. return $1;
  65172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65173. }, function($ctx1) {$ctx1.fill(self,"collection",{},$globals.DictionaryTest)});
  65174. //>>excludeEnd("ctx");
  65175. },
  65176. //>>excludeStart("ide", pragmas.excludeIdeData);
  65177. args: [],
  65178. 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",
  65179. referencedClasses: ["Dictionary"],
  65180. //>>excludeEnd("ide");
  65181. messageSends: ["at:put:", "new", "@", "yourself"]
  65182. }),
  65183. $globals.DictionaryTest);
  65184. $core.addMethod(
  65185. $core.method({
  65186. selector: "collectionKeys",
  65187. protocol: 'fixture',
  65188. fn: function (){
  65189. var self=this;
  65190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65191. return $core.withContext(function($ctx1) {
  65192. //>>excludeEnd("ctx");
  65193. var $1;
  65194. $1=[(1),"a",true,(1).__at((3))];
  65195. return $1;
  65196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65197. }, function($ctx1) {$ctx1.fill(self,"collectionKeys",{},$globals.DictionaryTest)});
  65198. //>>excludeEnd("ctx");
  65199. },
  65200. //>>excludeStart("ide", pragmas.excludeIdeData);
  65201. args: [],
  65202. source: "collectionKeys\x0a\x09^ {1. 'a'. true. 1@3}",
  65203. referencedClasses: [],
  65204. //>>excludeEnd("ide");
  65205. messageSends: ["@"]
  65206. }),
  65207. $globals.DictionaryTest);
  65208. $core.addMethod(
  65209. $core.method({
  65210. selector: "collectionOfPrintStrings",
  65211. protocol: 'fixture',
  65212. fn: function (){
  65213. var self=this;
  65214. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  65215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65216. return $core.withContext(function($ctx1) {
  65217. //>>excludeEnd("ctx");
  65218. var $2,$3,$1;
  65219. $2=$recv($Dictionary())._new();
  65220. $recv($2)._at_put_((1),"1");
  65221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65222. $ctx1.sendIdx["at:put:"]=1;
  65223. //>>excludeEnd("ctx");
  65224. $recv($2)._at_put_("a","2");
  65225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65226. $ctx1.sendIdx["at:put:"]=2;
  65227. //>>excludeEnd("ctx");
  65228. $recv($2)._at_put_(true,"3");
  65229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65230. $ctx1.sendIdx["at:put:"]=3;
  65231. //>>excludeEnd("ctx");
  65232. $recv($2)._at_put_((1).__at((3)),"-4");
  65233. $3=$recv($2)._yourself();
  65234. $1=$3;
  65235. return $1;
  65236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65237. }, function($ctx1) {$ctx1.fill(self,"collectionOfPrintStrings",{},$globals.DictionaryTest)});
  65238. //>>excludeEnd("ctx");
  65239. },
  65240. //>>excludeStart("ide", pragmas.excludeIdeData);
  65241. args: [],
  65242. 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",
  65243. referencedClasses: ["Dictionary"],
  65244. //>>excludeEnd("ide");
  65245. messageSends: ["at:put:", "new", "@", "yourself"]
  65246. }),
  65247. $globals.DictionaryTest);
  65248. $core.addMethod(
  65249. $core.method({
  65250. selector: "collectionSize",
  65251. protocol: 'fixture',
  65252. fn: function (){
  65253. var self=this;
  65254. return (4);
  65255. },
  65256. //>>excludeStart("ide", pragmas.excludeIdeData);
  65257. args: [],
  65258. source: "collectionSize\x0a\x09^ 4",
  65259. referencedClasses: [],
  65260. //>>excludeEnd("ide");
  65261. messageSends: []
  65262. }),
  65263. $globals.DictionaryTest);
  65264. $core.addMethod(
  65265. $core.method({
  65266. selector: "collectionValues",
  65267. protocol: 'fixture',
  65268. fn: function (){
  65269. var self=this;
  65270. var $1;
  65271. $1=[(1),(2),(3),(-4)];
  65272. return $1;
  65273. },
  65274. //>>excludeStart("ide", pragmas.excludeIdeData);
  65275. args: [],
  65276. source: "collectionValues\x0a\x09^ {1. 2. 3. -4}",
  65277. referencedClasses: [],
  65278. //>>excludeEnd("ide");
  65279. messageSends: []
  65280. }),
  65281. $globals.DictionaryTest);
  65282. $core.addMethod(
  65283. $core.method({
  65284. selector: "collectionWithDuplicates",
  65285. protocol: 'fixture',
  65286. fn: function (){
  65287. var self=this;
  65288. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  65289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65290. return $core.withContext(function($ctx1) {
  65291. //>>excludeEnd("ctx");
  65292. var $2,$3,$1;
  65293. $2=$recv($Dictionary())._new();
  65294. $recv($2)._at_put_((1),(1));
  65295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65296. $ctx1.sendIdx["at:put:"]=1;
  65297. //>>excludeEnd("ctx");
  65298. $recv($2)._at_put_("a",(2));
  65299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65300. $ctx1.sendIdx["at:put:"]=2;
  65301. //>>excludeEnd("ctx");
  65302. $recv($2)._at_put_(true,(3));
  65303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65304. $ctx1.sendIdx["at:put:"]=3;
  65305. //>>excludeEnd("ctx");
  65306. $recv($2)._at_put_((4),(-4));
  65307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65308. $ctx1.sendIdx["at:put:"]=4;
  65309. //>>excludeEnd("ctx");
  65310. $recv($2)._at_put_("b",(1));
  65311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65312. $ctx1.sendIdx["at:put:"]=5;
  65313. //>>excludeEnd("ctx");
  65314. $recv($2)._at_put_((3),(3));
  65315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65316. $ctx1.sendIdx["at:put:"]=6;
  65317. //>>excludeEnd("ctx");
  65318. $recv($2)._at_put_(false,(12));
  65319. $3=$recv($2)._yourself();
  65320. $1=$3;
  65321. return $1;
  65322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65323. }, function($ctx1) {$ctx1.fill(self,"collectionWithDuplicates",{},$globals.DictionaryTest)});
  65324. //>>excludeEnd("ctx");
  65325. },
  65326. //>>excludeStart("ide", pragmas.excludeIdeData);
  65327. args: [],
  65328. 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",
  65329. referencedClasses: ["Dictionary"],
  65330. //>>excludeEnd("ide");
  65331. messageSends: ["at:put:", "new", "yourself"]
  65332. }),
  65333. $globals.DictionaryTest);
  65334. $core.addMethod(
  65335. $core.method({
  65336. selector: "collectionWithNewValue",
  65337. protocol: 'fixture',
  65338. fn: function (){
  65339. var self=this;
  65340. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  65341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65342. return $core.withContext(function($ctx1) {
  65343. //>>excludeEnd("ctx");
  65344. var $2,$3,$1;
  65345. $2=$recv($Dictionary())._new();
  65346. $recv($2)._at_put_((1),(1));
  65347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65348. $ctx1.sendIdx["at:put:"]=1;
  65349. //>>excludeEnd("ctx");
  65350. $recv($2)._at_put_("a",(2));
  65351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65352. $ctx1.sendIdx["at:put:"]=2;
  65353. //>>excludeEnd("ctx");
  65354. $recv($2)._at_put_(true,(3));
  65355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65356. $ctx1.sendIdx["at:put:"]=3;
  65357. //>>excludeEnd("ctx");
  65358. $recv($2)._at_put_((1).__at((3)),(-4));
  65359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65360. $ctx1.sendIdx["at:put:"]=4;
  65361. //>>excludeEnd("ctx");
  65362. $recv($2)._at_put_("new","N");
  65363. $3=$recv($2)._yourself();
  65364. $1=$3;
  65365. return $1;
  65366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65367. }, function($ctx1) {$ctx1.fill(self,"collectionWithNewValue",{},$globals.DictionaryTest)});
  65368. //>>excludeEnd("ctx");
  65369. },
  65370. //>>excludeStart("ide", pragmas.excludeIdeData);
  65371. args: [],
  65372. 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",
  65373. referencedClasses: ["Dictionary"],
  65374. //>>excludeEnd("ide");
  65375. messageSends: ["at:put:", "new", "@", "yourself"]
  65376. }),
  65377. $globals.DictionaryTest);
  65378. $core.addMethod(
  65379. $core.method({
  65380. selector: "sampleNewValueAsCollection",
  65381. protocol: 'fixture',
  65382. fn: function (){
  65383. var self=this;
  65384. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  65385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65386. return $core.withContext(function($ctx1) {
  65387. //>>excludeEnd("ctx");
  65388. var $2,$3,$1;
  65389. $2=$recv($Dictionary())._new();
  65390. $recv($2)._at_put_("new","N");
  65391. $3=$recv($2)._yourself();
  65392. $1=$3;
  65393. return $1;
  65394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65395. }, function($ctx1) {$ctx1.fill(self,"sampleNewValueAsCollection",{},$globals.DictionaryTest)});
  65396. //>>excludeEnd("ctx");
  65397. },
  65398. //>>excludeStart("ide", pragmas.excludeIdeData);
  65399. args: [],
  65400. source: "sampleNewValueAsCollection\x0a\x09^ Dictionary new\x0a\x09\x09at: 'new' put: 'N';\x0a\x09\x09yourself",
  65401. referencedClasses: ["Dictionary"],
  65402. //>>excludeEnd("ide");
  65403. messageSends: ["at:put:", "new", "yourself"]
  65404. }),
  65405. $globals.DictionaryTest);
  65406. $core.addMethod(
  65407. $core.method({
  65408. selector: "samplesDo:",
  65409. protocol: 'fixture',
  65410. fn: function (aBlock){
  65411. var self=this;
  65412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65413. return $core.withContext(function($ctx1) {
  65414. //>>excludeEnd("ctx");
  65415. (
  65416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65417. $ctx1.supercall = true,
  65418. //>>excludeEnd("ctx");
  65419. $globals.DictionaryTest.superclass.fn.prototype._samplesDo_.apply($recv(self), [aBlock]));
  65420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65421. $ctx1.supercall = false;
  65422. //>>excludeEnd("ctx");;
  65423. $recv(aBlock)._value_value_(true,(3));
  65424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65425. $ctx1.sendIdx["value:value:"]=1;
  65426. //>>excludeEnd("ctx");
  65427. $recv(aBlock)._value_value_((1).__at((3)),(-4));
  65428. return self;
  65429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65430. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.DictionaryTest)});
  65431. //>>excludeEnd("ctx");
  65432. },
  65433. //>>excludeStart("ide", pragmas.excludeIdeData);
  65434. args: ["aBlock"],
  65435. source: "samplesDo: aBlock\x0a\x09super samplesDo: aBlock.\x0a\x09aBlock value: true value: 3.\x0a\x09aBlock value: 1@3 value: -4",
  65436. referencedClasses: [],
  65437. //>>excludeEnd("ide");
  65438. messageSends: ["samplesDo:", "value:value:", "@"]
  65439. }),
  65440. $globals.DictionaryTest);
  65441. $core.addMethod(
  65442. $core.method({
  65443. selector: "testAccessing",
  65444. protocol: 'tests',
  65445. fn: function (){
  65446. var self=this;
  65447. var d;
  65448. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  65449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65450. return $core.withContext(function($ctx1) {
  65451. //>>excludeEnd("ctx");
  65452. var $1,$2,$3,$4,$5,$6,$7,$9,$10,$8,$12,$13,$11;
  65453. d=$recv($Dictionary())._new();
  65454. $recv(d)._at_put_("hello","world");
  65455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65456. $ctx1.sendIdx["at:put:"]=1;
  65457. //>>excludeEnd("ctx");
  65458. $1=$recv(d)._at_("hello");
  65459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65460. $ctx1.sendIdx["at:"]=1;
  65461. //>>excludeEnd("ctx");
  65462. self._assert_equals_($1,"world");
  65463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65464. $ctx1.sendIdx["assert:equals:"]=1;
  65465. //>>excludeEnd("ctx");
  65466. $2=$recv(d)._at_ifAbsent_("hello",(function(){
  65467. return nil;
  65468. }));
  65469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65470. $ctx1.sendIdx["at:ifAbsent:"]=1;
  65471. //>>excludeEnd("ctx");
  65472. self._assert_equals_($2,"world");
  65473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65474. $ctx1.sendIdx["assert:equals:"]=2;
  65475. //>>excludeEnd("ctx");
  65476. self._deny_($recv($recv(d)._at_ifAbsent_("foo",(function(){
  65477. return nil;
  65478. }))).__eq("world"));
  65479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65480. $ctx1.sendIdx["deny:"]=1;
  65481. //>>excludeEnd("ctx");
  65482. $3=$recv(d)._includesKey_("hello");
  65483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65484. $ctx1.sendIdx["includesKey:"]=1;
  65485. //>>excludeEnd("ctx");
  65486. self._assert_($3);
  65487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65488. $ctx1.sendIdx["assert:"]=1;
  65489. //>>excludeEnd("ctx");
  65490. $4=$recv(d)._includesKey_("foo");
  65491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65492. $ctx1.sendIdx["includesKey:"]=2;
  65493. //>>excludeEnd("ctx");
  65494. self._deny_($4);
  65495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65496. $ctx1.sendIdx["deny:"]=2;
  65497. //>>excludeEnd("ctx");
  65498. $recv(d)._at_put_((1),(2));
  65499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65500. $ctx1.sendIdx["at:put:"]=2;
  65501. //>>excludeEnd("ctx");
  65502. $5=$recv(d)._at_((1));
  65503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65504. $ctx1.sendIdx["at:"]=2;
  65505. //>>excludeEnd("ctx");
  65506. self._assert_equals_($5,(2));
  65507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65508. $ctx1.sendIdx["assert:equals:"]=3;
  65509. //>>excludeEnd("ctx");
  65510. $6=d;
  65511. $7=(1).__at((3));
  65512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65513. $ctx1.sendIdx["@"]=1;
  65514. //>>excludeEnd("ctx");
  65515. $recv($6)._at_put_($7,(3));
  65516. $9=d;
  65517. $10=(1).__at((3));
  65518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65519. $ctx1.sendIdx["@"]=2;
  65520. //>>excludeEnd("ctx");
  65521. $8=$recv($9)._at_($10);
  65522. self._assert_equals_($8,(3));
  65523. $12=d;
  65524. $13=(1).__at((3));
  65525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65526. $ctx1.sendIdx["@"]=3;
  65527. //>>excludeEnd("ctx");
  65528. $11=$recv($12)._includesKey_($13);
  65529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65530. $ctx1.sendIdx["includesKey:"]=3;
  65531. //>>excludeEnd("ctx");
  65532. self._assert_($11);
  65533. self._deny_($recv(d)._includesKey_((3).__at((1))));
  65534. return self;
  65535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65536. }, function($ctx1) {$ctx1.fill(self,"testAccessing",{d:d},$globals.DictionaryTest)});
  65537. //>>excludeEnd("ctx");
  65538. },
  65539. //>>excludeStart("ide", pragmas.excludeIdeData);
  65540. args: [],
  65541. 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)",
  65542. referencedClasses: ["Dictionary"],
  65543. //>>excludeEnd("ide");
  65544. messageSends: ["new", "at:put:", "assert:equals:", "at:", "at:ifAbsent:", "deny:", "=", "assert:", "includesKey:", "@"]
  65545. }),
  65546. $globals.DictionaryTest);
  65547. $core.addMethod(
  65548. $core.method({
  65549. selector: "testDynamicDictionaries",
  65550. protocol: 'tests',
  65551. fn: function (){
  65552. var self=this;
  65553. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  65554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65555. return $core.withContext(function($ctx1) {
  65556. //>>excludeEnd("ctx");
  65557. self._assert_equals_($recv($globals.HashedCollection._newFromPairs_(["hello",(1)]))._asDictionary(),$recv($Dictionary())._with_("hello".__minus_gt((1))));
  65558. return self;
  65559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65560. }, function($ctx1) {$ctx1.fill(self,"testDynamicDictionaries",{},$globals.DictionaryTest)});
  65561. //>>excludeEnd("ctx");
  65562. },
  65563. //>>excludeStart("ide", pragmas.excludeIdeData);
  65564. args: [],
  65565. source: "testDynamicDictionaries\x0a\x09self assert: #{'hello' -> 1} asDictionary equals: (Dictionary with: 'hello' -> 1)",
  65566. referencedClasses: ["Dictionary"],
  65567. //>>excludeEnd("ide");
  65568. messageSends: ["assert:equals:", "asDictionary", "with:", "->"]
  65569. }),
  65570. $globals.DictionaryTest);
  65571. $core.addMethod(
  65572. $core.method({
  65573. selector: "collectionClass",
  65574. protocol: 'fixture',
  65575. fn: function (){
  65576. var self=this;
  65577. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  65578. return $Dictionary();
  65579. },
  65580. //>>excludeStart("ide", pragmas.excludeIdeData);
  65581. args: [],
  65582. source: "collectionClass\x0a\x09^ Dictionary",
  65583. referencedClasses: ["Dictionary"],
  65584. //>>excludeEnd("ide");
  65585. messageSends: []
  65586. }),
  65587. $globals.DictionaryTest.klass);
  65588. $core.addClass('HashedCollectionTest', $globals.AssociativeCollectionTest, [], 'Kernel-Tests');
  65589. $core.addMethod(
  65590. $core.method({
  65591. selector: "collection",
  65592. protocol: 'fixture',
  65593. fn: function (){
  65594. var self=this;
  65595. var $1;
  65596. $1=$globals.HashedCollection._newFromPairs_(["b",(1),"a",(2),"c",(3),"d",(-4)]);
  65597. return $1;
  65598. },
  65599. //>>excludeStart("ide", pragmas.excludeIdeData);
  65600. args: [],
  65601. source: "collection\x0a\x09^ #{ 'b' -> 1. 'a' -> 2. 'c' -> 3. 'd' -> -4 }",
  65602. referencedClasses: [],
  65603. //>>excludeEnd("ide");
  65604. messageSends: []
  65605. }),
  65606. $globals.HashedCollectionTest);
  65607. $core.addMethod(
  65608. $core.method({
  65609. selector: "collectionKeys",
  65610. protocol: 'fixture',
  65611. fn: function (){
  65612. var self=this;
  65613. var $1;
  65614. $1=["b","a","c","d"];
  65615. return $1;
  65616. },
  65617. //>>excludeStart("ide", pragmas.excludeIdeData);
  65618. args: [],
  65619. source: "collectionKeys\x0a\x09^ { 'b'. 'a'. 'c'. 'd' }",
  65620. referencedClasses: [],
  65621. //>>excludeEnd("ide");
  65622. messageSends: []
  65623. }),
  65624. $globals.HashedCollectionTest);
  65625. $core.addMethod(
  65626. $core.method({
  65627. selector: "collectionOfPrintStrings",
  65628. protocol: 'fixture',
  65629. fn: function (){
  65630. var self=this;
  65631. var $1;
  65632. $1=$globals.HashedCollection._newFromPairs_(["b","1","a","2","c","3","d","-4"]);
  65633. return $1;
  65634. },
  65635. //>>excludeStart("ide", pragmas.excludeIdeData);
  65636. args: [],
  65637. source: "collectionOfPrintStrings\x0a\x09^ #{ 'b' -> '1'. 'a' -> '2'. 'c' -> '3'. 'd' -> '-4' }",
  65638. referencedClasses: [],
  65639. //>>excludeEnd("ide");
  65640. messageSends: []
  65641. }),
  65642. $globals.HashedCollectionTest);
  65643. $core.addMethod(
  65644. $core.method({
  65645. selector: "collectionSize",
  65646. protocol: 'fixture',
  65647. fn: function (){
  65648. var self=this;
  65649. return (4);
  65650. },
  65651. //>>excludeStart("ide", pragmas.excludeIdeData);
  65652. args: [],
  65653. source: "collectionSize\x0a\x09^ 4",
  65654. referencedClasses: [],
  65655. //>>excludeEnd("ide");
  65656. messageSends: []
  65657. }),
  65658. $globals.HashedCollectionTest);
  65659. $core.addMethod(
  65660. $core.method({
  65661. selector: "collectionValues",
  65662. protocol: 'fixture',
  65663. fn: function (){
  65664. var self=this;
  65665. var $1;
  65666. $1=[(1),(2),(3),(-4)];
  65667. return $1;
  65668. },
  65669. //>>excludeStart("ide", pragmas.excludeIdeData);
  65670. args: [],
  65671. source: "collectionValues\x0a\x09^ { 1. 2. 3. -4 }",
  65672. referencedClasses: [],
  65673. //>>excludeEnd("ide");
  65674. messageSends: []
  65675. }),
  65676. $globals.HashedCollectionTest);
  65677. $core.addMethod(
  65678. $core.method({
  65679. selector: "collectionWithDuplicates",
  65680. protocol: 'fixture',
  65681. fn: function (){
  65682. var self=this;
  65683. var $1;
  65684. $1=$globals.HashedCollection._newFromPairs_(["b",(1),"a",(2),"c",(3),"d",(-4),"e",(1),"f",(2),"g",(10)]);
  65685. return $1;
  65686. },
  65687. //>>excludeStart("ide", pragmas.excludeIdeData);
  65688. args: [],
  65689. source: "collectionWithDuplicates\x0a\x09^ #{ 'b' -> 1. 'a' -> 2. 'c' -> 3. 'd' -> -4. 'e' -> 1. 'f' -> 2. 'g' -> 10 }",
  65690. referencedClasses: [],
  65691. //>>excludeEnd("ide");
  65692. messageSends: []
  65693. }),
  65694. $globals.HashedCollectionTest);
  65695. $core.addMethod(
  65696. $core.method({
  65697. selector: "collectionWithNewValue",
  65698. protocol: 'fixture',
  65699. fn: function (){
  65700. var self=this;
  65701. var $1;
  65702. $1=$globals.HashedCollection._newFromPairs_(["b",(1),"a",(2),"c",(3),"d",(-4),"new","N"]);
  65703. return $1;
  65704. },
  65705. //>>excludeStart("ide", pragmas.excludeIdeData);
  65706. args: [],
  65707. source: "collectionWithNewValue\x0a\x09^ #{ 'b' -> 1. 'a' -> 2. 'c' -> 3. 'd' -> -4. 'new' -> 'N' }",
  65708. referencedClasses: [],
  65709. //>>excludeEnd("ide");
  65710. messageSends: []
  65711. }),
  65712. $globals.HashedCollectionTest);
  65713. $core.addMethod(
  65714. $core.method({
  65715. selector: "sampleNewValueAsCollection",
  65716. protocol: 'fixture',
  65717. fn: function (){
  65718. var self=this;
  65719. var $1;
  65720. $1=$globals.HashedCollection._newFromPairs_(["new","N"]);
  65721. return $1;
  65722. },
  65723. //>>excludeStart("ide", pragmas.excludeIdeData);
  65724. args: [],
  65725. source: "sampleNewValueAsCollection\x0a\x09^ #{ 'new' -> 'N' }",
  65726. referencedClasses: [],
  65727. //>>excludeEnd("ide");
  65728. messageSends: []
  65729. }),
  65730. $globals.HashedCollectionTest);
  65731. $core.addMethod(
  65732. $core.method({
  65733. selector: "testDynamicDictionaries",
  65734. protocol: 'tests',
  65735. fn: function (){
  65736. var self=this;
  65737. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  65738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65739. return $core.withContext(function($ctx1) {
  65740. //>>excludeEnd("ctx");
  65741. self._assert_equals_($recv($globals.HashedCollection._newFromPairs_(["hello",(1)]))._asHashedCollection(),$recv($HashedCollection())._with_("hello".__minus_gt((1))));
  65742. return self;
  65743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65744. }, function($ctx1) {$ctx1.fill(self,"testDynamicDictionaries",{},$globals.HashedCollectionTest)});
  65745. //>>excludeEnd("ctx");
  65746. },
  65747. //>>excludeStart("ide", pragmas.excludeIdeData);
  65748. args: [],
  65749. source: "testDynamicDictionaries\x0a\x09self assert: #{'hello' -> 1} asHashedCollection equals: (HashedCollection with: 'hello' -> 1)",
  65750. referencedClasses: ["HashedCollection"],
  65751. //>>excludeEnd("ide");
  65752. messageSends: ["assert:equals:", "asHashedCollection", "with:", "->"]
  65753. }),
  65754. $globals.HashedCollectionTest);
  65755. $core.addMethod(
  65756. $core.method({
  65757. selector: "collectionClass",
  65758. protocol: 'fixture',
  65759. fn: function (){
  65760. var self=this;
  65761. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  65762. return $HashedCollection();
  65763. },
  65764. //>>excludeStart("ide", pragmas.excludeIdeData);
  65765. args: [],
  65766. source: "collectionClass\x0a\x09^ HashedCollection",
  65767. referencedClasses: ["HashedCollection"],
  65768. //>>excludeEnd("ide");
  65769. messageSends: []
  65770. }),
  65771. $globals.HashedCollectionTest.klass);
  65772. $core.addClass('SequenceableCollectionTest', $globals.IndexableCollectionTest, [], 'Kernel-Tests');
  65773. $core.addMethod(
  65774. $core.method({
  65775. selector: "collectionFirst",
  65776. protocol: 'fixture',
  65777. fn: function (){
  65778. var self=this;
  65779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65780. return $core.withContext(function($ctx1) {
  65781. //>>excludeEnd("ctx");
  65782. self._subclassResponsibility();
  65783. return self;
  65784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65785. }, function($ctx1) {$ctx1.fill(self,"collectionFirst",{},$globals.SequenceableCollectionTest)});
  65786. //>>excludeEnd("ctx");
  65787. },
  65788. //>>excludeStart("ide", pragmas.excludeIdeData);
  65789. args: [],
  65790. source: "collectionFirst\x0a\x09self subclassResponsibility",
  65791. referencedClasses: [],
  65792. //>>excludeEnd("ide");
  65793. messageSends: ["subclassResponsibility"]
  65794. }),
  65795. $globals.SequenceableCollectionTest);
  65796. $core.addMethod(
  65797. $core.method({
  65798. selector: "collectionFirstTwo",
  65799. protocol: 'fixture',
  65800. fn: function (){
  65801. var self=this;
  65802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65803. return $core.withContext(function($ctx1) {
  65804. //>>excludeEnd("ctx");
  65805. self._subclassResponsibility();
  65806. return self;
  65807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65808. }, function($ctx1) {$ctx1.fill(self,"collectionFirstTwo",{},$globals.SequenceableCollectionTest)});
  65809. //>>excludeEnd("ctx");
  65810. },
  65811. //>>excludeStart("ide", pragmas.excludeIdeData);
  65812. args: [],
  65813. source: "collectionFirstTwo\x0a\x09self subclassResponsibility",
  65814. referencedClasses: [],
  65815. //>>excludeEnd("ide");
  65816. messageSends: ["subclassResponsibility"]
  65817. }),
  65818. $globals.SequenceableCollectionTest);
  65819. $core.addMethod(
  65820. $core.method({
  65821. selector: "collectionLast",
  65822. protocol: 'fixture',
  65823. fn: function (){
  65824. var self=this;
  65825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65826. return $core.withContext(function($ctx1) {
  65827. //>>excludeEnd("ctx");
  65828. self._subclassResponsibility();
  65829. return self;
  65830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65831. }, function($ctx1) {$ctx1.fill(self,"collectionLast",{},$globals.SequenceableCollectionTest)});
  65832. //>>excludeEnd("ctx");
  65833. },
  65834. //>>excludeStart("ide", pragmas.excludeIdeData);
  65835. args: [],
  65836. source: "collectionLast\x0a\x09self subclassResponsibility",
  65837. referencedClasses: [],
  65838. //>>excludeEnd("ide");
  65839. messageSends: ["subclassResponsibility"]
  65840. }),
  65841. $globals.SequenceableCollectionTest);
  65842. $core.addMethod(
  65843. $core.method({
  65844. selector: "collectionLastTwo",
  65845. protocol: 'fixture',
  65846. fn: function (){
  65847. var self=this;
  65848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65849. return $core.withContext(function($ctx1) {
  65850. //>>excludeEnd("ctx");
  65851. self._subclassResponsibility();
  65852. return self;
  65853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65854. }, function($ctx1) {$ctx1.fill(self,"collectionLastTwo",{},$globals.SequenceableCollectionTest)});
  65855. //>>excludeEnd("ctx");
  65856. },
  65857. //>>excludeStart("ide", pragmas.excludeIdeData);
  65858. args: [],
  65859. source: "collectionLastTwo\x0a\x09self subclassResponsibility",
  65860. referencedClasses: [],
  65861. //>>excludeEnd("ide");
  65862. messageSends: ["subclassResponsibility"]
  65863. }),
  65864. $globals.SequenceableCollectionTest);
  65865. $core.addMethod(
  65866. $core.method({
  65867. selector: "nonIndexesDo:",
  65868. protocol: 'fixture',
  65869. fn: function (aBlock){
  65870. var self=this;
  65871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65872. return $core.withContext(function($ctx1) {
  65873. //>>excludeEnd("ctx");
  65874. $recv(aBlock)._value_((0));
  65875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65876. $ctx1.sendIdx["value:"]=1;
  65877. //>>excludeEnd("ctx");
  65878. $recv(aBlock)._value_($recv(self._collectionSize()).__plus((1)));
  65879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65880. $ctx1.sendIdx["value:"]=2;
  65881. //>>excludeEnd("ctx");
  65882. $recv(aBlock)._value_("z");
  65883. return self;
  65884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65885. }, function($ctx1) {$ctx1.fill(self,"nonIndexesDo:",{aBlock:aBlock},$globals.SequenceableCollectionTest)});
  65886. //>>excludeEnd("ctx");
  65887. },
  65888. //>>excludeStart("ide", pragmas.excludeIdeData);
  65889. args: ["aBlock"],
  65890. source: "nonIndexesDo: aBlock\x0a\x09aBlock value: 0.\x0a\x09aBlock value: self collectionSize + 1.\x0a\x09aBlock value: 'z'",
  65891. referencedClasses: [],
  65892. //>>excludeEnd("ide");
  65893. messageSends: ["value:", "+", "collectionSize"]
  65894. }),
  65895. $globals.SequenceableCollectionTest);
  65896. $core.addMethod(
  65897. $core.method({
  65898. selector: "samplesDo:",
  65899. protocol: 'fixture',
  65900. fn: function (aBlock){
  65901. var self=this;
  65902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65903. return $core.withContext(function($ctx1) {
  65904. //>>excludeEnd("ctx");
  65905. $recv(aBlock)._value_value_((1),self._collectionFirst());
  65906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65907. $ctx1.sendIdx["value:value:"]=1;
  65908. //>>excludeEnd("ctx");
  65909. $recv(aBlock)._value_value_(self._collectionSize(),self._collectionLast());
  65910. return self;
  65911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65912. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.SequenceableCollectionTest)});
  65913. //>>excludeEnd("ctx");
  65914. },
  65915. //>>excludeStart("ide", pragmas.excludeIdeData);
  65916. args: ["aBlock"],
  65917. source: "samplesDo: aBlock\x0a\x09aBlock value: 1 value: self collectionFirst.\x0a\x09aBlock value: self collectionSize value: self collectionLast",
  65918. referencedClasses: [],
  65919. //>>excludeEnd("ide");
  65920. messageSends: ["value:value:", "collectionFirst", "collectionSize", "collectionLast"]
  65921. }),
  65922. $globals.SequenceableCollectionTest);
  65923. $core.addMethod(
  65924. $core.method({
  65925. selector: "testBeginsWith",
  65926. protocol: 'tests',
  65927. fn: function (){
  65928. var self=this;
  65929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65930. return $core.withContext(function($ctx1) {
  65931. //>>excludeEnd("ctx");
  65932. var $2,$1,$4,$5,$3,$7,$6;
  65933. $2=self._collection();
  65934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65935. $ctx1.sendIdx["collection"]=1;
  65936. //>>excludeEnd("ctx");
  65937. $1=$recv($2)._beginsWith_($recv(self._collectionClass())._new());
  65938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65939. $ctx1.sendIdx["beginsWith:"]=1;
  65940. //>>excludeEnd("ctx");
  65941. self._assert_($1);
  65942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65943. $ctx1.sendIdx["assert:"]=1;
  65944. //>>excludeEnd("ctx");
  65945. $4=self._collection();
  65946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65947. $ctx1.sendIdx["collection"]=2;
  65948. //>>excludeEnd("ctx");
  65949. $5=self._collection();
  65950. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65951. $ctx1.sendIdx["collection"]=3;
  65952. //>>excludeEnd("ctx");
  65953. $3=$recv($4)._beginsWith_($5);
  65954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65955. $ctx1.sendIdx["beginsWith:"]=2;
  65956. //>>excludeEnd("ctx");
  65957. self._assert_($3);
  65958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65959. $ctx1.sendIdx["assert:"]=2;
  65960. //>>excludeEnd("ctx");
  65961. $7=self._collection();
  65962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65963. $ctx1.sendIdx["collection"]=4;
  65964. //>>excludeEnd("ctx");
  65965. $6=$recv($7)._beginsWith_(self._collectionFirstTwo());
  65966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65967. $ctx1.sendIdx["beginsWith:"]=3;
  65968. //>>excludeEnd("ctx");
  65969. self._assert_($6);
  65970. self._deny_($recv(self._collection())._beginsWith_(self._collectionLastTwo()));
  65971. return self;
  65972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65973. }, function($ctx1) {$ctx1.fill(self,"testBeginsWith",{},$globals.SequenceableCollectionTest)});
  65974. //>>excludeEnd("ctx");
  65975. },
  65976. //>>excludeStart("ide", pragmas.excludeIdeData);
  65977. args: [],
  65978. 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)",
  65979. referencedClasses: [],
  65980. //>>excludeEnd("ide");
  65981. messageSends: ["assert:", "beginsWith:", "collection", "new", "collectionClass", "collectionFirstTwo", "deny:", "collectionLastTwo"]
  65982. }),
  65983. $globals.SequenceableCollectionTest);
  65984. $core.addMethod(
  65985. $core.method({
  65986. selector: "testEndsWith",
  65987. protocol: 'tests',
  65988. fn: function (){
  65989. var self=this;
  65990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65991. return $core.withContext(function($ctx1) {
  65992. //>>excludeEnd("ctx");
  65993. var $2,$1,$4,$5,$3,$7,$6;
  65994. $2=self._collection();
  65995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65996. $ctx1.sendIdx["collection"]=1;
  65997. //>>excludeEnd("ctx");
  65998. $1=$recv($2)._endsWith_($recv(self._collectionClass())._new());
  65999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66000. $ctx1.sendIdx["endsWith:"]=1;
  66001. //>>excludeEnd("ctx");
  66002. self._assert_($1);
  66003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66004. $ctx1.sendIdx["assert:"]=1;
  66005. //>>excludeEnd("ctx");
  66006. $4=self._collection();
  66007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66008. $ctx1.sendIdx["collection"]=2;
  66009. //>>excludeEnd("ctx");
  66010. $5=self._collection();
  66011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66012. $ctx1.sendIdx["collection"]=3;
  66013. //>>excludeEnd("ctx");
  66014. $3=$recv($4)._endsWith_($5);
  66015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66016. $ctx1.sendIdx["endsWith:"]=2;
  66017. //>>excludeEnd("ctx");
  66018. self._assert_($3);
  66019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66020. $ctx1.sendIdx["assert:"]=2;
  66021. //>>excludeEnd("ctx");
  66022. $7=self._collection();
  66023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66024. $ctx1.sendIdx["collection"]=4;
  66025. //>>excludeEnd("ctx");
  66026. $6=$recv($7)._endsWith_(self._collectionLastTwo());
  66027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66028. $ctx1.sendIdx["endsWith:"]=3;
  66029. //>>excludeEnd("ctx");
  66030. self._assert_($6);
  66031. self._deny_($recv(self._collection())._endsWith_(self._collectionFirstTwo()));
  66032. return self;
  66033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66034. }, function($ctx1) {$ctx1.fill(self,"testEndsWith",{},$globals.SequenceableCollectionTest)});
  66035. //>>excludeEnd("ctx");
  66036. },
  66037. //>>excludeStart("ide", pragmas.excludeIdeData);
  66038. args: [],
  66039. 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)",
  66040. referencedClasses: [],
  66041. //>>excludeEnd("ide");
  66042. messageSends: ["assert:", "endsWith:", "collection", "new", "collectionClass", "collectionLastTwo", "deny:", "collectionFirstTwo"]
  66043. }),
  66044. $globals.SequenceableCollectionTest);
  66045. $core.addMethod(
  66046. $core.method({
  66047. selector: "testFirst",
  66048. protocol: 'tests',
  66049. fn: function (){
  66050. var self=this;
  66051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66052. return $core.withContext(function($ctx1) {
  66053. //>>excludeEnd("ctx");
  66054. self._assert_equals_($recv(self._collection())._first(),self._collectionFirst());
  66055. return self;
  66056. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66057. }, function($ctx1) {$ctx1.fill(self,"testFirst",{},$globals.SequenceableCollectionTest)});
  66058. //>>excludeEnd("ctx");
  66059. },
  66060. //>>excludeStart("ide", pragmas.excludeIdeData);
  66061. args: [],
  66062. source: "testFirst\x0a\x09self assert: self collection first equals: self collectionFirst",
  66063. referencedClasses: [],
  66064. //>>excludeEnd("ide");
  66065. messageSends: ["assert:equals:", "first", "collection", "collectionFirst"]
  66066. }),
  66067. $globals.SequenceableCollectionTest);
  66068. $core.addMethod(
  66069. $core.method({
  66070. selector: "testFirstN",
  66071. protocol: 'tests',
  66072. fn: function (){
  66073. var self=this;
  66074. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  66075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66076. return $core.withContext(function($ctx1) {
  66077. //>>excludeEnd("ctx");
  66078. var $2,$1,$4,$3,$6,$5,$7;
  66079. $2=self._collection();
  66080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66081. $ctx1.sendIdx["collection"]=1;
  66082. //>>excludeEnd("ctx");
  66083. $1=$recv($2)._first_((2));
  66084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66085. $ctx1.sendIdx["first:"]=1;
  66086. //>>excludeEnd("ctx");
  66087. self._assert_equals_($1,self._collectionFirstTwo());
  66088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66089. $ctx1.sendIdx["assert:equals:"]=1;
  66090. //>>excludeEnd("ctx");
  66091. $4=self._collection();
  66092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66093. $ctx1.sendIdx["collection"]=2;
  66094. //>>excludeEnd("ctx");
  66095. $3=$recv($4)._first_((0));
  66096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66097. $ctx1.sendIdx["first:"]=2;
  66098. //>>excludeEnd("ctx");
  66099. self._assert_equals_($3,$recv(self._collectionClass())._new());
  66100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66101. $ctx1.sendIdx["assert:equals:"]=2;
  66102. //>>excludeEnd("ctx");
  66103. $6=self._collection();
  66104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66105. $ctx1.sendIdx["collection"]=3;
  66106. //>>excludeEnd("ctx");
  66107. $5=$recv($6)._first_(self._collectionSize());
  66108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66109. $ctx1.sendIdx["first:"]=3;
  66110. //>>excludeEnd("ctx");
  66111. $7=self._collection();
  66112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66113. $ctx1.sendIdx["collection"]=4;
  66114. //>>excludeEnd("ctx");
  66115. self._assert_equals_($5,$7);
  66116. self._should_raise_((function(){
  66117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66118. return $core.withContext(function($ctx2) {
  66119. //>>excludeEnd("ctx");
  66120. return $recv(self._collection())._first_((33));
  66121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66122. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  66123. //>>excludeEnd("ctx");
  66124. }),$Error());
  66125. return self;
  66126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66127. }, function($ctx1) {$ctx1.fill(self,"testFirstN",{},$globals.SequenceableCollectionTest)});
  66128. //>>excludeEnd("ctx");
  66129. },
  66130. //>>excludeStart("ide", pragmas.excludeIdeData);
  66131. args: [],
  66132. 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",
  66133. referencedClasses: ["Error"],
  66134. //>>excludeEnd("ide");
  66135. messageSends: ["assert:equals:", "first:", "collection", "collectionFirstTwo", "new", "collectionClass", "collectionSize", "should:raise:"]
  66136. }),
  66137. $globals.SequenceableCollectionTest);
  66138. $core.addMethod(
  66139. $core.method({
  66140. selector: "testFourth",
  66141. protocol: 'tests',
  66142. fn: function (){
  66143. var self=this;
  66144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66145. return $core.withContext(function($ctx1) {
  66146. //>>excludeEnd("ctx");
  66147. var $2,$1;
  66148. $2=self._collection();
  66149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66150. $ctx1.sendIdx["collection"]=1;
  66151. //>>excludeEnd("ctx");
  66152. $1=$recv($2)._fourth();
  66153. self._assert_equals_($1,$recv(self._collection())._at_((4)));
  66154. return self;
  66155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66156. }, function($ctx1) {$ctx1.fill(self,"testFourth",{},$globals.SequenceableCollectionTest)});
  66157. //>>excludeEnd("ctx");
  66158. },
  66159. //>>excludeStart("ide", pragmas.excludeIdeData);
  66160. args: [],
  66161. source: "testFourth\x0a\x09self assert: (self collection fourth) equals: (self collection at: 4)",
  66162. referencedClasses: [],
  66163. //>>excludeEnd("ide");
  66164. messageSends: ["assert:equals:", "fourth", "collection", "at:"]
  66165. }),
  66166. $globals.SequenceableCollectionTest);
  66167. $core.addMethod(
  66168. $core.method({
  66169. selector: "testIndexOfStartingAt",
  66170. protocol: 'tests',
  66171. fn: function (){
  66172. var self=this;
  66173. var jsNull;
  66174. function $JSON(){return $globals.JSON||(typeof JSON=="undefined"?nil:JSON)}
  66175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66176. return $core.withContext(function($ctx1) {
  66177. //>>excludeEnd("ctx");
  66178. var $2,$1,$4,$3;
  66179. jsNull=$recv($JSON())._parse_("null");
  66180. self._samplesDo_((function(index,value){
  66181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66182. return $core.withContext(function($ctx2) {
  66183. //>>excludeEnd("ctx");
  66184. $2=self._collection();
  66185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66186. $ctx2.sendIdx["collection"]=1;
  66187. //>>excludeEnd("ctx");
  66188. $1=$recv($2)._indexOf_startingAt_(value,(1));
  66189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66190. $ctx2.sendIdx["indexOf:startingAt:"]=1;
  66191. //>>excludeEnd("ctx");
  66192. self._assert_equals_($1,index);
  66193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66194. $ctx2.sendIdx["assert:equals:"]=1;
  66195. //>>excludeEnd("ctx");
  66196. $4=self._collection();
  66197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66198. $ctx2.sendIdx["collection"]=2;
  66199. //>>excludeEnd("ctx");
  66200. $3=$recv($4)._indexOf_startingAt_(value,index);
  66201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66202. $ctx2.sendIdx["indexOf:startingAt:"]=2;
  66203. //>>excludeEnd("ctx");
  66204. self._assert_equals_($3,index);
  66205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66206. $ctx2.sendIdx["assert:equals:"]=2;
  66207. //>>excludeEnd("ctx");
  66208. return self._assert_equals_($recv(self._collection())._indexOf_startingAt_(value,$recv(index).__plus((1))),(0));
  66209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66210. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,1)});
  66211. //>>excludeEnd("ctx");
  66212. }));
  66213. return self;
  66214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66215. }, function($ctx1) {$ctx1.fill(self,"testIndexOfStartingAt",{jsNull:jsNull},$globals.SequenceableCollectionTest)});
  66216. //>>excludeEnd("ctx");
  66217. },
  66218. //>>excludeStart("ide", pragmas.excludeIdeData);
  66219. args: [],
  66220. 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 ]",
  66221. referencedClasses: ["JSON"],
  66222. //>>excludeEnd("ide");
  66223. messageSends: ["parse:", "samplesDo:", "assert:equals:", "indexOf:startingAt:", "collection", "+"]
  66224. }),
  66225. $globals.SequenceableCollectionTest);
  66226. $core.addMethod(
  66227. $core.method({
  66228. selector: "testIndexOfStartingAtWithNull",
  66229. protocol: 'tests',
  66230. fn: function (){
  66231. var self=this;
  66232. var jsNull;
  66233. function $JSON(){return $globals.JSON||(typeof JSON=="undefined"?nil:JSON)}
  66234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66235. return $core.withContext(function($ctx1) {
  66236. //>>excludeEnd("ctx");
  66237. var $1,$2;
  66238. jsNull=$recv($JSON())._parse_("null");
  66239. self._samplesDo_((function(index,value){
  66240. var collection;
  66241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66242. return $core.withContext(function($ctx2) {
  66243. //>>excludeEnd("ctx");
  66244. collection=self._collection();
  66245. collection;
  66246. $recv(collection)._at_put_(index,jsNull);
  66247. $1=$recv(collection)._indexOf_startingAt_(jsNull,(1));
  66248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66249. $ctx2.sendIdx["indexOf:startingAt:"]=1;
  66250. //>>excludeEnd("ctx");
  66251. self._assert_equals_($1,index);
  66252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66253. $ctx2.sendIdx["assert:equals:"]=1;
  66254. //>>excludeEnd("ctx");
  66255. $2=$recv(collection)._indexOf_startingAt_(jsNull,index);
  66256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66257. $ctx2.sendIdx["indexOf:startingAt:"]=2;
  66258. //>>excludeEnd("ctx");
  66259. self._assert_equals_($2,index);
  66260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66261. $ctx2.sendIdx["assert:equals:"]=2;
  66262. //>>excludeEnd("ctx");
  66263. return self._assert_equals_($recv(collection)._indexOf_startingAt_(jsNull,$recv(index).__plus((1))),(0));
  66264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66265. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value,collection:collection},$ctx1,1)});
  66266. //>>excludeEnd("ctx");
  66267. }));
  66268. return self;
  66269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66270. }, function($ctx1) {$ctx1.fill(self,"testIndexOfStartingAtWithNull",{jsNull:jsNull},$globals.SequenceableCollectionTest)});
  66271. //>>excludeEnd("ctx");
  66272. },
  66273. //>>excludeStart("ide", pragmas.excludeIdeData);
  66274. args: [],
  66275. 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 ]",
  66276. referencedClasses: ["JSON"],
  66277. //>>excludeEnd("ide");
  66278. messageSends: ["parse:", "samplesDo:", "collection", "at:put:", "assert:equals:", "indexOf:startingAt:", "+"]
  66279. }),
  66280. $globals.SequenceableCollectionTest);
  66281. $core.addMethod(
  66282. $core.method({
  66283. selector: "testLast",
  66284. protocol: 'tests',
  66285. fn: function (){
  66286. var self=this;
  66287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66288. return $core.withContext(function($ctx1) {
  66289. //>>excludeEnd("ctx");
  66290. self._assert_equals_($recv(self._collection())._last(),self._collectionLast());
  66291. return self;
  66292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66293. }, function($ctx1) {$ctx1.fill(self,"testLast",{},$globals.SequenceableCollectionTest)});
  66294. //>>excludeEnd("ctx");
  66295. },
  66296. //>>excludeStart("ide", pragmas.excludeIdeData);
  66297. args: [],
  66298. source: "testLast\x0a\x09self assert: self collection last equals: self collectionLast",
  66299. referencedClasses: [],
  66300. //>>excludeEnd("ide");
  66301. messageSends: ["assert:equals:", "last", "collection", "collectionLast"]
  66302. }),
  66303. $globals.SequenceableCollectionTest);
  66304. $core.addMethod(
  66305. $core.method({
  66306. selector: "testLastN",
  66307. protocol: 'tests',
  66308. fn: function (){
  66309. var self=this;
  66310. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  66311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66312. return $core.withContext(function($ctx1) {
  66313. //>>excludeEnd("ctx");
  66314. var $2,$1,$4,$3,$6,$5,$7;
  66315. $2=self._collection();
  66316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66317. $ctx1.sendIdx["collection"]=1;
  66318. //>>excludeEnd("ctx");
  66319. $1=$recv($2)._last_((2));
  66320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66321. $ctx1.sendIdx["last:"]=1;
  66322. //>>excludeEnd("ctx");
  66323. self._assert_equals_($1,self._collectionLastTwo());
  66324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66325. $ctx1.sendIdx["assert:equals:"]=1;
  66326. //>>excludeEnd("ctx");
  66327. $4=self._collection();
  66328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66329. $ctx1.sendIdx["collection"]=2;
  66330. //>>excludeEnd("ctx");
  66331. $3=$recv($4)._last_((0));
  66332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66333. $ctx1.sendIdx["last:"]=2;
  66334. //>>excludeEnd("ctx");
  66335. self._assert_equals_($3,$recv(self._collectionClass())._new());
  66336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66337. $ctx1.sendIdx["assert:equals:"]=2;
  66338. //>>excludeEnd("ctx");
  66339. $6=self._collection();
  66340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66341. $ctx1.sendIdx["collection"]=3;
  66342. //>>excludeEnd("ctx");
  66343. $5=$recv($6)._last_(self._collectionSize());
  66344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66345. $ctx1.sendIdx["last:"]=3;
  66346. //>>excludeEnd("ctx");
  66347. $7=self._collection();
  66348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66349. $ctx1.sendIdx["collection"]=4;
  66350. //>>excludeEnd("ctx");
  66351. self._assert_equals_($5,$7);
  66352. self._should_raise_((function(){
  66353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66354. return $core.withContext(function($ctx2) {
  66355. //>>excludeEnd("ctx");
  66356. return $recv(self._collection())._last_((33));
  66357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66358. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  66359. //>>excludeEnd("ctx");
  66360. }),$Error());
  66361. return self;
  66362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66363. }, function($ctx1) {$ctx1.fill(self,"testLastN",{},$globals.SequenceableCollectionTest)});
  66364. //>>excludeEnd("ctx");
  66365. },
  66366. //>>excludeStart("ide", pragmas.excludeIdeData);
  66367. args: [],
  66368. 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",
  66369. referencedClasses: ["Error"],
  66370. //>>excludeEnd("ide");
  66371. messageSends: ["assert:equals:", "last:", "collection", "collectionLastTwo", "new", "collectionClass", "collectionSize", "should:raise:"]
  66372. }),
  66373. $globals.SequenceableCollectionTest);
  66374. $core.addMethod(
  66375. $core.method({
  66376. selector: "testSecond",
  66377. protocol: 'tests',
  66378. fn: function (){
  66379. var self=this;
  66380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66381. return $core.withContext(function($ctx1) {
  66382. //>>excludeEnd("ctx");
  66383. var $2,$1;
  66384. $2=self._collection();
  66385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66386. $ctx1.sendIdx["collection"]=1;
  66387. //>>excludeEnd("ctx");
  66388. $1=$recv($2)._second();
  66389. self._assert_equals_($1,$recv(self._collection())._at_((2)));
  66390. return self;
  66391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66392. }, function($ctx1) {$ctx1.fill(self,"testSecond",{},$globals.SequenceableCollectionTest)});
  66393. //>>excludeEnd("ctx");
  66394. },
  66395. //>>excludeStart("ide", pragmas.excludeIdeData);
  66396. args: [],
  66397. source: "testSecond\x0a\x09self assert: (self collection second) equals: (self collection at: 2)",
  66398. referencedClasses: [],
  66399. //>>excludeEnd("ide");
  66400. messageSends: ["assert:equals:", "second", "collection", "at:"]
  66401. }),
  66402. $globals.SequenceableCollectionTest);
  66403. $core.addMethod(
  66404. $core.method({
  66405. selector: "testThird",
  66406. protocol: 'tests',
  66407. fn: function (){
  66408. var self=this;
  66409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66410. return $core.withContext(function($ctx1) {
  66411. //>>excludeEnd("ctx");
  66412. var $2,$1;
  66413. $2=self._collection();
  66414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66415. $ctx1.sendIdx["collection"]=1;
  66416. //>>excludeEnd("ctx");
  66417. $1=$recv($2)._third();
  66418. self._assert_equals_($1,$recv(self._collection())._at_((3)));
  66419. return self;
  66420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66421. }, function($ctx1) {$ctx1.fill(self,"testThird",{},$globals.SequenceableCollectionTest)});
  66422. //>>excludeEnd("ctx");
  66423. },
  66424. //>>excludeStart("ide", pragmas.excludeIdeData);
  66425. args: [],
  66426. source: "testThird\x0a\x09self assert: (self collection third) equals: (self collection at: 3)",
  66427. referencedClasses: [],
  66428. //>>excludeEnd("ide");
  66429. messageSends: ["assert:equals:", "third", "collection", "at:"]
  66430. }),
  66431. $globals.SequenceableCollectionTest);
  66432. $core.addClass('ArrayTest', $globals.SequenceableCollectionTest, [], 'Kernel-Tests');
  66433. $core.addMethod(
  66434. $core.method({
  66435. selector: "collection",
  66436. protocol: 'fixture',
  66437. fn: function (){
  66438. var self=this;
  66439. var $1;
  66440. $1=[(1), (2), (3), (-4)];
  66441. return $1;
  66442. },
  66443. //>>excludeStart("ide", pragmas.excludeIdeData);
  66444. args: [],
  66445. source: "collection\x0a\x09^ #(1 2 3 -4)",
  66446. referencedClasses: [],
  66447. //>>excludeEnd("ide");
  66448. messageSends: []
  66449. }),
  66450. $globals.ArrayTest);
  66451. $core.addMethod(
  66452. $core.method({
  66453. selector: "collectionFirst",
  66454. protocol: 'fixture',
  66455. fn: function (){
  66456. var self=this;
  66457. return (1);
  66458. },
  66459. //>>excludeStart("ide", pragmas.excludeIdeData);
  66460. args: [],
  66461. source: "collectionFirst\x0a\x09^ 1",
  66462. referencedClasses: [],
  66463. //>>excludeEnd("ide");
  66464. messageSends: []
  66465. }),
  66466. $globals.ArrayTest);
  66467. $core.addMethod(
  66468. $core.method({
  66469. selector: "collectionFirstTwo",
  66470. protocol: 'fixture',
  66471. fn: function (){
  66472. var self=this;
  66473. var $1;
  66474. $1=[(1), (2)];
  66475. return $1;
  66476. },
  66477. //>>excludeStart("ide", pragmas.excludeIdeData);
  66478. args: [],
  66479. source: "collectionFirstTwo\x0a\x09^ #(1 2)",
  66480. referencedClasses: [],
  66481. //>>excludeEnd("ide");
  66482. messageSends: []
  66483. }),
  66484. $globals.ArrayTest);
  66485. $core.addMethod(
  66486. $core.method({
  66487. selector: "collectionLast",
  66488. protocol: 'fixture',
  66489. fn: function (){
  66490. var self=this;
  66491. return (-4);
  66492. },
  66493. //>>excludeStart("ide", pragmas.excludeIdeData);
  66494. args: [],
  66495. source: "collectionLast\x0a\x09^ -4",
  66496. referencedClasses: [],
  66497. //>>excludeEnd("ide");
  66498. messageSends: []
  66499. }),
  66500. $globals.ArrayTest);
  66501. $core.addMethod(
  66502. $core.method({
  66503. selector: "collectionLastTwo",
  66504. protocol: 'fixture',
  66505. fn: function (){
  66506. var self=this;
  66507. var $1;
  66508. $1=[(3), (-4)];
  66509. return $1;
  66510. },
  66511. //>>excludeStart("ide", pragmas.excludeIdeData);
  66512. args: [],
  66513. source: "collectionLastTwo\x0a\x09^ #(3 -4)",
  66514. referencedClasses: [],
  66515. //>>excludeEnd("ide");
  66516. messageSends: []
  66517. }),
  66518. $globals.ArrayTest);
  66519. $core.addMethod(
  66520. $core.method({
  66521. selector: "collectionOfPrintStrings",
  66522. protocol: 'fixture',
  66523. fn: function (){
  66524. var self=this;
  66525. var $1;
  66526. $1=["1", "2", "3", "-4"];
  66527. return $1;
  66528. },
  66529. //>>excludeStart("ide", pragmas.excludeIdeData);
  66530. args: [],
  66531. source: "collectionOfPrintStrings\x0a\x09^ #('1' '2' '3' '-4')",
  66532. referencedClasses: [],
  66533. //>>excludeEnd("ide");
  66534. messageSends: []
  66535. }),
  66536. $globals.ArrayTest);
  66537. $core.addMethod(
  66538. $core.method({
  66539. selector: "collectionSize",
  66540. protocol: 'fixture',
  66541. fn: function (){
  66542. var self=this;
  66543. return (4);
  66544. },
  66545. //>>excludeStart("ide", pragmas.excludeIdeData);
  66546. args: [],
  66547. source: "collectionSize\x0a\x09^ 4",
  66548. referencedClasses: [],
  66549. //>>excludeEnd("ide");
  66550. messageSends: []
  66551. }),
  66552. $globals.ArrayTest);
  66553. $core.addMethod(
  66554. $core.method({
  66555. selector: "collectionWithDuplicates",
  66556. protocol: 'fixture',
  66557. fn: function (){
  66558. var self=this;
  66559. var $1;
  66560. $1=["a", "b", "c", (1), (2), (1), "a"];
  66561. return $1;
  66562. },
  66563. //>>excludeStart("ide", pragmas.excludeIdeData);
  66564. args: [],
  66565. source: "collectionWithDuplicates\x0a\x09^ #('a' 'b' 'c' 1 2 1 'a')",
  66566. referencedClasses: [],
  66567. //>>excludeEnd("ide");
  66568. messageSends: []
  66569. }),
  66570. $globals.ArrayTest);
  66571. $core.addMethod(
  66572. $core.method({
  66573. selector: "collectionWithNewValue",
  66574. protocol: 'fixture',
  66575. fn: function (){
  66576. var self=this;
  66577. var $1;
  66578. $1=[(1), (2), (3), (-4), "N"];
  66579. return $1;
  66580. },
  66581. //>>excludeStart("ide", pragmas.excludeIdeData);
  66582. args: [],
  66583. source: "collectionWithNewValue\x0a\x09^ #(1 2 3 -4 'N')",
  66584. referencedClasses: [],
  66585. //>>excludeEnd("ide");
  66586. messageSends: []
  66587. }),
  66588. $globals.ArrayTest);
  66589. $core.addMethod(
  66590. $core.method({
  66591. selector: "sampleNewIndex",
  66592. protocol: 'fixture',
  66593. fn: function (){
  66594. var self=this;
  66595. return (5);
  66596. },
  66597. //>>excludeStart("ide", pragmas.excludeIdeData);
  66598. args: [],
  66599. source: "sampleNewIndex\x0a\x09^ 5",
  66600. referencedClasses: [],
  66601. //>>excludeEnd("ide");
  66602. messageSends: []
  66603. }),
  66604. $globals.ArrayTest);
  66605. $core.addMethod(
  66606. $core.method({
  66607. selector: "samplesDo:",
  66608. protocol: 'fixture',
  66609. fn: function (aBlock){
  66610. var self=this;
  66611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66612. return $core.withContext(function($ctx1) {
  66613. //>>excludeEnd("ctx");
  66614. (
  66615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66616. $ctx1.supercall = true,
  66617. //>>excludeEnd("ctx");
  66618. $globals.ArrayTest.superclass.fn.prototype._samplesDo_.apply($recv(self), [aBlock]));
  66619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66620. $ctx1.supercall = false;
  66621. //>>excludeEnd("ctx");;
  66622. $recv(aBlock)._value_value_((3),(3));
  66623. return self;
  66624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66625. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.ArrayTest)});
  66626. //>>excludeEnd("ctx");
  66627. },
  66628. //>>excludeStart("ide", pragmas.excludeIdeData);
  66629. args: ["aBlock"],
  66630. source: "samplesDo: aBlock\x0a\x09super samplesDo: aBlock.\x0a\x09aBlock value: 3 value: 3.",
  66631. referencedClasses: [],
  66632. //>>excludeEnd("ide");
  66633. messageSends: ["samplesDo:", "value:value:"]
  66634. }),
  66635. $globals.ArrayTest);
  66636. $core.addMethod(
  66637. $core.method({
  66638. selector: "testAdd",
  66639. protocol: 'tests',
  66640. fn: function (){
  66641. var self=this;
  66642. var array;
  66643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66644. return $core.withContext(function($ctx1) {
  66645. //>>excludeEnd("ctx");
  66646. array=self._collection();
  66647. $recv(array)._add_((6));
  66648. self._assert_equals_($recv(array)._last(),(6));
  66649. return self;
  66650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66651. }, function($ctx1) {$ctx1.fill(self,"testAdd",{array:array},$globals.ArrayTest)});
  66652. //>>excludeEnd("ctx");
  66653. },
  66654. //>>excludeStart("ide", pragmas.excludeIdeData);
  66655. args: [],
  66656. source: "testAdd \x0a\x09| array | \x0a\x09array := self collection. \x0a\x09array add: 6.\x0a\x09\x0a\x09self assert: array last equals: 6",
  66657. referencedClasses: [],
  66658. //>>excludeEnd("ide");
  66659. messageSends: ["collection", "add:", "assert:equals:", "last"]
  66660. }),
  66661. $globals.ArrayTest);
  66662. $core.addMethod(
  66663. $core.method({
  66664. selector: "testAddFirst",
  66665. protocol: 'tests',
  66666. fn: function (){
  66667. var self=this;
  66668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66669. return $core.withContext(function($ctx1) {
  66670. //>>excludeEnd("ctx");
  66671. var $1,$2;
  66672. $1=self._collection();
  66673. $recv($1)._addFirst_((0));
  66674. $2=$recv($1)._yourself();
  66675. self._assert_equals_($recv($2)._first(),(0));
  66676. return self;
  66677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66678. }, function($ctx1) {$ctx1.fill(self,"testAddFirst",{},$globals.ArrayTest)});
  66679. //>>excludeEnd("ctx");
  66680. },
  66681. //>>excludeStart("ide", pragmas.excludeIdeData);
  66682. args: [],
  66683. source: "testAddFirst\x0a\x09self assert: (self collection addFirst: 0; yourself) first equals: 0",
  66684. referencedClasses: [],
  66685. //>>excludeEnd("ide");
  66686. messageSends: ["assert:equals:", "first", "addFirst:", "collection", "yourself"]
  66687. }),
  66688. $globals.ArrayTest);
  66689. $core.addMethod(
  66690. $core.method({
  66691. selector: "testPrintString",
  66692. protocol: 'tests',
  66693. fn: function (){
  66694. var self=this;
  66695. var array;
  66696. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  66697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66698. return $core.withContext(function($ctx1) {
  66699. //>>excludeEnd("ctx");
  66700. var $1,$2,$3,$4,$5,$6,$7,$8,$9;
  66701. array=$recv($Array())._new();
  66702. $1=$recv(array)._printString();
  66703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66704. $ctx1.sendIdx["printString"]=1;
  66705. //>>excludeEnd("ctx");
  66706. self._assert_equals_($1,"an Array ()");
  66707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66708. $ctx1.sendIdx["assert:equals:"]=1;
  66709. //>>excludeEnd("ctx");
  66710. $2=array;
  66711. $recv($2)._add_((1));
  66712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66713. $ctx1.sendIdx["add:"]=1;
  66714. //>>excludeEnd("ctx");
  66715. $3=$recv($2)._add_((3));
  66716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66717. $ctx1.sendIdx["add:"]=2;
  66718. //>>excludeEnd("ctx");
  66719. $4=$recv(array)._printString();
  66720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66721. $ctx1.sendIdx["printString"]=2;
  66722. //>>excludeEnd("ctx");
  66723. self._assert_equals_($4,"an Array (1 3)");
  66724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66725. $ctx1.sendIdx["assert:equals:"]=2;
  66726. //>>excludeEnd("ctx");
  66727. $recv(array)._add_("foo");
  66728. $5=$recv(array)._printString();
  66729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66730. $ctx1.sendIdx["printString"]=3;
  66731. //>>excludeEnd("ctx");
  66732. self._assert_equals_($5,"an Array (1 3 'foo')");
  66733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66734. $ctx1.sendIdx["assert:equals:"]=3;
  66735. //>>excludeEnd("ctx");
  66736. $6=array;
  66737. $recv($6)._remove_((1));
  66738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66739. $ctx1.sendIdx["remove:"]=1;
  66740. //>>excludeEnd("ctx");
  66741. $7=$recv($6)._remove_((3));
  66742. $8=$recv(array)._printString();
  66743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66744. $ctx1.sendIdx["printString"]=4;
  66745. //>>excludeEnd("ctx");
  66746. self._assert_equals_($8,"an Array ('foo')");
  66747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66748. $ctx1.sendIdx["assert:equals:"]=4;
  66749. //>>excludeEnd("ctx");
  66750. $recv(array)._addLast_((3));
  66751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66752. $ctx1.sendIdx["addLast:"]=1;
  66753. //>>excludeEnd("ctx");
  66754. $9=$recv(array)._printString();
  66755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66756. $ctx1.sendIdx["printString"]=5;
  66757. //>>excludeEnd("ctx");
  66758. self._assert_equals_($9,"an Array ('foo' 3)");
  66759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66760. $ctx1.sendIdx["assert:equals:"]=5;
  66761. //>>excludeEnd("ctx");
  66762. $recv(array)._addLast_((3));
  66763. self._assert_equals_($recv(array)._printString(),"an Array ('foo' 3 3)");
  66764. return self;
  66765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66766. }, function($ctx1) {$ctx1.fill(self,"testPrintString",{array:array},$globals.ArrayTest)});
  66767. //>>excludeEnd("ctx");
  66768. },
  66769. //>>excludeStart("ide", pragmas.excludeIdeData);
  66770. args: [],
  66771. 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)'.",
  66772. referencedClasses: ["Array"],
  66773. //>>excludeEnd("ide");
  66774. messageSends: ["new", "assert:equals:", "printString", "add:", "remove:", "addLast:"]
  66775. }),
  66776. $globals.ArrayTest);
  66777. $core.addMethod(
  66778. $core.method({
  66779. selector: "testRemove",
  66780. protocol: 'tests',
  66781. fn: function (){
  66782. var self=this;
  66783. var array;
  66784. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  66785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66786. return $core.withContext(function($ctx1) {
  66787. //>>excludeEnd("ctx");
  66788. array=[(1), (2), (3), (4), (5)];
  66789. $recv(array)._remove_((3));
  66790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66791. $ctx1.sendIdx["remove:"]=1;
  66792. //>>excludeEnd("ctx");
  66793. self._assert_equals_(array,[(1), (2), (4), (5)]);
  66794. self._should_raise_((function(){
  66795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66796. return $core.withContext(function($ctx2) {
  66797. //>>excludeEnd("ctx");
  66798. return $recv(array)._remove_((3));
  66799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66800. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  66801. //>>excludeEnd("ctx");
  66802. }),$Error());
  66803. return self;
  66804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66805. }, function($ctx1) {$ctx1.fill(self,"testRemove",{array:array},$globals.ArrayTest)});
  66806. //>>excludeEnd("ctx");
  66807. },
  66808. //>>excludeStart("ide", pragmas.excludeIdeData);
  66809. args: [],
  66810. 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",
  66811. referencedClasses: ["Error"],
  66812. //>>excludeEnd("ide");
  66813. messageSends: ["remove:", "assert:equals:", "should:raise:"]
  66814. }),
  66815. $globals.ArrayTest);
  66816. $core.addMethod(
  66817. $core.method({
  66818. selector: "testRemoveFromTo",
  66819. protocol: 'tests',
  66820. fn: function (){
  66821. var self=this;
  66822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66823. return $core.withContext(function($ctx1) {
  66824. //>>excludeEnd("ctx");
  66825. var $1,$2;
  66826. $1=[(1), (2), (3), (4)]._removeFrom_to_((1),(3));
  66827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66828. $ctx1.sendIdx["removeFrom:to:"]=1;
  66829. //>>excludeEnd("ctx");
  66830. self._assert_equals_($1,[(4)]);
  66831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66832. $ctx1.sendIdx["assert:equals:"]=1;
  66833. //>>excludeEnd("ctx");
  66834. $2=[(1), (2), (3), (4)]._removeFrom_to_((2),(3));
  66835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66836. $ctx1.sendIdx["removeFrom:to:"]=2;
  66837. //>>excludeEnd("ctx");
  66838. self._assert_equals_($2,[(1), (4)]);
  66839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66840. $ctx1.sendIdx["assert:equals:"]=2;
  66841. //>>excludeEnd("ctx");
  66842. self._assert_equals_([(1), (2), (3), (4)]._removeFrom_to_((2),(4)),[(1)]);
  66843. return self;
  66844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66845. }, function($ctx1) {$ctx1.fill(self,"testRemoveFromTo",{},$globals.ArrayTest)});
  66846. //>>excludeEnd("ctx");
  66847. },
  66848. //>>excludeStart("ide", pragmas.excludeIdeData);
  66849. args: [],
  66850. 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)",
  66851. referencedClasses: [],
  66852. //>>excludeEnd("ide");
  66853. messageSends: ["assert:equals:", "removeFrom:to:"]
  66854. }),
  66855. $globals.ArrayTest);
  66856. $core.addMethod(
  66857. $core.method({
  66858. selector: "testRemoveIndex",
  66859. protocol: 'tests',
  66860. fn: function (){
  66861. var self=this;
  66862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66863. return $core.withContext(function($ctx1) {
  66864. //>>excludeEnd("ctx");
  66865. var $1,$2;
  66866. $1=[(1), (2), (3), (4)]._removeIndex_((2));
  66867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66868. $ctx1.sendIdx["removeIndex:"]=1;
  66869. //>>excludeEnd("ctx");
  66870. self._assert_equals_($1,[(1), (3), (4)]);
  66871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66872. $ctx1.sendIdx["assert:equals:"]=1;
  66873. //>>excludeEnd("ctx");
  66874. $2=[(1), (2), (3), (4)]._removeIndex_((1));
  66875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66876. $ctx1.sendIdx["removeIndex:"]=2;
  66877. //>>excludeEnd("ctx");
  66878. self._assert_equals_($2,[(2), (3), (4)]);
  66879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66880. $ctx1.sendIdx["assert:equals:"]=2;
  66881. //>>excludeEnd("ctx");
  66882. self._assert_equals_(["hello"]._removeIndex_((1)),[]);
  66883. return self;
  66884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66885. }, function($ctx1) {$ctx1.fill(self,"testRemoveIndex",{},$globals.ArrayTest)});
  66886. //>>excludeEnd("ctx");
  66887. },
  66888. //>>excludeStart("ide", pragmas.excludeIdeData);
  66889. args: [],
  66890. 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: #()",
  66891. referencedClasses: [],
  66892. //>>excludeEnd("ide");
  66893. messageSends: ["assert:equals:", "removeIndex:"]
  66894. }),
  66895. $globals.ArrayTest);
  66896. $core.addMethod(
  66897. $core.method({
  66898. selector: "testRemoveLast",
  66899. protocol: 'tests',
  66900. fn: function (){
  66901. var self=this;
  66902. var array;
  66903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66904. return $core.withContext(function($ctx1) {
  66905. //>>excludeEnd("ctx");
  66906. array=[(1), (2)];
  66907. $recv(array)._removeLast();
  66908. self._assert_equals_($recv(array)._last(),(1));
  66909. return self;
  66910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66911. }, function($ctx1) {$ctx1.fill(self,"testRemoveLast",{array:array},$globals.ArrayTest)});
  66912. //>>excludeEnd("ctx");
  66913. },
  66914. //>>excludeStart("ide", pragmas.excludeIdeData);
  66915. args: [],
  66916. source: "testRemoveLast \x0a\x09| array |\x0a\x09array := #(1 2). \x0a\x09array removeLast.\x0a\x09\x0a\x09self assert: array last equals: 1",
  66917. referencedClasses: [],
  66918. //>>excludeEnd("ide");
  66919. messageSends: ["removeLast", "assert:equals:", "last"]
  66920. }),
  66921. $globals.ArrayTest);
  66922. $core.addMethod(
  66923. $core.method({
  66924. selector: "testReversed",
  66925. protocol: 'tests',
  66926. fn: function (){
  66927. var self=this;
  66928. var array;
  66929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66930. return $core.withContext(function($ctx1) {
  66931. //>>excludeEnd("ctx");
  66932. array=[(5), (4), (3), (2), (1)];
  66933. self._assert_equals_($recv(array)._reversed(),[(1), (2), (3), (4), (5)]);
  66934. return self;
  66935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66936. }, function($ctx1) {$ctx1.fill(self,"testReversed",{array:array},$globals.ArrayTest)});
  66937. //>>excludeEnd("ctx");
  66938. },
  66939. //>>excludeStart("ide", pragmas.excludeIdeData);
  66940. args: [],
  66941. source: "testReversed\x0a\x09|array|\x0a\x09array := #(5 4 3 2 1). \x0a\x09self assert: (array reversed) equals: #(1 2 3 4 5)",
  66942. referencedClasses: [],
  66943. //>>excludeEnd("ide");
  66944. messageSends: ["assert:equals:", "reversed"]
  66945. }),
  66946. $globals.ArrayTest);
  66947. $core.addMethod(
  66948. $core.method({
  66949. selector: "testSort",
  66950. protocol: 'tests',
  66951. fn: function (){
  66952. var self=this;
  66953. var array;
  66954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66955. return $core.withContext(function($ctx1) {
  66956. //>>excludeEnd("ctx");
  66957. array=[(10), (1), (5)];
  66958. $recv(array)._sort();
  66959. self._assert_equals_(array,[(1), (5), (10)]);
  66960. return self;
  66961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66962. }, function($ctx1) {$ctx1.fill(self,"testSort",{array:array},$globals.ArrayTest)});
  66963. //>>excludeEnd("ctx");
  66964. },
  66965. //>>excludeStart("ide", pragmas.excludeIdeData);
  66966. args: [],
  66967. source: "testSort\x0a\x09| array |\x0a\x09array := #(10 1 5). \x0a\x09array sort.\x0a\x09self assert: array equals: #(1 5 10)",
  66968. referencedClasses: [],
  66969. //>>excludeEnd("ide");
  66970. messageSends: ["sort", "assert:equals:"]
  66971. }),
  66972. $globals.ArrayTest);
  66973. $core.addMethod(
  66974. $core.method({
  66975. selector: "collectionClass",
  66976. protocol: 'fixture',
  66977. fn: function (){
  66978. var self=this;
  66979. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  66980. return $Array();
  66981. },
  66982. //>>excludeStart("ide", pragmas.excludeIdeData);
  66983. args: [],
  66984. source: "collectionClass\x0a\x09^ Array",
  66985. referencedClasses: ["Array"],
  66986. //>>excludeEnd("ide");
  66987. messageSends: []
  66988. }),
  66989. $globals.ArrayTest.klass);
  66990. $core.addClass('StringTest', $globals.SequenceableCollectionTest, [], 'Kernel-Tests');
  66991. $core.addMethod(
  66992. $core.method({
  66993. selector: "collection",
  66994. protocol: 'fixture',
  66995. fn: function (){
  66996. var self=this;
  66997. return "helLo";
  66998. },
  66999. //>>excludeStart("ide", pragmas.excludeIdeData);
  67000. args: [],
  67001. source: "collection\x0a\x09^ 'helLo'",
  67002. referencedClasses: [],
  67003. //>>excludeEnd("ide");
  67004. messageSends: []
  67005. }),
  67006. $globals.StringTest);
  67007. $core.addMethod(
  67008. $core.method({
  67009. selector: "collectionFirst",
  67010. protocol: 'fixture',
  67011. fn: function (){
  67012. var self=this;
  67013. return "h";
  67014. },
  67015. //>>excludeStart("ide", pragmas.excludeIdeData);
  67016. args: [],
  67017. source: "collectionFirst\x0a\x09^ 'h'",
  67018. referencedClasses: [],
  67019. //>>excludeEnd("ide");
  67020. messageSends: []
  67021. }),
  67022. $globals.StringTest);
  67023. $core.addMethod(
  67024. $core.method({
  67025. selector: "collectionFirstTwo",
  67026. protocol: 'fixture',
  67027. fn: function (){
  67028. var self=this;
  67029. return "he";
  67030. },
  67031. //>>excludeStart("ide", pragmas.excludeIdeData);
  67032. args: [],
  67033. source: "collectionFirstTwo\x0a\x09^ 'he'",
  67034. referencedClasses: [],
  67035. //>>excludeEnd("ide");
  67036. messageSends: []
  67037. }),
  67038. $globals.StringTest);
  67039. $core.addMethod(
  67040. $core.method({
  67041. selector: "collectionLast",
  67042. protocol: 'fixture',
  67043. fn: function (){
  67044. var self=this;
  67045. return "o";
  67046. },
  67047. //>>excludeStart("ide", pragmas.excludeIdeData);
  67048. args: [],
  67049. source: "collectionLast\x0a\x09^ 'o'",
  67050. referencedClasses: [],
  67051. //>>excludeEnd("ide");
  67052. messageSends: []
  67053. }),
  67054. $globals.StringTest);
  67055. $core.addMethod(
  67056. $core.method({
  67057. selector: "collectionLastTwo",
  67058. protocol: 'fixture',
  67059. fn: function (){
  67060. var self=this;
  67061. return "Lo";
  67062. },
  67063. //>>excludeStart("ide", pragmas.excludeIdeData);
  67064. args: [],
  67065. source: "collectionLastTwo\x0a\x09^ 'Lo'",
  67066. referencedClasses: [],
  67067. //>>excludeEnd("ide");
  67068. messageSends: []
  67069. }),
  67070. $globals.StringTest);
  67071. $core.addMethod(
  67072. $core.method({
  67073. selector: "collectionOfPrintStrings",
  67074. protocol: 'fixture',
  67075. fn: function (){
  67076. var self=this;
  67077. return "'h''e''l''L''o'";
  67078. },
  67079. //>>excludeStart("ide", pragmas.excludeIdeData);
  67080. args: [],
  67081. source: "collectionOfPrintStrings\x0a\x09^ '''h''''e''''l''''L''''o'''",
  67082. referencedClasses: [],
  67083. //>>excludeEnd("ide");
  67084. messageSends: []
  67085. }),
  67086. $globals.StringTest);
  67087. $core.addMethod(
  67088. $core.method({
  67089. selector: "collectionSize",
  67090. protocol: 'fixture',
  67091. fn: function (){
  67092. var self=this;
  67093. return (5);
  67094. },
  67095. //>>excludeStart("ide", pragmas.excludeIdeData);
  67096. args: [],
  67097. source: "collectionSize\x0a\x09^ 5",
  67098. referencedClasses: [],
  67099. //>>excludeEnd("ide");
  67100. messageSends: []
  67101. }),
  67102. $globals.StringTest);
  67103. $core.addMethod(
  67104. $core.method({
  67105. selector: "collectionWithDuplicates",
  67106. protocol: 'fixture',
  67107. fn: function (){
  67108. var self=this;
  67109. return "abbaerte";
  67110. },
  67111. //>>excludeStart("ide", pragmas.excludeIdeData);
  67112. args: [],
  67113. source: "collectionWithDuplicates\x0a\x09^ 'abbaerte'",
  67114. referencedClasses: [],
  67115. //>>excludeEnd("ide");
  67116. messageSends: []
  67117. }),
  67118. $globals.StringTest);
  67119. $core.addMethod(
  67120. $core.method({
  67121. selector: "collectionWithNewValue",
  67122. protocol: 'fixture',
  67123. fn: function (){
  67124. var self=this;
  67125. return "helLoN";
  67126. },
  67127. //>>excludeStart("ide", pragmas.excludeIdeData);
  67128. args: [],
  67129. source: "collectionWithNewValue\x0a\x09^ 'helLoN'",
  67130. referencedClasses: [],
  67131. //>>excludeEnd("ide");
  67132. messageSends: []
  67133. }),
  67134. $globals.StringTest);
  67135. $core.addMethod(
  67136. $core.method({
  67137. selector: "sampleNewValueAsCollection",
  67138. protocol: 'fixture',
  67139. fn: function (){
  67140. var self=this;
  67141. return "N";
  67142. },
  67143. //>>excludeStart("ide", pragmas.excludeIdeData);
  67144. args: [],
  67145. source: "sampleNewValueAsCollection\x0a\x09^ 'N'",
  67146. referencedClasses: [],
  67147. //>>excludeEnd("ide");
  67148. messageSends: []
  67149. }),
  67150. $globals.StringTest);
  67151. $core.addMethod(
  67152. $core.method({
  67153. selector: "samplesDo:",
  67154. protocol: 'fixture',
  67155. fn: function (aBlock){
  67156. var self=this;
  67157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67158. return $core.withContext(function($ctx1) {
  67159. //>>excludeEnd("ctx");
  67160. (
  67161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67162. $ctx1.supercall = true,
  67163. //>>excludeEnd("ctx");
  67164. $globals.StringTest.superclass.fn.prototype._samplesDo_.apply($recv(self), [aBlock]));
  67165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67166. $ctx1.supercall = false;
  67167. //>>excludeEnd("ctx");;
  67168. $recv(aBlock)._value_value_((3),"l");
  67169. return self;
  67170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67171. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.StringTest)});
  67172. //>>excludeEnd("ctx");
  67173. },
  67174. //>>excludeStart("ide", pragmas.excludeIdeData);
  67175. args: ["aBlock"],
  67176. source: "samplesDo: aBlock\x0a\x09super samplesDo: aBlock.\x0a\x09aBlock value: 3 value: 'l'",
  67177. referencedClasses: [],
  67178. //>>excludeEnd("ide");
  67179. messageSends: ["samplesDo:", "value:value:"]
  67180. }),
  67181. $globals.StringTest);
  67182. $core.addMethod(
  67183. $core.method({
  67184. selector: "testAddAll",
  67185. protocol: 'tests',
  67186. fn: function (){
  67187. var self=this;
  67188. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  67189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67190. return $core.withContext(function($ctx1) {
  67191. //>>excludeEnd("ctx");
  67192. var $1;
  67193. self._should_raise_((function(){
  67194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67195. return $core.withContext(function($ctx2) {
  67196. //>>excludeEnd("ctx");
  67197. $1=self._collection();
  67198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67199. $ctx2.sendIdx["collection"]=1;
  67200. //>>excludeEnd("ctx");
  67201. return $recv($1)._addAll_(self._collection());
  67202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67203. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  67204. //>>excludeEnd("ctx");
  67205. }),$Error());
  67206. return self;
  67207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67208. }, function($ctx1) {$ctx1.fill(self,"testAddAll",{},$globals.StringTest)});
  67209. //>>excludeEnd("ctx");
  67210. },
  67211. //>>excludeStart("ide", pragmas.excludeIdeData);
  67212. args: [],
  67213. source: "testAddAll\x0a\x09\x22String instances are read-only\x22\x0a\x09self should: [ self collection addAll: self collection ] raise: Error",
  67214. referencedClasses: ["Error"],
  67215. //>>excludeEnd("ide");
  67216. messageSends: ["should:raise:", "addAll:", "collection"]
  67217. }),
  67218. $globals.StringTest);
  67219. $core.addMethod(
  67220. $core.method({
  67221. selector: "testAddRemove",
  67222. protocol: 'tests',
  67223. fn: function (){
  67224. var self=this;
  67225. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  67226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67227. return $core.withContext(function($ctx1) {
  67228. //>>excludeEnd("ctx");
  67229. self._should_raise_((function(){
  67230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67231. return $core.withContext(function($ctx2) {
  67232. //>>excludeEnd("ctx");
  67233. return "hello"._add_("a");
  67234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67235. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  67236. //>>excludeEnd("ctx");
  67237. }),$Error());
  67238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67239. $ctx1.sendIdx["should:raise:"]=1;
  67240. //>>excludeEnd("ctx");
  67241. self._should_raise_((function(){
  67242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67243. return $core.withContext(function($ctx2) {
  67244. //>>excludeEnd("ctx");
  67245. return "hello"._remove_("h");
  67246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67247. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  67248. //>>excludeEnd("ctx");
  67249. }),$Error());
  67250. return self;
  67251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67252. }, function($ctx1) {$ctx1.fill(self,"testAddRemove",{},$globals.StringTest)});
  67253. //>>excludeEnd("ctx");
  67254. },
  67255. //>>excludeStart("ide", pragmas.excludeIdeData);
  67256. args: [],
  67257. source: "testAddRemove\x0a\x09self should: [ 'hello' add: 'a' ] raise: Error.\x0a\x09self should: [ 'hello' remove: 'h' ] raise: Error",
  67258. referencedClasses: ["Error"],
  67259. //>>excludeEnd("ide");
  67260. messageSends: ["should:raise:", "add:", "remove:"]
  67261. }),
  67262. $globals.StringTest);
  67263. $core.addMethod(
  67264. $core.method({
  67265. selector: "testAsArray",
  67266. protocol: 'tests',
  67267. fn: function (){
  67268. var self=this;
  67269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67270. return $core.withContext(function($ctx1) {
  67271. //>>excludeEnd("ctx");
  67272. self._assert_equals_("hello"._asArray(),["h", "e", "l", "l", "o"]);
  67273. return self;
  67274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67275. }, function($ctx1) {$ctx1.fill(self,"testAsArray",{},$globals.StringTest)});
  67276. //>>excludeEnd("ctx");
  67277. },
  67278. //>>excludeStart("ide", pragmas.excludeIdeData);
  67279. args: [],
  67280. source: "testAsArray\x0a\x09self assert: 'hello' asArray equals: #('h' 'e' 'l' 'l' 'o').",
  67281. referencedClasses: [],
  67282. //>>excludeEnd("ide");
  67283. messageSends: ["assert:equals:", "asArray"]
  67284. }),
  67285. $globals.StringTest);
  67286. $core.addMethod(
  67287. $core.method({
  67288. selector: "testAsLowerCase",
  67289. protocol: 'tests',
  67290. fn: function (){
  67291. var self=this;
  67292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67293. return $core.withContext(function($ctx1) {
  67294. //>>excludeEnd("ctx");
  67295. self._assert_equals_("JACKIE"._asLowercase(),"jackie");
  67296. return self;
  67297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67298. }, function($ctx1) {$ctx1.fill(self,"testAsLowerCase",{},$globals.StringTest)});
  67299. //>>excludeEnd("ctx");
  67300. },
  67301. //>>excludeStart("ide", pragmas.excludeIdeData);
  67302. args: [],
  67303. source: "testAsLowerCase\x0a\x09self assert: 'JACKIE' asLowercase equals: 'jackie'.",
  67304. referencedClasses: [],
  67305. //>>excludeEnd("ide");
  67306. messageSends: ["assert:equals:", "asLowercase"]
  67307. }),
  67308. $globals.StringTest);
  67309. $core.addMethod(
  67310. $core.method({
  67311. selector: "testAsNumber",
  67312. protocol: 'tests',
  67313. fn: function (){
  67314. var self=this;
  67315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67316. return $core.withContext(function($ctx1) {
  67317. //>>excludeEnd("ctx");
  67318. var $1,$2;
  67319. $1="3"._asNumber();
  67320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67321. $ctx1.sendIdx["asNumber"]=1;
  67322. //>>excludeEnd("ctx");
  67323. self._assert_equals_($1,(3));
  67324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67325. $ctx1.sendIdx["assert:equals:"]=1;
  67326. //>>excludeEnd("ctx");
  67327. $2="-3"._asNumber();
  67328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67329. $ctx1.sendIdx["asNumber"]=2;
  67330. //>>excludeEnd("ctx");
  67331. self._assert_equals_($2,(-3));
  67332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67333. $ctx1.sendIdx["assert:equals:"]=2;
  67334. //>>excludeEnd("ctx");
  67335. self._assert_equals_("-1.5"._asNumber(),(-1.5));
  67336. return self;
  67337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67338. }, function($ctx1) {$ctx1.fill(self,"testAsNumber",{},$globals.StringTest)});
  67339. //>>excludeEnd("ctx");
  67340. },
  67341. //>>excludeStart("ide", pragmas.excludeIdeData);
  67342. args: [],
  67343. 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.",
  67344. referencedClasses: [],
  67345. //>>excludeEnd("ide");
  67346. messageSends: ["assert:equals:", "asNumber"]
  67347. }),
  67348. $globals.StringTest);
  67349. $core.addMethod(
  67350. $core.method({
  67351. selector: "testAsUpperCase",
  67352. protocol: 'tests',
  67353. fn: function (){
  67354. var self=this;
  67355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67356. return $core.withContext(function($ctx1) {
  67357. //>>excludeEnd("ctx");
  67358. self._assert_equals_("jackie"._asUppercase(),"JACKIE");
  67359. return self;
  67360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67361. }, function($ctx1) {$ctx1.fill(self,"testAsUpperCase",{},$globals.StringTest)});
  67362. //>>excludeEnd("ctx");
  67363. },
  67364. //>>excludeStart("ide", pragmas.excludeIdeData);
  67365. args: [],
  67366. source: "testAsUpperCase\x0a\x09self assert: 'jackie' asUppercase equals: 'JACKIE'.",
  67367. referencedClasses: [],
  67368. //>>excludeEnd("ide");
  67369. messageSends: ["assert:equals:", "asUppercase"]
  67370. }),
  67371. $globals.StringTest);
  67372. $core.addMethod(
  67373. $core.method({
  67374. selector: "testAsciiValue",
  67375. protocol: 'tests',
  67376. fn: function (){
  67377. var self=this;
  67378. var characterA,characterU;
  67379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67380. return $core.withContext(function($ctx1) {
  67381. //>>excludeEnd("ctx");
  67382. var $1;
  67383. characterA="A";
  67384. characterU="U";
  67385. $1=$recv(characterA)._asciiValue();
  67386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67387. $ctx1.sendIdx["asciiValue"]=1;
  67388. //>>excludeEnd("ctx");
  67389. self._assert_equals_($1,(65));
  67390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67391. $ctx1.sendIdx["assert:equals:"]=1;
  67392. //>>excludeEnd("ctx");
  67393. self._assert_equals_($recv(characterU)._asciiValue(),(85));
  67394. return self;
  67395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67396. }, function($ctx1) {$ctx1.fill(self,"testAsciiValue",{characterA:characterA,characterU:characterU},$globals.StringTest)});
  67397. //>>excludeEnd("ctx");
  67398. },
  67399. //>>excludeStart("ide", pragmas.excludeIdeData);
  67400. args: [],
  67401. 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",
  67402. referencedClasses: [],
  67403. //>>excludeEnd("ide");
  67404. messageSends: ["assert:equals:", "asciiValue"]
  67405. }),
  67406. $globals.StringTest);
  67407. $core.addMethod(
  67408. $core.method({
  67409. selector: "testAtIfAbsentPut",
  67410. protocol: 'tests',
  67411. fn: function (){
  67412. var self=this;
  67413. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  67414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67415. return $core.withContext(function($ctx1) {
  67416. //>>excludeEnd("ctx");
  67417. self._should_raise_((function(){
  67418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67419. return $core.withContext(function($ctx2) {
  67420. //>>excludeEnd("ctx");
  67421. return "hello"._at_ifAbsentPut_((6),(function(){
  67422. return "a";
  67423. }));
  67424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67425. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  67426. //>>excludeEnd("ctx");
  67427. }),$Error());
  67428. return self;
  67429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67430. }, function($ctx1) {$ctx1.fill(self,"testAtIfAbsentPut",{},$globals.StringTest)});
  67431. //>>excludeEnd("ctx");
  67432. },
  67433. //>>excludeStart("ide", pragmas.excludeIdeData);
  67434. args: [],
  67435. source: "testAtIfAbsentPut\x0a\x09\x22String instances are read-only\x22\x0a\x09self should: [ 'hello' at: 6 ifAbsentPut: [ 'a' ] ] raise: Error",
  67436. referencedClasses: ["Error"],
  67437. //>>excludeEnd("ide");
  67438. messageSends: ["should:raise:", "at:ifAbsentPut:"]
  67439. }),
  67440. $globals.StringTest);
  67441. $core.addMethod(
  67442. $core.method({
  67443. selector: "testAtPut",
  67444. protocol: 'tests',
  67445. fn: function (){
  67446. var self=this;
  67447. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  67448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67449. return $core.withContext(function($ctx1) {
  67450. //>>excludeEnd("ctx");
  67451. self._should_raise_((function(){
  67452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67453. return $core.withContext(function($ctx2) {
  67454. //>>excludeEnd("ctx");
  67455. return "hello"._at_put_((1),"a");
  67456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67457. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  67458. //>>excludeEnd("ctx");
  67459. }),$Error());
  67460. return self;
  67461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67462. }, function($ctx1) {$ctx1.fill(self,"testAtPut",{},$globals.StringTest)});
  67463. //>>excludeEnd("ctx");
  67464. },
  67465. //>>excludeStart("ide", pragmas.excludeIdeData);
  67466. args: [],
  67467. source: "testAtPut\x0a\x09\x22String instances are read-only\x22\x0a\x09self should: [ 'hello' at: 1 put: 'a' ] raise: Error",
  67468. referencedClasses: ["Error"],
  67469. //>>excludeEnd("ide");
  67470. messageSends: ["should:raise:", "at:put:"]
  67471. }),
  67472. $globals.StringTest);
  67473. $core.addMethod(
  67474. $core.method({
  67475. selector: "testCapitalized",
  67476. protocol: 'tests',
  67477. fn: function (){
  67478. var self=this;
  67479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67480. return $core.withContext(function($ctx1) {
  67481. //>>excludeEnd("ctx");
  67482. var $1,$2,$3;
  67483. $1="test"._capitalized();
  67484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67485. $ctx1.sendIdx["capitalized"]=1;
  67486. //>>excludeEnd("ctx");
  67487. self._assert_equals_($1,"Test");
  67488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67489. $ctx1.sendIdx["assert:equals:"]=1;
  67490. //>>excludeEnd("ctx");
  67491. $2="Test"._capitalized();
  67492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67493. $ctx1.sendIdx["capitalized"]=2;
  67494. //>>excludeEnd("ctx");
  67495. self._assert_equals_($2,"Test");
  67496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67497. $ctx1.sendIdx["assert:equals:"]=2;
  67498. //>>excludeEnd("ctx");
  67499. self._assert_equals_(""._capitalized(),"");
  67500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67501. $ctx1.sendIdx["assert:equals:"]=3;
  67502. //>>excludeEnd("ctx");
  67503. $3="Test"._isCapitalized();
  67504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67505. $ctx1.sendIdx["isCapitalized"]=1;
  67506. //>>excludeEnd("ctx");
  67507. self._assert_equals_($3,true);
  67508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67509. $ctx1.sendIdx["assert:equals:"]=4;
  67510. //>>excludeEnd("ctx");
  67511. self._assert_equals_("test"._isCapitalized(),false);
  67512. return self;
  67513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67514. }, function($ctx1) {$ctx1.fill(self,"testCapitalized",{},$globals.StringTest)});
  67515. //>>excludeEnd("ctx");
  67516. },
  67517. //>>excludeStart("ide", pragmas.excludeIdeData);
  67518. args: [],
  67519. 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.",
  67520. referencedClasses: [],
  67521. //>>excludeEnd("ide");
  67522. messageSends: ["assert:equals:", "capitalized", "isCapitalized"]
  67523. }),
  67524. $globals.StringTest);
  67525. $core.addMethod(
  67526. $core.method({
  67527. selector: "testCharCodeAt",
  67528. protocol: 'tests',
  67529. fn: function (){
  67530. var self=this;
  67531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67532. return $core.withContext(function($ctx1) {
  67533. //>>excludeEnd("ctx");
  67534. var $1,$2,$3,$4,$5;
  67535. $1="jackie"._charCodeAt_((1));
  67536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67537. $ctx1.sendIdx["charCodeAt:"]=1;
  67538. //>>excludeEnd("ctx");
  67539. self._assert_equals_($1,(106));
  67540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67541. $ctx1.sendIdx["assert:equals:"]=1;
  67542. //>>excludeEnd("ctx");
  67543. $2="jackie"._charCodeAt_((2));
  67544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67545. $ctx1.sendIdx["charCodeAt:"]=2;
  67546. //>>excludeEnd("ctx");
  67547. self._assert_equals_($2,(97));
  67548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67549. $ctx1.sendIdx["assert:equals:"]=2;
  67550. //>>excludeEnd("ctx");
  67551. $3="jackie"._charCodeAt_((3));
  67552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67553. $ctx1.sendIdx["charCodeAt:"]=3;
  67554. //>>excludeEnd("ctx");
  67555. self._assert_equals_($3,(99));
  67556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67557. $ctx1.sendIdx["assert:equals:"]=3;
  67558. //>>excludeEnd("ctx");
  67559. $4="jackie"._charCodeAt_((4));
  67560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67561. $ctx1.sendIdx["charCodeAt:"]=4;
  67562. //>>excludeEnd("ctx");
  67563. self._assert_equals_($4,(107));
  67564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67565. $ctx1.sendIdx["assert:equals:"]=4;
  67566. //>>excludeEnd("ctx");
  67567. $5="jackie"._charCodeAt_((5));
  67568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67569. $ctx1.sendIdx["charCodeAt:"]=5;
  67570. //>>excludeEnd("ctx");
  67571. self._assert_equals_($5,(105));
  67572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67573. $ctx1.sendIdx["assert:equals:"]=5;
  67574. //>>excludeEnd("ctx");
  67575. self._assert_equals_("jackie"._charCodeAt_((6)),(101));
  67576. return self;
  67577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67578. }, function($ctx1) {$ctx1.fill(self,"testCharCodeAt",{},$globals.StringTest)});
  67579. //>>excludeEnd("ctx");
  67580. },
  67581. //>>excludeStart("ide", pragmas.excludeIdeData);
  67582. args: [],
  67583. 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",
  67584. referencedClasses: [],
  67585. //>>excludeEnd("ide");
  67586. messageSends: ["assert:equals:", "charCodeAt:"]
  67587. }),
  67588. $globals.StringTest);
  67589. $core.addMethod(
  67590. $core.method({
  67591. selector: "testCopyFromTo",
  67592. protocol: 'tests',
  67593. fn: function (){
  67594. var self=this;
  67595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67596. return $core.withContext(function($ctx1) {
  67597. //>>excludeEnd("ctx");
  67598. var $1;
  67599. $1="jackie"._copyFrom_to_((1),(3));
  67600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67601. $ctx1.sendIdx["copyFrom:to:"]=1;
  67602. //>>excludeEnd("ctx");
  67603. self._assert_equals_($1,"jac");
  67604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67605. $ctx1.sendIdx["assert:equals:"]=1;
  67606. //>>excludeEnd("ctx");
  67607. self._assert_equals_("jackie"._copyFrom_to_((4),(6)),"kie");
  67608. return self;
  67609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67610. }, function($ctx1) {$ctx1.fill(self,"testCopyFromTo",{},$globals.StringTest)});
  67611. //>>excludeEnd("ctx");
  67612. },
  67613. //>>excludeStart("ide", pragmas.excludeIdeData);
  67614. args: [],
  67615. source: "testCopyFromTo\x0a\x09self assert: ('jackie' copyFrom: 1 to: 3) equals: 'jac'.\x0a\x09self assert: ('jackie' copyFrom: 4 to: 6) equals: 'kie'.",
  67616. referencedClasses: [],
  67617. //>>excludeEnd("ide");
  67618. messageSends: ["assert:equals:", "copyFrom:to:"]
  67619. }),
  67620. $globals.StringTest);
  67621. $core.addMethod(
  67622. $core.method({
  67623. selector: "testCopyWithoutAll",
  67624. protocol: 'tests',
  67625. fn: function (){
  67626. var self=this;
  67627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67628. return $core.withContext(function($ctx1) {
  67629. //>>excludeEnd("ctx");
  67630. self._assert_equals_("*hello* *world*"._copyWithoutAll_("*"),"hello world");
  67631. return self;
  67632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67633. }, function($ctx1) {$ctx1.fill(self,"testCopyWithoutAll",{},$globals.StringTest)});
  67634. //>>excludeEnd("ctx");
  67635. },
  67636. //>>excludeStart("ide", pragmas.excludeIdeData);
  67637. args: [],
  67638. source: "testCopyWithoutAll\x0a\x09self\x0a\x09\x09assert: ('*hello* *world*' copyWithoutAll: '*')\x0a\x09\x09equals: 'hello world'",
  67639. referencedClasses: [],
  67640. //>>excludeEnd("ide");
  67641. messageSends: ["assert:equals:", "copyWithoutAll:"]
  67642. }),
  67643. $globals.StringTest);
  67644. $core.addMethod(
  67645. $core.method({
  67646. selector: "testEquality",
  67647. protocol: 'tests',
  67648. fn: function (){
  67649. var self=this;
  67650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67651. return $core.withContext(function($ctx1) {
  67652. //>>excludeEnd("ctx");
  67653. var $1,$2,$3;
  67654. self._assert_equals_("hello","hello");
  67655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67656. $ctx1.sendIdx["assert:equals:"]=1;
  67657. //>>excludeEnd("ctx");
  67658. $1="hello".__eq("world");
  67659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67660. $ctx1.sendIdx["="]=1;
  67661. //>>excludeEnd("ctx");
  67662. self._deny_($1);
  67663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67664. $ctx1.sendIdx["deny:"]=1;
  67665. //>>excludeEnd("ctx");
  67666. $2="hello".__eq([]._at_ifAbsent_((1),(function(){
  67667. })));
  67668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67669. $ctx1.sendIdx["="]=2;
  67670. //>>excludeEnd("ctx");
  67671. self._deny_($2);
  67672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67673. $ctx1.sendIdx["deny:"]=2;
  67674. //>>excludeEnd("ctx");
  67675. $3="hello"._yourself();
  67676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67677. $ctx1.sendIdx["yourself"]=1;
  67678. //>>excludeEnd("ctx");
  67679. self._assert_equals_("hello",$3);
  67680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67681. $ctx1.sendIdx["assert:equals:"]=2;
  67682. //>>excludeEnd("ctx");
  67683. self._assert_equals_("hello"._yourself(),"hello");
  67684. self._deny_("".__eq((0)));
  67685. return self;
  67686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67687. }, function($ctx1) {$ctx1.fill(self,"testEquality",{},$globals.StringTest)});
  67688. //>>excludeEnd("ctx");
  67689. },
  67690. //>>excludeStart("ide", pragmas.excludeIdeData);
  67691. args: [],
  67692. 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",
  67693. referencedClasses: [],
  67694. //>>excludeEnd("ide");
  67695. messageSends: ["assert:equals:", "deny:", "=", "at:ifAbsent:", "yourself"]
  67696. }),
  67697. $globals.StringTest);
  67698. $core.addMethod(
  67699. $core.method({
  67700. selector: "testIdentity",
  67701. protocol: 'tests',
  67702. fn: function (){
  67703. var self=this;
  67704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67705. return $core.withContext(function($ctx1) {
  67706. //>>excludeEnd("ctx");
  67707. var $1,$2,$4,$3,$5;
  67708. $1="hello".__eq_eq("hello");
  67709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67710. $ctx1.sendIdx["=="]=1;
  67711. //>>excludeEnd("ctx");
  67712. self._assert_($1);
  67713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67714. $ctx1.sendIdx["assert:"]=1;
  67715. //>>excludeEnd("ctx");
  67716. $2="hello".__eq_eq("world");
  67717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67718. $ctx1.sendIdx["=="]=2;
  67719. //>>excludeEnd("ctx");
  67720. self._deny_($2);
  67721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67722. $ctx1.sendIdx["deny:"]=1;
  67723. //>>excludeEnd("ctx");
  67724. $4="hello"._yourself();
  67725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67726. $ctx1.sendIdx["yourself"]=1;
  67727. //>>excludeEnd("ctx");
  67728. $3="hello".__eq_eq($4);
  67729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67730. $ctx1.sendIdx["=="]=3;
  67731. //>>excludeEnd("ctx");
  67732. self._assert_($3);
  67733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67734. $ctx1.sendIdx["assert:"]=2;
  67735. //>>excludeEnd("ctx");
  67736. $5=$recv("hello"._yourself()).__eq_eq("hello");
  67737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67738. $ctx1.sendIdx["=="]=4;
  67739. //>>excludeEnd("ctx");
  67740. self._assert_($5);
  67741. self._deny_("".__eq_eq((0)));
  67742. return self;
  67743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67744. }, function($ctx1) {$ctx1.fill(self,"testIdentity",{},$globals.StringTest)});
  67745. //>>excludeEnd("ctx");
  67746. },
  67747. //>>excludeStart("ide", pragmas.excludeIdeData);
  67748. args: [],
  67749. 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",
  67750. referencedClasses: [],
  67751. //>>excludeEnd("ide");
  67752. messageSends: ["assert:", "==", "deny:", "yourself"]
  67753. }),
  67754. $globals.StringTest);
  67755. $core.addMethod(
  67756. $core.method({
  67757. selector: "testIdentityHash",
  67758. protocol: 'tests',
  67759. fn: function (){
  67760. var self=this;
  67761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67762. return $core.withContext(function($ctx1) {
  67763. //>>excludeEnd("ctx");
  67764. var $1,$2,$4,$3;
  67765. $1="foo"._identityHash();
  67766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67767. $ctx1.sendIdx["identityHash"]=1;
  67768. //>>excludeEnd("ctx");
  67769. $2="foo"._identityHash();
  67770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67771. $ctx1.sendIdx["identityHash"]=2;
  67772. //>>excludeEnd("ctx");
  67773. self._assert_equals_($1,$2);
  67774. $4="foo"._identityHash();
  67775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67776. $ctx1.sendIdx["identityHash"]=3;
  67777. //>>excludeEnd("ctx");
  67778. $3=$recv($4).__eq("bar"._identityHash());
  67779. self._deny_($3);
  67780. return self;
  67781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67782. }, function($ctx1) {$ctx1.fill(self,"testIdentityHash",{},$globals.StringTest)});
  67783. //>>excludeEnd("ctx");
  67784. },
  67785. //>>excludeStart("ide", pragmas.excludeIdeData);
  67786. args: [],
  67787. source: "testIdentityHash\x0a\x09self assert: 'foo' identityHash equals: 'foo' identityHash.\x0a\x09self deny: ('foo' identityHash = 'bar' identityHash)",
  67788. referencedClasses: [],
  67789. //>>excludeEnd("ide");
  67790. messageSends: ["assert:equals:", "identityHash", "deny:", "="]
  67791. }),
  67792. $globals.StringTest);
  67793. $core.addMethod(
  67794. $core.method({
  67795. selector: "testIncludesSubString",
  67796. protocol: 'tests',
  67797. fn: function (){
  67798. var self=this;
  67799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67800. return $core.withContext(function($ctx1) {
  67801. //>>excludeEnd("ctx");
  67802. var $1;
  67803. $1="amber"._includesSubString_("ber");
  67804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67805. $ctx1.sendIdx["includesSubString:"]=1;
  67806. //>>excludeEnd("ctx");
  67807. self._assert_($1);
  67808. self._deny_("amber"._includesSubString_("zork"));
  67809. return self;
  67810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67811. }, function($ctx1) {$ctx1.fill(self,"testIncludesSubString",{},$globals.StringTest)});
  67812. //>>excludeEnd("ctx");
  67813. },
  67814. //>>excludeStart("ide", pragmas.excludeIdeData);
  67815. args: [],
  67816. source: "testIncludesSubString\x0a\x09self assert: ('amber' includesSubString: 'ber').\x0a\x09self deny: ('amber' includesSubString: 'zork').",
  67817. referencedClasses: [],
  67818. //>>excludeEnd("ide");
  67819. messageSends: ["assert:", "includesSubString:", "deny:"]
  67820. }),
  67821. $globals.StringTest);
  67822. $core.addMethod(
  67823. $core.method({
  67824. selector: "testIndexOfStartingAtWithNull",
  67825. protocol: 'tests',
  67826. fn: function (){
  67827. var self=this;
  67828. return self;
  67829. },
  67830. //>>excludeStart("ide", pragmas.excludeIdeData);
  67831. args: [],
  67832. source: "testIndexOfStartingAtWithNull\x0a\x09\x22String cannot hold JS null\x22",
  67833. referencedClasses: [],
  67834. //>>excludeEnd("ide");
  67835. messageSends: []
  67836. }),
  67837. $globals.StringTest);
  67838. $core.addMethod(
  67839. $core.method({
  67840. selector: "testIndexOfWithNull",
  67841. protocol: 'tests',
  67842. fn: function (){
  67843. var self=this;
  67844. return self;
  67845. },
  67846. //>>excludeStart("ide", pragmas.excludeIdeData);
  67847. args: [],
  67848. source: "testIndexOfWithNull\x0a\x09\x22String cannot hold JS null\x22",
  67849. referencedClasses: [],
  67850. //>>excludeEnd("ide");
  67851. messageSends: []
  67852. }),
  67853. $globals.StringTest);
  67854. $core.addMethod(
  67855. $core.method({
  67856. selector: "testIsVowel",
  67857. protocol: 'tests',
  67858. fn: function (){
  67859. var self=this;
  67860. var vowel,consonant;
  67861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67862. return $core.withContext(function($ctx1) {
  67863. //>>excludeEnd("ctx");
  67864. var $1;
  67865. vowel="u";
  67866. consonant="z";
  67867. $1=$recv(vowel)._isVowel();
  67868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67869. $ctx1.sendIdx["isVowel"]=1;
  67870. //>>excludeEnd("ctx");
  67871. self._assert_equals_($1,true);
  67872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67873. $ctx1.sendIdx["assert:equals:"]=1;
  67874. //>>excludeEnd("ctx");
  67875. self._assert_equals_($recv(consonant)._isVowel(),false);
  67876. return self;
  67877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67878. }, function($ctx1) {$ctx1.fill(self,"testIsVowel",{vowel:vowel,consonant:consonant},$globals.StringTest)});
  67879. //>>excludeEnd("ctx");
  67880. },
  67881. //>>excludeStart("ide", pragmas.excludeIdeData);
  67882. args: [],
  67883. 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",
  67884. referencedClasses: [],
  67885. //>>excludeEnd("ide");
  67886. messageSends: ["assert:equals:", "isVowel"]
  67887. }),
  67888. $globals.StringTest);
  67889. $core.addMethod(
  67890. $core.method({
  67891. selector: "testJoin",
  67892. protocol: 'tests',
  67893. fn: function (){
  67894. var self=this;
  67895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67896. return $core.withContext(function($ctx1) {
  67897. //>>excludeEnd("ctx");
  67898. self._assert_equals_(","._join_(["hello", "world"]),"hello,world");
  67899. return self;
  67900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67901. }, function($ctx1) {$ctx1.fill(self,"testJoin",{},$globals.StringTest)});
  67902. //>>excludeEnd("ctx");
  67903. },
  67904. //>>excludeStart("ide", pragmas.excludeIdeData);
  67905. args: [],
  67906. source: "testJoin\x0a\x09self assert: (',' join: #('hello' 'world')) equals: 'hello,world'",
  67907. referencedClasses: [],
  67908. //>>excludeEnd("ide");
  67909. messageSends: ["assert:equals:", "join:"]
  67910. }),
  67911. $globals.StringTest);
  67912. $core.addMethod(
  67913. $core.method({
  67914. selector: "testRemoveAll",
  67915. protocol: 'tests',
  67916. fn: function (){
  67917. var self=this;
  67918. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  67919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67920. return $core.withContext(function($ctx1) {
  67921. //>>excludeEnd("ctx");
  67922. self._should_raise_((function(){
  67923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67924. return $core.withContext(function($ctx2) {
  67925. //>>excludeEnd("ctx");
  67926. return $recv(self._collection())._removeAll();
  67927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67928. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  67929. //>>excludeEnd("ctx");
  67930. }),$Error());
  67931. return self;
  67932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67933. }, function($ctx1) {$ctx1.fill(self,"testRemoveAll",{},$globals.StringTest)});
  67934. //>>excludeEnd("ctx");
  67935. },
  67936. //>>excludeStart("ide", pragmas.excludeIdeData);
  67937. args: [],
  67938. source: "testRemoveAll\x0a\x09self should: [ self collection removeAll ] raise: Error",
  67939. referencedClasses: ["Error"],
  67940. //>>excludeEnd("ide");
  67941. messageSends: ["should:raise:", "removeAll", "collection"]
  67942. }),
  67943. $globals.StringTest);
  67944. $core.addMethod(
  67945. $core.method({
  67946. selector: "testReversed",
  67947. protocol: 'tests',
  67948. fn: function (){
  67949. var self=this;
  67950. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67951. return $core.withContext(function($ctx1) {
  67952. //>>excludeEnd("ctx");
  67953. self._assert_equals_("jackiechan"._reversed(),"nahceikcaj");
  67954. return self;
  67955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67956. }, function($ctx1) {$ctx1.fill(self,"testReversed",{},$globals.StringTest)});
  67957. //>>excludeEnd("ctx");
  67958. },
  67959. //>>excludeStart("ide", pragmas.excludeIdeData);
  67960. args: [],
  67961. source: "testReversed\x0a\x09self assert: 'jackiechan' reversed equals: 'nahceikcaj'.",
  67962. referencedClasses: [],
  67963. //>>excludeEnd("ide");
  67964. messageSends: ["assert:equals:", "reversed"]
  67965. }),
  67966. $globals.StringTest);
  67967. $core.addMethod(
  67968. $core.method({
  67969. selector: "testStreamContents",
  67970. protocol: 'tests',
  67971. fn: function (){
  67972. var self=this;
  67973. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  67974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67975. return $core.withContext(function($ctx1) {
  67976. //>>excludeEnd("ctx");
  67977. var $1;
  67978. self._assert_equals_($recv($String())._streamContents_((function(aStream){
  67979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67980. return $core.withContext(function($ctx2) {
  67981. //>>excludeEnd("ctx");
  67982. $recv(aStream)._nextPutAll_("hello");
  67983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67984. $ctx2.sendIdx["nextPutAll:"]=1;
  67985. //>>excludeEnd("ctx");
  67986. $recv(aStream)._space();
  67987. $1=$recv(aStream)._nextPutAll_("world");
  67988. return $1;
  67989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67990. }, function($ctx2) {$ctx2.fillBlock({aStream:aStream},$ctx1,1)});
  67991. //>>excludeEnd("ctx");
  67992. })),"hello world");
  67993. return self;
  67994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67995. }, function($ctx1) {$ctx1.fill(self,"testStreamContents",{},$globals.StringTest)});
  67996. //>>excludeEnd("ctx");
  67997. },
  67998. //>>excludeStart("ide", pragmas.excludeIdeData);
  67999. args: [],
  68000. 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'",
  68001. referencedClasses: ["String"],
  68002. //>>excludeEnd("ide");
  68003. messageSends: ["assert:equals:", "streamContents:", "nextPutAll:", "space"]
  68004. }),
  68005. $globals.StringTest);
  68006. $core.addMethod(
  68007. $core.method({
  68008. selector: "testSubStrings",
  68009. protocol: 'tests',
  68010. fn: function (){
  68011. var self=this;
  68012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68013. return $core.withContext(function($ctx1) {
  68014. //>>excludeEnd("ctx");
  68015. self._assert_equals_("jackiechan"._subStrings_("ie"),["jack", "chan"]);
  68016. return self;
  68017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68018. }, function($ctx1) {$ctx1.fill(self,"testSubStrings",{},$globals.StringTest)});
  68019. //>>excludeEnd("ctx");
  68020. },
  68021. //>>excludeStart("ide", pragmas.excludeIdeData);
  68022. args: [],
  68023. source: "testSubStrings\x0a\x09self assert: ('jackiechan' subStrings: 'ie') equals: #( 'jack' 'chan' ).",
  68024. referencedClasses: [],
  68025. //>>excludeEnd("ide");
  68026. messageSends: ["assert:equals:", "subStrings:"]
  68027. }),
  68028. $globals.StringTest);
  68029. $core.addMethod(
  68030. $core.method({
  68031. selector: "testTrim",
  68032. protocol: 'tests',
  68033. fn: function (){
  68034. var self=this;
  68035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68036. return $core.withContext(function($ctx1) {
  68037. //>>excludeEnd("ctx");
  68038. self._assert_equals_(" jackie"._trimLeft(),"jackie");
  68039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68040. $ctx1.sendIdx["assert:equals:"]=1;
  68041. //>>excludeEnd("ctx");
  68042. self._assert_equals_("jackie "._trimRight(),"jackie");
  68043. return self;
  68044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68045. }, function($ctx1) {$ctx1.fill(self,"testTrim",{},$globals.StringTest)});
  68046. //>>excludeEnd("ctx");
  68047. },
  68048. //>>excludeStart("ide", pragmas.excludeIdeData);
  68049. args: [],
  68050. source: "testTrim\x0a\x09self assert: ' jackie' trimLeft equals: 'jackie'.\x0a\x09self assert: 'jackie ' trimRight equals: 'jackie'.",
  68051. referencedClasses: [],
  68052. //>>excludeEnd("ide");
  68053. messageSends: ["assert:equals:", "trimLeft", "trimRight"]
  68054. }),
  68055. $globals.StringTest);
  68056. $core.addMethod(
  68057. $core.method({
  68058. selector: "testValue",
  68059. protocol: 'tests',
  68060. fn: function (){
  68061. var self=this;
  68062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68063. return $core.withContext(function($ctx1) {
  68064. //>>excludeEnd("ctx");
  68065. self._assert_equals_("asString"._value_((1)),"1");
  68066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68067. $ctx1.sendIdx["assert:equals:"]=1;
  68068. //>>excludeEnd("ctx");
  68069. self._assert_equals_([(1), (2), (3)]._collect_("asString"),["1", "2", "3"]);
  68070. return self;
  68071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68072. }, function($ctx1) {$ctx1.fill(self,"testValue",{},$globals.StringTest)});
  68073. //>>excludeEnd("ctx");
  68074. },
  68075. //>>excludeStart("ide", pragmas.excludeIdeData);
  68076. args: [],
  68077. 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')",
  68078. referencedClasses: [],
  68079. //>>excludeEnd("ide");
  68080. messageSends: ["assert:equals:", "value:", "collect:"]
  68081. }),
  68082. $globals.StringTest);
  68083. $core.addMethod(
  68084. $core.method({
  68085. selector: "collectionClass",
  68086. protocol: 'fixture',
  68087. fn: function (){
  68088. var self=this;
  68089. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  68090. return $String();
  68091. },
  68092. //>>excludeStart("ide", pragmas.excludeIdeData);
  68093. args: [],
  68094. source: "collectionClass\x0a\x09^ String",
  68095. referencedClasses: ["String"],
  68096. //>>excludeEnd("ide");
  68097. messageSends: []
  68098. }),
  68099. $globals.StringTest.klass);
  68100. $core.addClass('SetTest', $globals.CollectionTest, [], 'Kernel-Tests');
  68101. $core.addMethod(
  68102. $core.method({
  68103. selector: "collection",
  68104. protocol: 'fixture',
  68105. fn: function (){
  68106. var self=this;
  68107. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  68108. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  68109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68110. return $core.withContext(function($ctx1) {
  68111. //>>excludeEnd("ctx");
  68112. var $2,$3,$1;
  68113. $2=$recv($Set())._new();
  68114. $recv($2)._add_($Smalltalk());
  68115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68116. $ctx1.sendIdx["add:"]=1;
  68117. //>>excludeEnd("ctx");
  68118. $recv($2)._add_(nil);
  68119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68120. $ctx1.sendIdx["add:"]=2;
  68121. //>>excludeEnd("ctx");
  68122. $recv($2)._add_((3).__at((3)));
  68123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68124. $ctx1.sendIdx["add:"]=3;
  68125. //>>excludeEnd("ctx");
  68126. $recv($2)._add_(false);
  68127. $3=$recv($2)._yourself();
  68128. $1=$3;
  68129. return $1;
  68130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68131. }, function($ctx1) {$ctx1.fill(self,"collection",{},$globals.SetTest)});
  68132. //>>excludeEnd("ctx");
  68133. },
  68134. //>>excludeStart("ide", pragmas.excludeIdeData);
  68135. args: [],
  68136. 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",
  68137. referencedClasses: ["Set", "Smalltalk"],
  68138. //>>excludeEnd("ide");
  68139. messageSends: ["add:", "new", "@", "yourself"]
  68140. }),
  68141. $globals.SetTest);
  68142. $core.addMethod(
  68143. $core.method({
  68144. selector: "collectionOfPrintStrings",
  68145. protocol: 'fixture',
  68146. fn: function (){
  68147. var self=this;
  68148. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  68149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68150. return $core.withContext(function($ctx1) {
  68151. //>>excludeEnd("ctx");
  68152. var $2,$3,$1;
  68153. $2=$recv($Set())._new();
  68154. $recv($2)._add_("a SmalltalkImage");
  68155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68156. $ctx1.sendIdx["add:"]=1;
  68157. //>>excludeEnd("ctx");
  68158. $recv($2)._add_("nil");
  68159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68160. $ctx1.sendIdx["add:"]=2;
  68161. //>>excludeEnd("ctx");
  68162. $recv($2)._add_("3@3");
  68163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68164. $ctx1.sendIdx["add:"]=3;
  68165. //>>excludeEnd("ctx");
  68166. $recv($2)._add_("false");
  68167. $3=$recv($2)._yourself();
  68168. $1=$3;
  68169. return $1;
  68170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68171. }, function($ctx1) {$ctx1.fill(self,"collectionOfPrintStrings",{},$globals.SetTest)});
  68172. //>>excludeEnd("ctx");
  68173. },
  68174. //>>excludeStart("ide", pragmas.excludeIdeData);
  68175. args: [],
  68176. 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",
  68177. referencedClasses: ["Set"],
  68178. //>>excludeEnd("ide");
  68179. messageSends: ["add:", "new", "yourself"]
  68180. }),
  68181. $globals.SetTest);
  68182. $core.addMethod(
  68183. $core.method({
  68184. selector: "collectionSize",
  68185. protocol: 'fixture',
  68186. fn: function (){
  68187. var self=this;
  68188. return (4);
  68189. },
  68190. //>>excludeStart("ide", pragmas.excludeIdeData);
  68191. args: [],
  68192. source: "collectionSize\x0a\x09^ 4",
  68193. referencedClasses: [],
  68194. //>>excludeEnd("ide");
  68195. messageSends: []
  68196. }),
  68197. $globals.SetTest);
  68198. $core.addMethod(
  68199. $core.method({
  68200. selector: "collectionWithDuplicates",
  68201. protocol: 'fixture',
  68202. fn: function (){
  68203. var self=this;
  68204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68205. return $core.withContext(function($ctx1) {
  68206. //>>excludeEnd("ctx");
  68207. var $2,$3,$1;
  68208. $2=self._collection();
  68209. $recv($2)._add_((0));
  68210. $3=$recv($2)._yourself();
  68211. $1=$3;
  68212. return $1;
  68213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68214. }, function($ctx1) {$ctx1.fill(self,"collectionWithDuplicates",{},$globals.SetTest)});
  68215. //>>excludeEnd("ctx");
  68216. },
  68217. //>>excludeStart("ide", pragmas.excludeIdeData);
  68218. args: [],
  68219. source: "collectionWithDuplicates\x0a\x09\x22Set has no duplicates\x22\x0a\x09^ self collection add: 0; yourself",
  68220. referencedClasses: [],
  68221. //>>excludeEnd("ide");
  68222. messageSends: ["add:", "collection", "yourself"]
  68223. }),
  68224. $globals.SetTest);
  68225. $core.addMethod(
  68226. $core.method({
  68227. selector: "collectionWithNewValue",
  68228. protocol: 'fixture',
  68229. fn: function (){
  68230. var self=this;
  68231. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  68232. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  68233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68234. return $core.withContext(function($ctx1) {
  68235. //>>excludeEnd("ctx");
  68236. var $2,$3,$1;
  68237. $2=$recv($Set())._new();
  68238. $recv($2)._add_($Smalltalk());
  68239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68240. $ctx1.sendIdx["add:"]=1;
  68241. //>>excludeEnd("ctx");
  68242. $recv($2)._add_(nil);
  68243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68244. $ctx1.sendIdx["add:"]=2;
  68245. //>>excludeEnd("ctx");
  68246. $recv($2)._add_((3).__at((3)));
  68247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68248. $ctx1.sendIdx["add:"]=3;
  68249. //>>excludeEnd("ctx");
  68250. $recv($2)._add_("N");
  68251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68252. $ctx1.sendIdx["add:"]=4;
  68253. //>>excludeEnd("ctx");
  68254. $recv($2)._add_(false);
  68255. $3=$recv($2)._yourself();
  68256. $1=$3;
  68257. return $1;
  68258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68259. }, function($ctx1) {$ctx1.fill(self,"collectionWithNewValue",{},$globals.SetTest)});
  68260. //>>excludeEnd("ctx");
  68261. },
  68262. //>>excludeStart("ide", pragmas.excludeIdeData);
  68263. args: [],
  68264. 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",
  68265. referencedClasses: ["Set", "Smalltalk"],
  68266. //>>excludeEnd("ide");
  68267. messageSends: ["add:", "new", "@", "yourself"]
  68268. }),
  68269. $globals.SetTest);
  68270. $core.addMethod(
  68271. $core.method({
  68272. selector: "testAddAll",
  68273. protocol: 'tests',
  68274. fn: function (){
  68275. var self=this;
  68276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68277. return $core.withContext(function($ctx1) {
  68278. //>>excludeEnd("ctx");
  68279. var $2,$3,$4,$5,$1,$6,$8,$9,$10,$11,$7,$12,$14,$15,$13;
  68280. (
  68281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68282. $ctx1.supercall = true,
  68283. //>>excludeEnd("ctx");
  68284. $globals.SetTest.superclass.fn.prototype._testAddAll.apply($recv(self), []));
  68285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68286. $ctx1.supercall = false;
  68287. //>>excludeEnd("ctx");;
  68288. $2=self._collection();
  68289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68290. $ctx1.sendIdx["collection"]=1;
  68291. //>>excludeEnd("ctx");
  68292. $3=$2;
  68293. $4=self._collection();
  68294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68295. $ctx1.sendIdx["collection"]=2;
  68296. //>>excludeEnd("ctx");
  68297. $recv($3)._addAll_($4);
  68298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68299. $ctx1.sendIdx["addAll:"]=1;
  68300. //>>excludeEnd("ctx");
  68301. $5=$recv($2)._yourself();
  68302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68303. $ctx1.sendIdx["yourself"]=1;
  68304. //>>excludeEnd("ctx");
  68305. $1=$5;
  68306. $6=self._collection();
  68307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68308. $ctx1.sendIdx["collection"]=3;
  68309. //>>excludeEnd("ctx");
  68310. self._assert_equals_($1,$6);
  68311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68312. $ctx1.sendIdx["assert:equals:"]=1;
  68313. //>>excludeEnd("ctx");
  68314. $8=self._collection();
  68315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68316. $ctx1.sendIdx["collection"]=4;
  68317. //>>excludeEnd("ctx");
  68318. $9=$8;
  68319. $10=self._collectionWithNewValue();
  68320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68321. $ctx1.sendIdx["collectionWithNewValue"]=1;
  68322. //>>excludeEnd("ctx");
  68323. $recv($9)._addAll_($10);
  68324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68325. $ctx1.sendIdx["addAll:"]=2;
  68326. //>>excludeEnd("ctx");
  68327. $11=$recv($8)._yourself();
  68328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68329. $ctx1.sendIdx["yourself"]=2;
  68330. //>>excludeEnd("ctx");
  68331. $7=$11;
  68332. $12=self._collectionWithNewValue();
  68333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68334. $ctx1.sendIdx["collectionWithNewValue"]=2;
  68335. //>>excludeEnd("ctx");
  68336. self._assert_equals_($7,$12);
  68337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68338. $ctx1.sendIdx["assert:equals:"]=2;
  68339. //>>excludeEnd("ctx");
  68340. $14=self._collectionWithNewValue();
  68341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68342. $ctx1.sendIdx["collectionWithNewValue"]=3;
  68343. //>>excludeEnd("ctx");
  68344. $recv($14)._addAll_(self._collection());
  68345. $15=$recv($14)._yourself();
  68346. $13=$15;
  68347. self._assert_equals_($13,self._collectionWithNewValue());
  68348. return self;
  68349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68350. }, function($ctx1) {$ctx1.fill(self,"testAddAll",{},$globals.SetTest)});
  68351. //>>excludeEnd("ctx");
  68352. },
  68353. //>>excludeStart("ide", pragmas.excludeIdeData);
  68354. args: [],
  68355. 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",
  68356. referencedClasses: [],
  68357. //>>excludeEnd("ide");
  68358. messageSends: ["testAddAll", "assert:equals:", "addAll:", "collection", "yourself", "collectionWithNewValue"]
  68359. }),
  68360. $globals.SetTest);
  68361. $core.addMethod(
  68362. $core.method({
  68363. selector: "testAddRemove",
  68364. protocol: 'tests',
  68365. fn: function (){
  68366. var self=this;
  68367. var set;
  68368. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  68369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68370. return $core.withContext(function($ctx1) {
  68371. //>>excludeEnd("ctx");
  68372. var $1,$2;
  68373. set=$recv($Set())._new();
  68374. self._assert_($recv(set)._isEmpty());
  68375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68376. $ctx1.sendIdx["assert:"]=1;
  68377. //>>excludeEnd("ctx");
  68378. $recv(set)._add_((3));
  68379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68380. $ctx1.sendIdx["add:"]=1;
  68381. //>>excludeEnd("ctx");
  68382. $1=$recv(set)._includes_((3));
  68383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68384. $ctx1.sendIdx["includes:"]=1;
  68385. //>>excludeEnd("ctx");
  68386. self._assert_($1);
  68387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68388. $ctx1.sendIdx["assert:"]=2;
  68389. //>>excludeEnd("ctx");
  68390. $recv(set)._add_((5));
  68391. $2=$recv(set)._includes_((5));
  68392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68393. $ctx1.sendIdx["includes:"]=2;
  68394. //>>excludeEnd("ctx");
  68395. self._assert_($2);
  68396. $recv(set)._remove_((3));
  68397. self._deny_($recv(set)._includes_((3)));
  68398. return self;
  68399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68400. }, function($ctx1) {$ctx1.fill(self,"testAddRemove",{set:set},$globals.SetTest)});
  68401. //>>excludeEnd("ctx");
  68402. },
  68403. //>>excludeStart("ide", pragmas.excludeIdeData);
  68404. args: [],
  68405. 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)",
  68406. referencedClasses: ["Set"],
  68407. //>>excludeEnd("ide");
  68408. messageSends: ["new", "assert:", "isEmpty", "add:", "includes:", "remove:", "deny:"]
  68409. }),
  68410. $globals.SetTest);
  68411. $core.addMethod(
  68412. $core.method({
  68413. selector: "testAt",
  68414. protocol: 'tests',
  68415. fn: function (){
  68416. var self=this;
  68417. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  68418. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  68419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68420. return $core.withContext(function($ctx1) {
  68421. //>>excludeEnd("ctx");
  68422. self._should_raise_((function(){
  68423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68424. return $core.withContext(function($ctx2) {
  68425. //>>excludeEnd("ctx");
  68426. return $recv($recv($Set())._new())._at_put_((1),(2));
  68427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68428. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68429. //>>excludeEnd("ctx");
  68430. }),$Error());
  68431. return self;
  68432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68433. }, function($ctx1) {$ctx1.fill(self,"testAt",{},$globals.SetTest)});
  68434. //>>excludeEnd("ctx");
  68435. },
  68436. //>>excludeStart("ide", pragmas.excludeIdeData);
  68437. args: [],
  68438. source: "testAt\x0a\x09self should: [ Set new at: 1 put: 2 ] raise: Error",
  68439. referencedClasses: ["Set", "Error"],
  68440. //>>excludeEnd("ide");
  68441. messageSends: ["should:raise:", "at:put:", "new"]
  68442. }),
  68443. $globals.SetTest);
  68444. $core.addMethod(
  68445. $core.method({
  68446. selector: "testCollect",
  68447. protocol: 'tests',
  68448. fn: function (){
  68449. var self=this;
  68450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68451. return $core.withContext(function($ctx1) {
  68452. //>>excludeEnd("ctx");
  68453. var $2,$1;
  68454. (
  68455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68456. $ctx1.supercall = true,
  68457. //>>excludeEnd("ctx");
  68458. $globals.SetTest.superclass.fn.prototype._testCollect.apply($recv(self), []));
  68459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68460. $ctx1.supercall = false;
  68461. //>>excludeEnd("ctx");;
  68462. $2=[(5), (6), (8)]._asSet();
  68463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68464. $ctx1.sendIdx["asSet"]=1;
  68465. //>>excludeEnd("ctx");
  68466. $1=$recv($2)._collect_((function(x){
  68467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68468. return $core.withContext(function($ctx2) {
  68469. //>>excludeEnd("ctx");
  68470. return $recv(x).__backslash_backslash((3));
  68471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68472. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  68473. //>>excludeEnd("ctx");
  68474. }));
  68475. self._assert_equals_($1,[(0), (2)]._asSet());
  68476. return self;
  68477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68478. }, function($ctx1) {$ctx1.fill(self,"testCollect",{},$globals.SetTest)});
  68479. //>>excludeEnd("ctx");
  68480. },
  68481. //>>excludeStart("ide", pragmas.excludeIdeData);
  68482. args: [],
  68483. source: "testCollect\x0a\x09super testCollect.\x0a\x09self assert: (#(5 6 8) asSet collect: [ :x | x \x5c\x5c 3 ]) equals: #(0 2) asSet",
  68484. referencedClasses: [],
  68485. //>>excludeEnd("ide");
  68486. messageSends: ["testCollect", "assert:equals:", "collect:", "asSet", "\x5c\x5c"]
  68487. }),
  68488. $globals.SetTest);
  68489. $core.addMethod(
  68490. $core.method({
  68491. selector: "testComma",
  68492. protocol: 'tests',
  68493. fn: function (){
  68494. var self=this;
  68495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68496. return $core.withContext(function($ctx1) {
  68497. //>>excludeEnd("ctx");
  68498. var $2,$3,$1,$4,$6,$7,$5,$8,$10,$9;
  68499. (
  68500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68501. $ctx1.supercall = true,
  68502. //>>excludeEnd("ctx");
  68503. $globals.SetTest.superclass.fn.prototype._testComma.apply($recv(self), []));
  68504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68505. $ctx1.supercall = false;
  68506. //>>excludeEnd("ctx");;
  68507. $2=self._collection();
  68508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68509. $ctx1.sendIdx["collection"]=1;
  68510. //>>excludeEnd("ctx");
  68511. $3=self._collection();
  68512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68513. $ctx1.sendIdx["collection"]=2;
  68514. //>>excludeEnd("ctx");
  68515. $1=$recv($2).__comma($3);
  68516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68517. $ctx1.sendIdx[","]=1;
  68518. //>>excludeEnd("ctx");
  68519. $4=self._collection();
  68520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68521. $ctx1.sendIdx["collection"]=3;
  68522. //>>excludeEnd("ctx");
  68523. self._assert_equals_($1,$4);
  68524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68525. $ctx1.sendIdx["assert:equals:"]=1;
  68526. //>>excludeEnd("ctx");
  68527. $6=self._collection();
  68528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68529. $ctx1.sendIdx["collection"]=4;
  68530. //>>excludeEnd("ctx");
  68531. $7=self._collectionWithNewValue();
  68532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68533. $ctx1.sendIdx["collectionWithNewValue"]=1;
  68534. //>>excludeEnd("ctx");
  68535. $5=$recv($6).__comma($7);
  68536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68537. $ctx1.sendIdx[","]=2;
  68538. //>>excludeEnd("ctx");
  68539. $8=self._collectionWithNewValue();
  68540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68541. $ctx1.sendIdx["collectionWithNewValue"]=2;
  68542. //>>excludeEnd("ctx");
  68543. self._assert_equals_($5,$8);
  68544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68545. $ctx1.sendIdx["assert:equals:"]=2;
  68546. //>>excludeEnd("ctx");
  68547. $10=self._collectionWithNewValue();
  68548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68549. $ctx1.sendIdx["collectionWithNewValue"]=3;
  68550. //>>excludeEnd("ctx");
  68551. $9=$recv($10).__comma(self._collection());
  68552. self._assert_equals_($9,self._collectionWithNewValue());
  68553. return self;
  68554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68555. }, function($ctx1) {$ctx1.fill(self,"testComma",{},$globals.SetTest)});
  68556. //>>excludeEnd("ctx");
  68557. },
  68558. //>>excludeStart("ide", pragmas.excludeIdeData);
  68559. args: [],
  68560. 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",
  68561. referencedClasses: [],
  68562. //>>excludeEnd("ide");
  68563. messageSends: ["testComma", "assert:equals:", ",", "collection", "collectionWithNewValue"]
  68564. }),
  68565. $globals.SetTest);
  68566. $core.addMethod(
  68567. $core.method({
  68568. selector: "testComparing",
  68569. protocol: 'tests',
  68570. fn: function (){
  68571. var self=this;
  68572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68573. return $core.withContext(function($ctx1) {
  68574. //>>excludeEnd("ctx");
  68575. var $1,$2,$3,$4,$6,$7,$5,$9,$8;
  68576. $1=[(0), (2)]._asSet();
  68577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68578. $ctx1.sendIdx["asSet"]=1;
  68579. //>>excludeEnd("ctx");
  68580. $2=[(0), (2)]._asSet();
  68581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68582. $ctx1.sendIdx["asSet"]=2;
  68583. //>>excludeEnd("ctx");
  68584. self._assert_equals_($1,$2);
  68585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68586. $ctx1.sendIdx["assert:equals:"]=1;
  68587. //>>excludeEnd("ctx");
  68588. $3=[(2), (0)]._asSet();
  68589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68590. $ctx1.sendIdx["asSet"]=3;
  68591. //>>excludeEnd("ctx");
  68592. $4=[(0), (2)]._asSet();
  68593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68594. $ctx1.sendIdx["asSet"]=4;
  68595. //>>excludeEnd("ctx");
  68596. self._assert_equals_($3,$4);
  68597. $6=[(0), (2), (3)]._asSet();
  68598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68599. $ctx1.sendIdx["asSet"]=5;
  68600. //>>excludeEnd("ctx");
  68601. $7=[(0), (2)]._asSet();
  68602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68603. $ctx1.sendIdx["asSet"]=6;
  68604. //>>excludeEnd("ctx");
  68605. $5=$recv($6).__eq($7);
  68606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68607. $ctx1.sendIdx["="]=1;
  68608. //>>excludeEnd("ctx");
  68609. self._deny_($5);
  68610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68611. $ctx1.sendIdx["deny:"]=1;
  68612. //>>excludeEnd("ctx");
  68613. $9=[(1), (2)]._asSet();
  68614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68615. $ctx1.sendIdx["asSet"]=7;
  68616. //>>excludeEnd("ctx");
  68617. $8=$recv($9).__eq([(0), (2)]._asSet());
  68618. self._deny_($8);
  68619. return self;
  68620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68621. }, function($ctx1) {$ctx1.fill(self,"testComparing",{},$globals.SetTest)});
  68622. //>>excludeEnd("ctx");
  68623. },
  68624. //>>excludeStart("ide", pragmas.excludeIdeData);
  68625. args: [],
  68626. 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",
  68627. referencedClasses: [],
  68628. //>>excludeEnd("ide");
  68629. messageSends: ["assert:equals:", "asSet", "deny:", "="]
  68630. }),
  68631. $globals.SetTest);
  68632. $core.addMethod(
  68633. $core.method({
  68634. selector: "testPrintString",
  68635. protocol: 'tests',
  68636. fn: function (){
  68637. var self=this;
  68638. var set;
  68639. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  68640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68641. return $core.withContext(function($ctx1) {
  68642. //>>excludeEnd("ctx");
  68643. var $1,$2,$3,$4,$5,$6,$7,$8,$9;
  68644. set=$recv($Set())._new();
  68645. $1=$recv(set)._printString();
  68646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68647. $ctx1.sendIdx["printString"]=1;
  68648. //>>excludeEnd("ctx");
  68649. self._assert_equals_($1,"a Set ()");
  68650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68651. $ctx1.sendIdx["assert:equals:"]=1;
  68652. //>>excludeEnd("ctx");
  68653. $2=set;
  68654. $recv($2)._add_((1));
  68655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68656. $ctx1.sendIdx["add:"]=1;
  68657. //>>excludeEnd("ctx");
  68658. $3=$recv($2)._add_((3));
  68659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68660. $ctx1.sendIdx["add:"]=2;
  68661. //>>excludeEnd("ctx");
  68662. $4=$recv(set)._printString();
  68663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68664. $ctx1.sendIdx["printString"]=2;
  68665. //>>excludeEnd("ctx");
  68666. self._assert_equals_($4,"a Set (1 3)");
  68667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68668. $ctx1.sendIdx["assert:equals:"]=2;
  68669. //>>excludeEnd("ctx");
  68670. $recv(set)._add_("foo");
  68671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68672. $ctx1.sendIdx["add:"]=3;
  68673. //>>excludeEnd("ctx");
  68674. $5=$recv(set)._printString();
  68675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68676. $ctx1.sendIdx["printString"]=3;
  68677. //>>excludeEnd("ctx");
  68678. self._assert_equals_($5,"a Set (1 3 'foo')");
  68679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68680. $ctx1.sendIdx["assert:equals:"]=3;
  68681. //>>excludeEnd("ctx");
  68682. $6=set;
  68683. $recv($6)._remove_((1));
  68684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68685. $ctx1.sendIdx["remove:"]=1;
  68686. //>>excludeEnd("ctx");
  68687. $7=$recv($6)._remove_((3));
  68688. $8=$recv(set)._printString();
  68689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68690. $ctx1.sendIdx["printString"]=4;
  68691. //>>excludeEnd("ctx");
  68692. self._assert_equals_($8,"a Set ('foo')");
  68693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68694. $ctx1.sendIdx["assert:equals:"]=4;
  68695. //>>excludeEnd("ctx");
  68696. $recv(set)._add_((3));
  68697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68698. $ctx1.sendIdx["add:"]=4;
  68699. //>>excludeEnd("ctx");
  68700. $9=$recv(set)._printString();
  68701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68702. $ctx1.sendIdx["printString"]=5;
  68703. //>>excludeEnd("ctx");
  68704. self._assert_equals_($9,"a Set (3 'foo')");
  68705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68706. $ctx1.sendIdx["assert:equals:"]=5;
  68707. //>>excludeEnd("ctx");
  68708. $recv(set)._add_((3));
  68709. self._assert_equals_($recv(set)._printString(),"a Set (3 'foo')");
  68710. return self;
  68711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68712. }, function($ctx1) {$ctx1.fill(self,"testPrintString",{set:set},$globals.SetTest)});
  68713. //>>excludeEnd("ctx");
  68714. },
  68715. //>>excludeStart("ide", pragmas.excludeIdeData);
  68716. args: [],
  68717. 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'')'",
  68718. referencedClasses: ["Set"],
  68719. //>>excludeEnd("ide");
  68720. messageSends: ["new", "assert:equals:", "printString", "add:", "remove:"]
  68721. }),
  68722. $globals.SetTest);
  68723. $core.addMethod(
  68724. $core.method({
  68725. selector: "testUnboxedObjects",
  68726. protocol: 'tests',
  68727. fn: function (){
  68728. var self=this;
  68729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68730. return $core.withContext(function($ctx1) {
  68731. //>>excludeEnd("ctx");
  68732. var $4,$3,$2,$1;
  68733. $4="foo"._yourself();
  68734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68735. $ctx1.sendIdx["yourself"]=1;
  68736. //>>excludeEnd("ctx");
  68737. $3=[$4,"foo"._yourself()];
  68738. $2=$recv($3)._asSet();
  68739. $1=$recv($2)._asArray();
  68740. self._assert_equals_($1,["foo"]);
  68741. return self;
  68742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68743. }, function($ctx1) {$ctx1.fill(self,"testUnboxedObjects",{},$globals.SetTest)});
  68744. //>>excludeEnd("ctx");
  68745. },
  68746. //>>excludeStart("ide", pragmas.excludeIdeData);
  68747. args: [],
  68748. source: "testUnboxedObjects\x0a\x09self assert: {'foo' yourself. 'foo' yourself} asSet asArray equals: #('foo')",
  68749. referencedClasses: [],
  68750. //>>excludeEnd("ide");
  68751. messageSends: ["assert:equals:", "asArray", "asSet", "yourself"]
  68752. }),
  68753. $globals.SetTest);
  68754. $core.addMethod(
  68755. $core.method({
  68756. selector: "testUnicity",
  68757. protocol: 'tests',
  68758. fn: function (){
  68759. var self=this;
  68760. var set;
  68761. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  68762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68763. return $core.withContext(function($ctx1) {
  68764. //>>excludeEnd("ctx");
  68765. var $1;
  68766. set=$recv($Set())._new();
  68767. $recv(set)._add_((21));
  68768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68769. $ctx1.sendIdx["add:"]=1;
  68770. //>>excludeEnd("ctx");
  68771. $recv(set)._add_("hello");
  68772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68773. $ctx1.sendIdx["add:"]=2;
  68774. //>>excludeEnd("ctx");
  68775. $recv(set)._add_((21));
  68776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68777. $ctx1.sendIdx["add:"]=3;
  68778. //>>excludeEnd("ctx");
  68779. $1=$recv(set)._size();
  68780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68781. $ctx1.sendIdx["size"]=1;
  68782. //>>excludeEnd("ctx");
  68783. self._assert_equals_($1,(2));
  68784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68785. $ctx1.sendIdx["assert:equals:"]=1;
  68786. //>>excludeEnd("ctx");
  68787. $recv(set)._add_("hello");
  68788. self._assert_equals_($recv(set)._size(),(2));
  68789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68790. $ctx1.sendIdx["assert:equals:"]=2;
  68791. //>>excludeEnd("ctx");
  68792. self._assert_equals_($recv(set)._asArray(),[(21), "hello"]);
  68793. return self;
  68794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68795. }, function($ctx1) {$ctx1.fill(self,"testUnicity",{set:set},$globals.SetTest)});
  68796. //>>excludeEnd("ctx");
  68797. },
  68798. //>>excludeStart("ide", pragmas.excludeIdeData);
  68799. args: [],
  68800. 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')",
  68801. referencedClasses: ["Set"],
  68802. //>>excludeEnd("ide");
  68803. messageSends: ["new", "add:", "assert:equals:", "size", "asArray"]
  68804. }),
  68805. $globals.SetTest);
  68806. $core.addMethod(
  68807. $core.method({
  68808. selector: "collectionClass",
  68809. protocol: 'fixture',
  68810. fn: function (){
  68811. var self=this;
  68812. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  68813. return $Set();
  68814. },
  68815. //>>excludeStart("ide", pragmas.excludeIdeData);
  68816. args: [],
  68817. source: "collectionClass\x0a\x09^ Set",
  68818. referencedClasses: ["Set"],
  68819. //>>excludeEnd("ide");
  68820. messageSends: []
  68821. }),
  68822. $globals.SetTest.klass);
  68823. $core.addClass('ConsoleTranscriptTest', $globals.TestCase, [], 'Kernel-Tests');
  68824. $core.addMethod(
  68825. $core.method({
  68826. selector: "testShow",
  68827. protocol: 'tests',
  68828. fn: function (){
  68829. var self=this;
  68830. var originalTranscript;
  68831. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  68832. function $ConsoleTranscript(){return $globals.ConsoleTranscript||(typeof ConsoleTranscript=="undefined"?nil:ConsoleTranscript)}
  68833. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  68834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68835. return $core.withContext(function($ctx1) {
  68836. //>>excludeEnd("ctx");
  68837. originalTranscript=$recv($Transcript())._current();
  68838. $recv($Transcript())._register_($recv($ConsoleTranscript())._new());
  68839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68840. $ctx1.sendIdx["register:"]=1;
  68841. //>>excludeEnd("ctx");
  68842. self._shouldnt_raise_((function(){
  68843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68844. return $core.withContext(function($ctx2) {
  68845. //>>excludeEnd("ctx");
  68846. return $recv($Transcript())._show_("Hello console!");
  68847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68848. $ctx2.sendIdx["show:"]=1;
  68849. //>>excludeEnd("ctx");
  68850. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68851. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68852. //>>excludeEnd("ctx");
  68853. }),$Error());
  68854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68855. $ctx1.sendIdx["shouldnt:raise:"]=1;
  68856. //>>excludeEnd("ctx");
  68857. self._shouldnt_raise_((function(){
  68858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68859. return $core.withContext(function($ctx2) {
  68860. //>>excludeEnd("ctx");
  68861. return $recv($Transcript())._show_(console);
  68862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68863. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  68864. //>>excludeEnd("ctx");
  68865. }),$Error());
  68866. $recv($Transcript())._register_(originalTranscript);
  68867. return self;
  68868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68869. }, function($ctx1) {$ctx1.fill(self,"testShow",{originalTranscript:originalTranscript},$globals.ConsoleTranscriptTest)});
  68870. //>>excludeEnd("ctx");
  68871. },
  68872. //>>excludeStart("ide", pragmas.excludeIdeData);
  68873. args: [],
  68874. 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.",
  68875. referencedClasses: ["Transcript", "ConsoleTranscript", "Error"],
  68876. //>>excludeEnd("ide");
  68877. messageSends: ["current", "register:", "new", "shouldnt:raise:", "show:"]
  68878. }),
  68879. $globals.ConsoleTranscriptTest);
  68880. $core.addClass('JSObjectProxyTest', $globals.TestCase, [], 'Kernel-Tests');
  68881. $core.addMethod(
  68882. $core.method({
  68883. selector: "jsNull",
  68884. protocol: 'accessing',
  68885. fn: function (){
  68886. var self=this;
  68887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68888. return $core.withContext(function($ctx1) {
  68889. //>>excludeEnd("ctx");
  68890. return null;
  68891. return self;
  68892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68893. }, function($ctx1) {$ctx1.fill(self,"jsNull",{},$globals.JSObjectProxyTest)});
  68894. //>>excludeEnd("ctx");
  68895. },
  68896. //>>excludeStart("ide", pragmas.excludeIdeData);
  68897. args: [],
  68898. source: "jsNull\x0a\x09<return null>",
  68899. referencedClasses: [],
  68900. //>>excludeEnd("ide");
  68901. messageSends: []
  68902. }),
  68903. $globals.JSObjectProxyTest);
  68904. $core.addMethod(
  68905. $core.method({
  68906. selector: "jsObject",
  68907. protocol: 'accessing',
  68908. fn: function (){
  68909. var self=this;
  68910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68911. return $core.withContext(function($ctx1) {
  68912. //>>excludeEnd("ctx");
  68913. return {a: 1, b: function() {return 2;}, c: function(object) {return object;}, d: '', 'e': null, 'f': void 0};
  68914. return self;
  68915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68916. }, function($ctx1) {$ctx1.fill(self,"jsObject",{},$globals.JSObjectProxyTest)});
  68917. //>>excludeEnd("ctx");
  68918. },
  68919. //>>excludeStart("ide", pragmas.excludeIdeData);
  68920. args: [],
  68921. source: "jsObject\x0a\x09<return {a: 1, b: function() {return 2;}, c: function(object) {return object;}, d: '', 'e': null, 'f': void 0}>",
  68922. referencedClasses: [],
  68923. //>>excludeEnd("ide");
  68924. messageSends: []
  68925. }),
  68926. $globals.JSObjectProxyTest);
  68927. $core.addMethod(
  68928. $core.method({
  68929. selector: "jsUndefined",
  68930. protocol: 'accessing',
  68931. fn: function (){
  68932. var self=this;
  68933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68934. return $core.withContext(function($ctx1) {
  68935. //>>excludeEnd("ctx");
  68936. return;
  68937. return self;
  68938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68939. }, function($ctx1) {$ctx1.fill(self,"jsUndefined",{},$globals.JSObjectProxyTest)});
  68940. //>>excludeEnd("ctx");
  68941. },
  68942. //>>excludeStart("ide", pragmas.excludeIdeData);
  68943. args: [],
  68944. source: "jsUndefined\x0a\x09<return>",
  68945. referencedClasses: [],
  68946. //>>excludeEnd("ide");
  68947. messageSends: []
  68948. }),
  68949. $globals.JSObjectProxyTest);
  68950. $core.addMethod(
  68951. $core.method({
  68952. selector: "testAtIfAbsent",
  68953. protocol: 'tests',
  68954. fn: function (){
  68955. var self=this;
  68956. var testObject;
  68957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68958. return $core.withContext(function($ctx1) {
  68959. //>>excludeEnd("ctx");
  68960. var $1,$2,$3;
  68961. testObject=self._jsObject();
  68962. $1=$recv(testObject)._at_ifAbsent_("abc",(function(){
  68963. return "Property does not exist";
  68964. }));
  68965. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68966. $ctx1.sendIdx["at:ifAbsent:"]=1;
  68967. //>>excludeEnd("ctx");
  68968. self._assert_equals_($1,"Property does not exist");
  68969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68970. $ctx1.sendIdx["assert:equals:"]=1;
  68971. //>>excludeEnd("ctx");
  68972. $2=$recv(testObject)._at_ifAbsent_("e",(function(){
  68973. return "Property does not exist";
  68974. }));
  68975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68976. $ctx1.sendIdx["at:ifAbsent:"]=2;
  68977. //>>excludeEnd("ctx");
  68978. self._assert_equals_($2,nil);
  68979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68980. $ctx1.sendIdx["assert:equals:"]=2;
  68981. //>>excludeEnd("ctx");
  68982. $3=$recv(testObject)._at_ifAbsent_("a",(function(){
  68983. return "Property does not exist";
  68984. }));
  68985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68986. $ctx1.sendIdx["at:ifAbsent:"]=3;
  68987. //>>excludeEnd("ctx");
  68988. self._assert_equals_($3,(1));
  68989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68990. $ctx1.sendIdx["assert:equals:"]=3;
  68991. //>>excludeEnd("ctx");
  68992. self._assert_equals_($recv(testObject)._at_ifAbsent_("f",(function(){
  68993. return "Property does not exist";
  68994. })),nil);
  68995. return self;
  68996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68997. }, function($ctx1) {$ctx1.fill(self,"testAtIfAbsent",{testObject:testObject},$globals.JSObjectProxyTest)});
  68998. //>>excludeEnd("ctx");
  68999. },
  69000. //>>excludeStart("ide", pragmas.excludeIdeData);
  69001. args: [],
  69002. 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.",
  69003. referencedClasses: [],
  69004. //>>excludeEnd("ide");
  69005. messageSends: ["jsObject", "assert:equals:", "at:ifAbsent:"]
  69006. }),
  69007. $globals.JSObjectProxyTest);
  69008. $core.addMethod(
  69009. $core.method({
  69010. selector: "testAtIfPresent",
  69011. protocol: 'tests',
  69012. fn: function (){
  69013. var self=this;
  69014. var testObject;
  69015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69016. return $core.withContext(function($ctx1) {
  69017. //>>excludeEnd("ctx");
  69018. var $2,$1,$4,$3,$6,$5;
  69019. testObject=self._jsObject();
  69020. $1=$recv(testObject)._at_ifPresent_("abc",(function(x){
  69021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69022. return $core.withContext(function($ctx2) {
  69023. //>>excludeEnd("ctx");
  69024. $2=$recv(x)._asString();
  69025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69026. $ctx2.sendIdx["asString"]=1;
  69027. //>>excludeEnd("ctx");
  69028. return "hello ".__comma($2);
  69029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69030. $ctx2.sendIdx[","]=1;
  69031. //>>excludeEnd("ctx");
  69032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69033. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  69034. //>>excludeEnd("ctx");
  69035. }));
  69036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69037. $ctx1.sendIdx["at:ifPresent:"]=1;
  69038. //>>excludeEnd("ctx");
  69039. self._assert_equals_($1,nil);
  69040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69041. $ctx1.sendIdx["assert:equals:"]=1;
  69042. //>>excludeEnd("ctx");
  69043. $3=$recv(testObject)._at_ifPresent_("e",(function(x){
  69044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69045. return $core.withContext(function($ctx2) {
  69046. //>>excludeEnd("ctx");
  69047. $4=$recv(x)._asString();
  69048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69049. $ctx2.sendIdx["asString"]=2;
  69050. //>>excludeEnd("ctx");
  69051. return "hello ".__comma($4);
  69052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69053. $ctx2.sendIdx[","]=2;
  69054. //>>excludeEnd("ctx");
  69055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69056. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,2)});
  69057. //>>excludeEnd("ctx");
  69058. }));
  69059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69060. $ctx1.sendIdx["at:ifPresent:"]=2;
  69061. //>>excludeEnd("ctx");
  69062. self._assert_equals_($3,"hello nil");
  69063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69064. $ctx1.sendIdx["assert:equals:"]=2;
  69065. //>>excludeEnd("ctx");
  69066. $5=$recv(testObject)._at_ifPresent_("a",(function(x){
  69067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69068. return $core.withContext(function($ctx2) {
  69069. //>>excludeEnd("ctx");
  69070. $6=$recv(x)._asString();
  69071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69072. $ctx2.sendIdx["asString"]=3;
  69073. //>>excludeEnd("ctx");
  69074. return "hello ".__comma($6);
  69075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69076. $ctx2.sendIdx[","]=3;
  69077. //>>excludeEnd("ctx");
  69078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69079. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,3)});
  69080. //>>excludeEnd("ctx");
  69081. }));
  69082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69083. $ctx1.sendIdx["at:ifPresent:"]=3;
  69084. //>>excludeEnd("ctx");
  69085. self._assert_equals_($5,"hello 1");
  69086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69087. $ctx1.sendIdx["assert:equals:"]=3;
  69088. //>>excludeEnd("ctx");
  69089. self._assert_equals_($recv(testObject)._at_ifPresent_("f",(function(x){
  69090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69091. return $core.withContext(function($ctx2) {
  69092. //>>excludeEnd("ctx");
  69093. return "hello ".__comma($recv(x)._asString());
  69094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69095. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,4)});
  69096. //>>excludeEnd("ctx");
  69097. })),"hello nil");
  69098. return self;
  69099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69100. }, function($ctx1) {$ctx1.fill(self,"testAtIfPresent",{testObject:testObject},$globals.JSObjectProxyTest)});
  69101. //>>excludeEnd("ctx");
  69102. },
  69103. //>>excludeStart("ide", pragmas.excludeIdeData);
  69104. args: [],
  69105. 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'.",
  69106. referencedClasses: [],
  69107. //>>excludeEnd("ide");
  69108. messageSends: ["jsObject", "assert:equals:", "at:ifPresent:", ",", "asString"]
  69109. }),
  69110. $globals.JSObjectProxyTest);
  69111. $core.addMethod(
  69112. $core.method({
  69113. selector: "testAtIfPresentIfAbsent",
  69114. protocol: 'tests',
  69115. fn: function (){
  69116. var self=this;
  69117. var testObject;
  69118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69119. return $core.withContext(function($ctx1) {
  69120. //>>excludeEnd("ctx");
  69121. var $2,$1,$4,$3,$6,$5;
  69122. testObject=self._jsObject();
  69123. $1=$recv(testObject)._at_ifPresent_ifAbsent_("abc",(function(x){
  69124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69125. return $core.withContext(function($ctx2) {
  69126. //>>excludeEnd("ctx");
  69127. $2=$recv(x)._asString();
  69128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69129. $ctx2.sendIdx["asString"]=1;
  69130. //>>excludeEnd("ctx");
  69131. return "hello ".__comma($2);
  69132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69133. $ctx2.sendIdx[","]=1;
  69134. //>>excludeEnd("ctx");
  69135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69136. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  69137. //>>excludeEnd("ctx");
  69138. }),(function(){
  69139. return "not present";
  69140. }));
  69141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69142. $ctx1.sendIdx["at:ifPresent:ifAbsent:"]=1;
  69143. //>>excludeEnd("ctx");
  69144. self._assert_equals_($1,"not present");
  69145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69146. $ctx1.sendIdx["assert:equals:"]=1;
  69147. //>>excludeEnd("ctx");
  69148. $3=$recv(testObject)._at_ifPresent_ifAbsent_("e",(function(x){
  69149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69150. return $core.withContext(function($ctx2) {
  69151. //>>excludeEnd("ctx");
  69152. $4=$recv(x)._asString();
  69153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69154. $ctx2.sendIdx["asString"]=2;
  69155. //>>excludeEnd("ctx");
  69156. return "hello ".__comma($4);
  69157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69158. $ctx2.sendIdx[","]=2;
  69159. //>>excludeEnd("ctx");
  69160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69161. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,3)});
  69162. //>>excludeEnd("ctx");
  69163. }),(function(){
  69164. return "not present";
  69165. }));
  69166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69167. $ctx1.sendIdx["at:ifPresent:ifAbsent:"]=2;
  69168. //>>excludeEnd("ctx");
  69169. self._assert_equals_($3,"hello nil");
  69170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69171. $ctx1.sendIdx["assert:equals:"]=2;
  69172. //>>excludeEnd("ctx");
  69173. $5=$recv(testObject)._at_ifPresent_ifAbsent_("a",(function(x){
  69174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69175. return $core.withContext(function($ctx2) {
  69176. //>>excludeEnd("ctx");
  69177. $6=$recv(x)._asString();
  69178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69179. $ctx2.sendIdx["asString"]=3;
  69180. //>>excludeEnd("ctx");
  69181. return "hello ".__comma($6);
  69182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69183. $ctx2.sendIdx[","]=3;
  69184. //>>excludeEnd("ctx");
  69185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69186. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,5)});
  69187. //>>excludeEnd("ctx");
  69188. }),(function(){
  69189. return "not present";
  69190. }));
  69191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69192. $ctx1.sendIdx["at:ifPresent:ifAbsent:"]=3;
  69193. //>>excludeEnd("ctx");
  69194. self._assert_equals_($5,"hello 1");
  69195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69196. $ctx1.sendIdx["assert:equals:"]=3;
  69197. //>>excludeEnd("ctx");
  69198. self._assert_equals_($recv(testObject)._at_ifPresent_ifAbsent_("f",(function(x){
  69199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69200. return $core.withContext(function($ctx2) {
  69201. //>>excludeEnd("ctx");
  69202. return "hello ".__comma($recv(x)._asString());
  69203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69204. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,7)});
  69205. //>>excludeEnd("ctx");
  69206. }),(function(){
  69207. return "not present";
  69208. })),"hello nil");
  69209. return self;
  69210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69211. }, function($ctx1) {$ctx1.fill(self,"testAtIfPresentIfAbsent",{testObject:testObject},$globals.JSObjectProxyTest)});
  69212. //>>excludeEnd("ctx");
  69213. },
  69214. //>>excludeStart("ide", pragmas.excludeIdeData);
  69215. args: [],
  69216. 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'.",
  69217. referencedClasses: [],
  69218. //>>excludeEnd("ide");
  69219. messageSends: ["jsObject", "assert:equals:", "at:ifPresent:ifAbsent:", ",", "asString"]
  69220. }),
  69221. $globals.JSObjectProxyTest);
  69222. $core.addMethod(
  69223. $core.method({
  69224. selector: "testAtPut",
  69225. protocol: 'tests',
  69226. fn: function (){
  69227. var self=this;
  69228. var testObject;
  69229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69230. return $core.withContext(function($ctx1) {
  69231. //>>excludeEnd("ctx");
  69232. var $2,$1;
  69233. testObject=self._jsObject();
  69234. $2=$recv(testObject)._at_("abc");
  69235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69236. $ctx1.sendIdx["at:"]=1;
  69237. //>>excludeEnd("ctx");
  69238. $1=$recv($2).__tild_eq("xyz");
  69239. self._assert_($1);
  69240. self._assert_equals_($recv(testObject)._at_put_("abc","xyz"),"xyz");
  69241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69242. $ctx1.sendIdx["assert:equals:"]=1;
  69243. //>>excludeEnd("ctx");
  69244. self._assert_equals_($recv(testObject)._at_("abc"),"xyz");
  69245. return self;
  69246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69247. }, function($ctx1) {$ctx1.fill(self,"testAtPut",{testObject:testObject},$globals.JSObjectProxyTest)});
  69248. //>>excludeEnd("ctx");
  69249. },
  69250. //>>excludeStart("ide", pragmas.excludeIdeData);
  69251. args: [],
  69252. 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'",
  69253. referencedClasses: [],
  69254. //>>excludeEnd("ide");
  69255. messageSends: ["jsObject", "assert:", "~=", "at:", "assert:equals:", "at:put:"]
  69256. }),
  69257. $globals.JSObjectProxyTest);
  69258. $core.addMethod(
  69259. $core.method({
  69260. selector: "testComparison",
  69261. protocol: 'tests',
  69262. fn: function (){
  69263. var self=this;
  69264. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  69265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69266. return $core.withContext(function($ctx1) {
  69267. //>>excludeEnd("ctx");
  69268. var $1,$2;
  69269. self._assert_equals_($recv([console,(2)])._indexOf_(console),(1));
  69270. $1=$recv(console).__eq(console);
  69271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69272. $ctx1.sendIdx["="]=1;
  69273. //>>excludeEnd("ctx");
  69274. self._assert_($1);
  69275. $2=$recv(console).__eq($recv($Object())._new());
  69276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69277. $ctx1.sendIdx["="]=2;
  69278. //>>excludeEnd("ctx");
  69279. self._deny_($2);
  69280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69281. $ctx1.sendIdx["deny:"]=1;
  69282. //>>excludeEnd("ctx");
  69283. self._deny_($recv(console).__eq(self._jsObject()));
  69284. return self;
  69285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69286. }, function($ctx1) {$ctx1.fill(self,"testComparison",{},$globals.JSObjectProxyTest)});
  69287. //>>excludeEnd("ctx");
  69288. },
  69289. //>>excludeStart("ide", pragmas.excludeIdeData);
  69290. args: [],
  69291. 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",
  69292. referencedClasses: ["Object"],
  69293. //>>excludeEnd("ide");
  69294. messageSends: ["assert:equals:", "indexOf:", "assert:", "=", "deny:", "new", "jsObject"]
  69295. }),
  69296. $globals.JSObjectProxyTest);
  69297. $core.addMethod(
  69298. $core.method({
  69299. selector: "testDNU",
  69300. protocol: 'tests',
  69301. fn: function (){
  69302. var self=this;
  69303. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  69304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69305. return $core.withContext(function($ctx1) {
  69306. //>>excludeEnd("ctx");
  69307. self._should_raise_((function(){
  69308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69309. return $core.withContext(function($ctx2) {
  69310. //>>excludeEnd("ctx");
  69311. return $recv(self._jsObject())._foo();
  69312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69313. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69314. //>>excludeEnd("ctx");
  69315. }),$MessageNotUnderstood());
  69316. return self;
  69317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69318. }, function($ctx1) {$ctx1.fill(self,"testDNU",{},$globals.JSObjectProxyTest)});
  69319. //>>excludeEnd("ctx");
  69320. },
  69321. //>>excludeStart("ide", pragmas.excludeIdeData);
  69322. args: [],
  69323. source: "testDNU\x0a\x09self should: [ self jsObject foo ] raise: MessageNotUnderstood",
  69324. referencedClasses: ["MessageNotUnderstood"],
  69325. //>>excludeEnd("ide");
  69326. messageSends: ["should:raise:", "foo", "jsObject"]
  69327. }),
  69328. $globals.JSObjectProxyTest);
  69329. $core.addMethod(
  69330. $core.method({
  69331. selector: "testDNURegression1057",
  69332. protocol: 'tests',
  69333. fn: function (){
  69334. var self=this;
  69335. var jsObject;
  69336. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  69337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69338. return $core.withContext(function($ctx1) {
  69339. //>>excludeEnd("ctx");
  69340. var $1;
  69341. jsObject=[];
  69342. $recv(jsObject)._basicAt_put_("allowJavaScriptCalls",true);
  69343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69344. $ctx1.sendIdx["basicAt:put:"]=1;
  69345. //>>excludeEnd("ctx");
  69346. $recv(jsObject)._basicAt_put_("foo",(3));
  69347. self._shouldnt_raise_((function(){
  69348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69349. return $core.withContext(function($ctx2) {
  69350. //>>excludeEnd("ctx");
  69351. return $recv(jsObject)._foo();
  69352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69353. $ctx2.sendIdx["foo"]=1;
  69354. //>>excludeEnd("ctx");
  69355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69356. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69357. //>>excludeEnd("ctx");
  69358. }),$Error());
  69359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69360. $ctx1.sendIdx["shouldnt:raise:"]=1;
  69361. //>>excludeEnd("ctx");
  69362. $1=$recv(jsObject)._foo();
  69363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69364. $ctx1.sendIdx["foo"]=2;
  69365. //>>excludeEnd("ctx");
  69366. self._assert_equals_($1,(3));
  69367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69368. $ctx1.sendIdx["assert:equals:"]=1;
  69369. //>>excludeEnd("ctx");
  69370. self._shouldnt_raise_((function(){
  69371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69372. return $core.withContext(function($ctx2) {
  69373. //>>excludeEnd("ctx");
  69374. return $recv(jsObject)._foo_((4));
  69375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69376. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  69377. //>>excludeEnd("ctx");
  69378. }),$Error());
  69379. self._assert_equals_($recv(jsObject)._foo(),(4));
  69380. return self;
  69381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69382. }, function($ctx1) {$ctx1.fill(self,"testDNURegression1057",{jsObject:jsObject},$globals.JSObjectProxyTest)});
  69383. //>>excludeEnd("ctx");
  69384. },
  69385. //>>excludeStart("ide", pragmas.excludeIdeData);
  69386. args: [],
  69387. 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",
  69388. referencedClasses: ["Error"],
  69389. //>>excludeEnd("ide");
  69390. messageSends: ["basicAt:put:", "shouldnt:raise:", "foo", "assert:equals:", "foo:"]
  69391. }),
  69392. $globals.JSObjectProxyTest);
  69393. $core.addMethod(
  69394. $core.method({
  69395. selector: "testDNURegression1059",
  69396. protocol: 'tests',
  69397. fn: function (){
  69398. var self=this;
  69399. var jsObject;
  69400. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  69401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69402. return $core.withContext(function($ctx1) {
  69403. //>>excludeEnd("ctx");
  69404. jsObject=[];
  69405. $recv(jsObject)._basicAt_put_("allowJavaScriptCalls",true);
  69406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69407. $ctx1.sendIdx["basicAt:put:"]=1;
  69408. //>>excludeEnd("ctx");
  69409. $recv(jsObject)._basicAt_put_("x",(3));
  69410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69411. $ctx1.sendIdx["basicAt:put:"]=2;
  69412. //>>excludeEnd("ctx");
  69413. $recv(jsObject)._basicAt_put_("x:",(function(){
  69414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69415. return $core.withContext(function($ctx2) {
  69416. //>>excludeEnd("ctx");
  69417. return self._error();
  69418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69419. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69420. //>>excludeEnd("ctx");
  69421. }));
  69422. self._shouldnt_raise_((function(){
  69423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69424. return $core.withContext(function($ctx2) {
  69425. //>>excludeEnd("ctx");
  69426. return $recv(jsObject)._x_((4));
  69427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69428. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  69429. //>>excludeEnd("ctx");
  69430. }),$Error());
  69431. self._assert_equals_($recv(jsObject)._x(),(4));
  69432. return self;
  69433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69434. }, function($ctx1) {$ctx1.fill(self,"testDNURegression1059",{jsObject:jsObject},$globals.JSObjectProxyTest)});
  69435. //>>excludeEnd("ctx");
  69436. },
  69437. //>>excludeStart("ide", pragmas.excludeIdeData);
  69438. args: [],
  69439. 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",
  69440. referencedClasses: ["Error"],
  69441. //>>excludeEnd("ide");
  69442. messageSends: ["basicAt:put:", "error", "shouldnt:raise:", "x:", "assert:equals:", "x"]
  69443. }),
  69444. $globals.JSObjectProxyTest);
  69445. $core.addMethod(
  69446. $core.method({
  69447. selector: "testDNURegression1062",
  69448. protocol: 'tests',
  69449. fn: function (){
  69450. var self=this;
  69451. var jsObject,stored;
  69452. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  69453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69454. return $core.withContext(function($ctx1) {
  69455. //>>excludeEnd("ctx");
  69456. jsObject=[];
  69457. $recv(jsObject)._basicAt_put_("allowJavaScriptCalls",true);
  69458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69459. $ctx1.sendIdx["basicAt:put:"]=1;
  69460. //>>excludeEnd("ctx");
  69461. $recv(jsObject)._basicAt_put_("x",(function(v){
  69462. stored=v;
  69463. return stored;
  69464. }));
  69465. self._shouldnt_raise_((function(){
  69466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69467. return $core.withContext(function($ctx2) {
  69468. //>>excludeEnd("ctx");
  69469. return $recv(jsObject)._x_((4));
  69470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69471. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  69472. //>>excludeEnd("ctx");
  69473. }),$Error());
  69474. self._assert_equals_(stored,(4));
  69475. return self;
  69476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69477. }, function($ctx1) {$ctx1.fill(self,"testDNURegression1062",{jsObject:jsObject,stored:stored},$globals.JSObjectProxyTest)});
  69478. //>>excludeEnd("ctx");
  69479. },
  69480. //>>excludeStart("ide", pragmas.excludeIdeData);
  69481. args: [],
  69482. 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",
  69483. referencedClasses: ["Error"],
  69484. //>>excludeEnd("ide");
  69485. messageSends: ["basicAt:put:", "shouldnt:raise:", "x:", "assert:equals:"]
  69486. }),
  69487. $globals.JSObjectProxyTest);
  69488. $core.addMethod(
  69489. $core.method({
  69490. selector: "testDNUWithAllowJavaScriptCalls",
  69491. protocol: 'tests',
  69492. fn: function (){
  69493. var self=this;
  69494. var jsObject;
  69495. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  69496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69497. return $core.withContext(function($ctx1) {
  69498. //>>excludeEnd("ctx");
  69499. jsObject=[];
  69500. $recv(jsObject)._basicAt_put_("allowJavaScriptCalls",true);
  69501. self._should_raise_((function(){
  69502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69503. return $core.withContext(function($ctx2) {
  69504. //>>excludeEnd("ctx");
  69505. return $recv(jsObject)._foo();
  69506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69507. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69508. //>>excludeEnd("ctx");
  69509. }),$MessageNotUnderstood());
  69510. return self;
  69511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69512. }, function($ctx1) {$ctx1.fill(self,"testDNUWithAllowJavaScriptCalls",{jsObject:jsObject},$globals.JSObjectProxyTest)});
  69513. //>>excludeEnd("ctx");
  69514. },
  69515. //>>excludeStart("ide", pragmas.excludeIdeData);
  69516. args: [],
  69517. source: "testDNUWithAllowJavaScriptCalls\x0a\x09| jsObject |\x0a\x09jsObject := #().\x0a\x09jsObject basicAt: 'allowJavaScriptCalls' put: true.\x0a\x09self should: [ jsObject foo ] raise: MessageNotUnderstood",
  69518. referencedClasses: ["MessageNotUnderstood"],
  69519. //>>excludeEnd("ide");
  69520. messageSends: ["basicAt:put:", "should:raise:", "foo"]
  69521. }),
  69522. $globals.JSObjectProxyTest);
  69523. $core.addMethod(
  69524. $core.method({
  69525. selector: "testMessageSend",
  69526. protocol: 'tests',
  69527. fn: function (){
  69528. var self=this;
  69529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69530. return $core.withContext(function($ctx1) {
  69531. //>>excludeEnd("ctx");
  69532. var $2,$1,$4,$3;
  69533. $2=self._jsObject();
  69534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69535. $ctx1.sendIdx["jsObject"]=1;
  69536. //>>excludeEnd("ctx");
  69537. $1=$recv($2)._a();
  69538. self._assert_equals_($1,(1));
  69539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69540. $ctx1.sendIdx["assert:equals:"]=1;
  69541. //>>excludeEnd("ctx");
  69542. $4=self._jsObject();
  69543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69544. $ctx1.sendIdx["jsObject"]=2;
  69545. //>>excludeEnd("ctx");
  69546. $3=$recv($4)._b();
  69547. self._assert_equals_($3,(2));
  69548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69549. $ctx1.sendIdx["assert:equals:"]=2;
  69550. //>>excludeEnd("ctx");
  69551. self._assert_equals_($recv(self._jsObject())._c_((3)),(3));
  69552. return self;
  69553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69554. }, function($ctx1) {$ctx1.fill(self,"testMessageSend",{},$globals.JSObjectProxyTest)});
  69555. //>>excludeEnd("ctx");
  69556. },
  69557. //>>excludeStart("ide", pragmas.excludeIdeData);
  69558. args: [],
  69559. 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",
  69560. referencedClasses: [],
  69561. //>>excludeEnd("ide");
  69562. messageSends: ["assert:equals:", "a", "jsObject", "b", "c:"]
  69563. }),
  69564. $globals.JSObjectProxyTest);
  69565. $core.addMethod(
  69566. $core.method({
  69567. selector: "testMethodWithArguments",
  69568. protocol: 'tests',
  69569. fn: function (){
  69570. var self=this;
  69571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69572. return $core.withContext(function($ctx1) {
  69573. //>>excludeEnd("ctx");
  69574. self._assert_equals_($recv(self._jsObject())._c_((1)),(1));
  69575. return self;
  69576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69577. }, function($ctx1) {$ctx1.fill(self,"testMethodWithArguments",{},$globals.JSObjectProxyTest)});
  69578. //>>excludeEnd("ctx");
  69579. },
  69580. //>>excludeStart("ide", pragmas.excludeIdeData);
  69581. args: [],
  69582. source: "testMethodWithArguments\x0a\x09self assert: (self jsObject c: 1) equals: 1",
  69583. referencedClasses: [],
  69584. //>>excludeEnd("ide");
  69585. messageSends: ["assert:equals:", "c:", "jsObject"]
  69586. }),
  69587. $globals.JSObjectProxyTest);
  69588. $core.addMethod(
  69589. $core.method({
  69590. selector: "testPrinting",
  69591. protocol: 'tests',
  69592. fn: function (){
  69593. var self=this;
  69594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69595. return $core.withContext(function($ctx1) {
  69596. //>>excludeEnd("ctx");
  69597. self._assert_equals_($recv(self._jsObject())._printString(),"[object Object]");
  69598. return self;
  69599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69600. }, function($ctx1) {$ctx1.fill(self,"testPrinting",{},$globals.JSObjectProxyTest)});
  69601. //>>excludeEnd("ctx");
  69602. },
  69603. //>>excludeStart("ide", pragmas.excludeIdeData);
  69604. args: [],
  69605. source: "testPrinting\x0a\x09self assert: self jsObject printString equals: '[object Object]'",
  69606. referencedClasses: [],
  69607. //>>excludeEnd("ide");
  69608. messageSends: ["assert:equals:", "printString", "jsObject"]
  69609. }),
  69610. $globals.JSObjectProxyTest);
  69611. $core.addMethod(
  69612. $core.method({
  69613. selector: "testPropertyThatReturnsEmptyString",
  69614. protocol: 'tests',
  69615. fn: function (){
  69616. var self=this;
  69617. var object;
  69618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69619. return $core.withContext(function($ctx1) {
  69620. //>>excludeEnd("ctx");
  69621. var $1;
  69622. object=self._jsObject();
  69623. $1=$recv(object)._d();
  69624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69625. $ctx1.sendIdx["d"]=1;
  69626. //>>excludeEnd("ctx");
  69627. self._assert_equals_($1,"");
  69628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69629. $ctx1.sendIdx["assert:equals:"]=1;
  69630. //>>excludeEnd("ctx");
  69631. $recv(object)._d_("hello");
  69632. self._assert_equals_($recv(object)._d(),"hello");
  69633. return self;
  69634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69635. }, function($ctx1) {$ctx1.fill(self,"testPropertyThatReturnsEmptyString",{object:object},$globals.JSObjectProxyTest)});
  69636. //>>excludeEnd("ctx");
  69637. },
  69638. //>>excludeStart("ide", pragmas.excludeIdeData);
  69639. args: [],
  69640. 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'",
  69641. referencedClasses: [],
  69642. //>>excludeEnd("ide");
  69643. messageSends: ["jsObject", "assert:equals:", "d", "d:"]
  69644. }),
  69645. $globals.JSObjectProxyTest);
  69646. $core.addMethod(
  69647. $core.method({
  69648. selector: "testPropertyThatReturnsUndefined",
  69649. protocol: 'tests',
  69650. fn: function (){
  69651. var self=this;
  69652. var object;
  69653. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  69654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69655. return $core.withContext(function($ctx1) {
  69656. //>>excludeEnd("ctx");
  69657. object=self._jsObject();
  69658. self._shouldnt_raise_((function(){
  69659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69660. return $core.withContext(function($ctx2) {
  69661. //>>excludeEnd("ctx");
  69662. return $recv(object)._e();
  69663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69664. $ctx2.sendIdx["e"]=1;
  69665. //>>excludeEnd("ctx");
  69666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69667. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69668. //>>excludeEnd("ctx");
  69669. }),$MessageNotUnderstood());
  69670. self._assert_($recv($recv(object)._e())._isNil());
  69671. return self;
  69672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69673. }, function($ctx1) {$ctx1.fill(self,"testPropertyThatReturnsUndefined",{object:object},$globals.JSObjectProxyTest)});
  69674. //>>excludeEnd("ctx");
  69675. },
  69676. //>>excludeStart("ide", pragmas.excludeIdeData);
  69677. args: [],
  69678. source: "testPropertyThatReturnsUndefined\x0a\x09| object |\x0a\x0a\x09object := self jsObject.\x0a\x09self shouldnt: [ object e ] raise: MessageNotUnderstood.\x0a\x09self assert: object e isNil",
  69679. referencedClasses: ["MessageNotUnderstood"],
  69680. //>>excludeEnd("ide");
  69681. messageSends: ["jsObject", "shouldnt:raise:", "e", "assert:", "isNil"]
  69682. }),
  69683. $globals.JSObjectProxyTest);
  69684. $core.addMethod(
  69685. $core.method({
  69686. selector: "testSetPropertyWithFalsyValue",
  69687. protocol: 'tests',
  69688. fn: function (){
  69689. var self=this;
  69690. var jsObject;
  69691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69692. return $core.withContext(function($ctx1) {
  69693. //>>excludeEnd("ctx");
  69694. var $1,$2,$3,$4,$5;
  69695. jsObject=self._jsObject();
  69696. $1=$recv(jsObject)._a();
  69697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69698. $ctx1.sendIdx["a"]=1;
  69699. //>>excludeEnd("ctx");
  69700. self._assert_equals_($1,(1));
  69701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69702. $ctx1.sendIdx["assert:equals:"]=1;
  69703. //>>excludeEnd("ctx");
  69704. $recv(jsObject)._a_(self._jsNull());
  69705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69706. $ctx1.sendIdx["a:"]=1;
  69707. //>>excludeEnd("ctx");
  69708. $2=$recv(jsObject)._a();
  69709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69710. $ctx1.sendIdx["a"]=2;
  69711. //>>excludeEnd("ctx");
  69712. self._assert_equals_($2,nil);
  69713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69714. $ctx1.sendIdx["assert:equals:"]=2;
  69715. //>>excludeEnd("ctx");
  69716. $recv(jsObject)._a_((0));
  69717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69718. $ctx1.sendIdx["a:"]=2;
  69719. //>>excludeEnd("ctx");
  69720. $3=$recv(jsObject)._a();
  69721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69722. $ctx1.sendIdx["a"]=3;
  69723. //>>excludeEnd("ctx");
  69724. self._assert_equals_($3,(0));
  69725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69726. $ctx1.sendIdx["assert:equals:"]=3;
  69727. //>>excludeEnd("ctx");
  69728. $recv(jsObject)._a_(self._jsUndefined());
  69729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69730. $ctx1.sendIdx["a:"]=3;
  69731. //>>excludeEnd("ctx");
  69732. $4=$recv(jsObject)._a();
  69733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69734. $ctx1.sendIdx["a"]=4;
  69735. //>>excludeEnd("ctx");
  69736. self._assert_equals_($4,nil);
  69737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69738. $ctx1.sendIdx["assert:equals:"]=4;
  69739. //>>excludeEnd("ctx");
  69740. $recv(jsObject)._a_("");
  69741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69742. $ctx1.sendIdx["a:"]=4;
  69743. //>>excludeEnd("ctx");
  69744. $5=$recv(jsObject)._a();
  69745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69746. $ctx1.sendIdx["a"]=5;
  69747. //>>excludeEnd("ctx");
  69748. self._assert_equals_($5,"");
  69749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69750. $ctx1.sendIdx["assert:equals:"]=5;
  69751. //>>excludeEnd("ctx");
  69752. $recv(jsObject)._a_(false);
  69753. self._assert_equals_($recv(jsObject)._a(),false);
  69754. return self;
  69755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69756. }, function($ctx1) {$ctx1.fill(self,"testSetPropertyWithFalsyValue",{jsObject:jsObject},$globals.JSObjectProxyTest)});
  69757. //>>excludeEnd("ctx");
  69758. },
  69759. //>>excludeStart("ide", pragmas.excludeIdeData);
  69760. args: [],
  69761. 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",
  69762. referencedClasses: [],
  69763. //>>excludeEnd("ide");
  69764. messageSends: ["jsObject", "assert:equals:", "a", "a:", "jsNull", "jsUndefined"]
  69765. }),
  69766. $globals.JSObjectProxyTest);
  69767. $core.addMethod(
  69768. $core.method({
  69769. selector: "testValue",
  69770. protocol: 'tests',
  69771. fn: function (){
  69772. var self=this;
  69773. var testObject;
  69774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69775. return $core.withContext(function($ctx1) {
  69776. //>>excludeEnd("ctx");
  69777. testObject=self._jsObject();
  69778. $recv(testObject)._at_put_("value","aValue");
  69779. self._assert_equals_($recv(testObject)._value(),"aValue");
  69780. return self;
  69781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69782. }, function($ctx1) {$ctx1.fill(self,"testValue",{testObject:testObject},$globals.JSObjectProxyTest)});
  69783. //>>excludeEnd("ctx");
  69784. },
  69785. //>>excludeStart("ide", pragmas.excludeIdeData);
  69786. args: [],
  69787. source: "testValue\x0a\x09| testObject |\x0a\x09testObject := self jsObject.\x0a\x09testObject at: 'value' put: 'aValue'.\x0a\x09self assert: testObject value equals: 'aValue'",
  69788. referencedClasses: [],
  69789. //>>excludeEnd("ide");
  69790. messageSends: ["jsObject", "at:put:", "assert:equals:", "value"]
  69791. }),
  69792. $globals.JSObjectProxyTest);
  69793. $core.addMethod(
  69794. $core.method({
  69795. selector: "testYourself",
  69796. protocol: 'tests',
  69797. fn: function (){
  69798. var self=this;
  69799. var object;
  69800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69801. return $core.withContext(function($ctx1) {
  69802. //>>excludeEnd("ctx");
  69803. var $1,$2;
  69804. $1=self._jsObject();
  69805. $recv($1)._d_("test");
  69806. $2=$recv($1)._yourself();
  69807. object=$2;
  69808. self._assert_equals_($recv(object)._d(),"test");
  69809. return self;
  69810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69811. }, function($ctx1) {$ctx1.fill(self,"testYourself",{object:object},$globals.JSObjectProxyTest)});
  69812. //>>excludeEnd("ctx");
  69813. },
  69814. //>>excludeStart("ide", pragmas.excludeIdeData);
  69815. args: [],
  69816. source: "testYourself\x0a\x09| object |\x0a\x09object := self jsObject\x0a\x09\x09d: 'test';\x0a\x09\x09yourself.\x0a\x0a\x09self assert: object d equals: 'test'",
  69817. referencedClasses: [],
  69818. //>>excludeEnd("ide");
  69819. messageSends: ["d:", "jsObject", "yourself", "assert:equals:", "d"]
  69820. }),
  69821. $globals.JSObjectProxyTest);
  69822. $core.addClass('JavaScriptExceptionTest', $globals.TestCase, [], 'Kernel-Tests');
  69823. $core.addMethod(
  69824. $core.method({
  69825. selector: "testCatchingException",
  69826. protocol: 'tests',
  69827. fn: function (){
  69828. var self=this;
  69829. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  69830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69831. return $core.withContext(function($ctx1) {
  69832. //>>excludeEnd("ctx");
  69833. $recv((function(){
  69834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69835. return $core.withContext(function($ctx2) {
  69836. //>>excludeEnd("ctx");
  69837. return self._throwException();
  69838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69839. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69840. //>>excludeEnd("ctx");
  69841. }))._on_do_($Error(),(function(error){
  69842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69843. return $core.withContext(function($ctx2) {
  69844. //>>excludeEnd("ctx");
  69845. return self._assert_($recv($recv(error)._exception()).__eq("test"));
  69846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69847. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  69848. //>>excludeEnd("ctx");
  69849. }));
  69850. return self;
  69851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69852. }, function($ctx1) {$ctx1.fill(self,"testCatchingException",{},$globals.JavaScriptExceptionTest)});
  69853. //>>excludeEnd("ctx");
  69854. },
  69855. //>>excludeStart("ide", pragmas.excludeIdeData);
  69856. args: [],
  69857. source: "testCatchingException\x0a\x09[ self throwException ]\x0a\x09\x09on: Error\x0a\x09\x09do: [ :error |\x0a\x09\x09\x09self assert: error exception = 'test' ]",
  69858. referencedClasses: ["Error"],
  69859. //>>excludeEnd("ide");
  69860. messageSends: ["on:do:", "throwException", "assert:", "=", "exception"]
  69861. }),
  69862. $globals.JavaScriptExceptionTest);
  69863. $core.addMethod(
  69864. $core.method({
  69865. selector: "testRaisingException",
  69866. protocol: 'tests',
  69867. fn: function (){
  69868. var self=this;
  69869. function $JavaScriptException(){return $globals.JavaScriptException||(typeof JavaScriptException=="undefined"?nil:JavaScriptException)}
  69870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69871. return $core.withContext(function($ctx1) {
  69872. //>>excludeEnd("ctx");
  69873. self._should_raise_((function(){
  69874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69875. return $core.withContext(function($ctx2) {
  69876. //>>excludeEnd("ctx");
  69877. return self._throwException();
  69878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69879. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69880. //>>excludeEnd("ctx");
  69881. }),$JavaScriptException());
  69882. return self;
  69883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69884. }, function($ctx1) {$ctx1.fill(self,"testRaisingException",{},$globals.JavaScriptExceptionTest)});
  69885. //>>excludeEnd("ctx");
  69886. },
  69887. //>>excludeStart("ide", pragmas.excludeIdeData);
  69888. args: [],
  69889. source: "testRaisingException\x0a\x09self should: [ self throwException ] raise: JavaScriptException",
  69890. referencedClasses: ["JavaScriptException"],
  69891. //>>excludeEnd("ide");
  69892. messageSends: ["should:raise:", "throwException"]
  69893. }),
  69894. $globals.JavaScriptExceptionTest);
  69895. $core.addMethod(
  69896. $core.method({
  69897. selector: "throwException",
  69898. protocol: 'helpers',
  69899. fn: function (){
  69900. var self=this;
  69901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69902. return $core.withContext(function($ctx1) {
  69903. //>>excludeEnd("ctx");
  69904. throw 'test';
  69905. return self;
  69906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69907. }, function($ctx1) {$ctx1.fill(self,"throwException",{},$globals.JavaScriptExceptionTest)});
  69908. //>>excludeEnd("ctx");
  69909. },
  69910. //>>excludeStart("ide", pragmas.excludeIdeData);
  69911. args: [],
  69912. source: "throwException\x0a\x09<throw 'test'>",
  69913. referencedClasses: [],
  69914. //>>excludeEnd("ide");
  69915. messageSends: []
  69916. }),
  69917. $globals.JavaScriptExceptionTest);
  69918. $core.addClass('MessageSendTest', $globals.TestCase, [], 'Kernel-Tests');
  69919. $core.addMethod(
  69920. $core.method({
  69921. selector: "testValue",
  69922. protocol: 'tests',
  69923. fn: function (){
  69924. var self=this;
  69925. var messageSend;
  69926. function $MessageSend(){return $globals.MessageSend||(typeof MessageSend=="undefined"?nil:MessageSend)}
  69927. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  69928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69929. return $core.withContext(function($ctx1) {
  69930. //>>excludeEnd("ctx");
  69931. var $1,$2;
  69932. $1=$recv($MessageSend())._new();
  69933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69934. $ctx1.sendIdx["new"]=1;
  69935. //>>excludeEnd("ctx");
  69936. $recv($1)._receiver_($recv($Object())._new());
  69937. $recv($1)._selector_("asString");
  69938. $2=$recv($1)._yourself();
  69939. messageSend=$2;
  69940. self._assert_equals_($recv(messageSend)._value(),"an Object");
  69941. return self;
  69942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69943. }, function($ctx1) {$ctx1.fill(self,"testValue",{messageSend:messageSend},$globals.MessageSendTest)});
  69944. //>>excludeEnd("ctx");
  69945. },
  69946. //>>excludeStart("ide", pragmas.excludeIdeData);
  69947. args: [],
  69948. 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'",
  69949. referencedClasses: ["MessageSend", "Object"],
  69950. //>>excludeEnd("ide");
  69951. messageSends: ["receiver:", "new", "selector:", "yourself", "assert:equals:", "value"]
  69952. }),
  69953. $globals.MessageSendTest);
  69954. $core.addMethod(
  69955. $core.method({
  69956. selector: "testValueWithArguments",
  69957. protocol: 'tests',
  69958. fn: function (){
  69959. var self=this;
  69960. var messageSend;
  69961. function $MessageSend(){return $globals.MessageSend||(typeof MessageSend=="undefined"?nil:MessageSend)}
  69962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69963. return $core.withContext(function($ctx1) {
  69964. //>>excludeEnd("ctx");
  69965. var $1,$2;
  69966. $1=$recv($MessageSend())._new();
  69967. $recv($1)._receiver_((2));
  69968. $recv($1)._selector_("+");
  69969. $2=$recv($1)._yourself();
  69970. messageSend=$2;
  69971. self._assert_equals_($recv(messageSend)._value_((3)),(5));
  69972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69973. $ctx1.sendIdx["assert:equals:"]=1;
  69974. //>>excludeEnd("ctx");
  69975. self._assert_equals_($recv(messageSend)._valueWithPossibleArguments_([(4)]),(6));
  69976. return self;
  69977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69978. }, function($ctx1) {$ctx1.fill(self,"testValueWithArguments",{messageSend:messageSend},$globals.MessageSendTest)});
  69979. //>>excludeEnd("ctx");
  69980. },
  69981. //>>excludeStart("ide", pragmas.excludeIdeData);
  69982. args: [],
  69983. 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",
  69984. referencedClasses: ["MessageSend"],
  69985. //>>excludeEnd("ide");
  69986. messageSends: ["receiver:", "new", "selector:", "yourself", "assert:equals:", "value:", "valueWithPossibleArguments:"]
  69987. }),
  69988. $globals.MessageSendTest);
  69989. $core.addClass('MethodInheritanceTest', $globals.TestCase, ['receiverTop', 'receiverMiddle', 'receiverBottom', 'method', 'performBlock'], 'Kernel-Tests');
  69990. $core.addMethod(
  69991. $core.method({
  69992. selector: "codeGeneratorClass",
  69993. protocol: 'accessing',
  69994. fn: function (){
  69995. var self=this;
  69996. function $CodeGenerator(){return $globals.CodeGenerator||(typeof CodeGenerator=="undefined"?nil:CodeGenerator)}
  69997. return $CodeGenerator();
  69998. },
  69999. //>>excludeStart("ide", pragmas.excludeIdeData);
  70000. args: [],
  70001. source: "codeGeneratorClass\x0a\x09^ CodeGenerator",
  70002. referencedClasses: ["CodeGenerator"],
  70003. //>>excludeEnd("ide");
  70004. messageSends: []
  70005. }),
  70006. $globals.MethodInheritanceTest);
  70007. $core.addMethod(
  70008. $core.method({
  70009. selector: "compiler",
  70010. protocol: 'factory',
  70011. fn: function (){
  70012. var self=this;
  70013. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  70014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70015. return $core.withContext(function($ctx1) {
  70016. //>>excludeEnd("ctx");
  70017. var $2,$3,$1;
  70018. $2=$recv($Compiler())._new();
  70019. $recv($2)._codeGeneratorClass_(self._codeGeneratorClass());
  70020. $3=$recv($2)._yourself();
  70021. $1=$3;
  70022. return $1;
  70023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70024. }, function($ctx1) {$ctx1.fill(self,"compiler",{},$globals.MethodInheritanceTest)});
  70025. //>>excludeEnd("ctx");
  70026. },
  70027. //>>excludeStart("ide", pragmas.excludeIdeData);
  70028. args: [],
  70029. source: "compiler\x0a\x09^ Compiler new\x0a\x09\x09codeGeneratorClass: self codeGeneratorClass;\x0a\x09\x09yourself",
  70030. referencedClasses: ["Compiler"],
  70031. //>>excludeEnd("ide");
  70032. messageSends: ["codeGeneratorClass:", "new", "codeGeneratorClass", "yourself"]
  70033. }),
  70034. $globals.MethodInheritanceTest);
  70035. $core.addMethod(
  70036. $core.method({
  70037. selector: "deinstallBottom",
  70038. protocol: 'testing',
  70039. fn: function (){
  70040. var self=this;
  70041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70042. return $core.withContext(function($ctx1) {
  70043. //>>excludeEnd("ctx");
  70044. $recv(self._targetClassBottom())._removeCompiledMethod_(self["@method"]);
  70045. return self;
  70046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70047. }, function($ctx1) {$ctx1.fill(self,"deinstallBottom",{},$globals.MethodInheritanceTest)});
  70048. //>>excludeEnd("ctx");
  70049. },
  70050. //>>excludeStart("ide", pragmas.excludeIdeData);
  70051. args: [],
  70052. source: "deinstallBottom\x0a\x09self targetClassBottom removeCompiledMethod: method",
  70053. referencedClasses: [],
  70054. //>>excludeEnd("ide");
  70055. messageSends: ["removeCompiledMethod:", "targetClassBottom"]
  70056. }),
  70057. $globals.MethodInheritanceTest);
  70058. $core.addMethod(
  70059. $core.method({
  70060. selector: "deinstallMiddle",
  70061. protocol: 'testing',
  70062. fn: function (){
  70063. var self=this;
  70064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70065. return $core.withContext(function($ctx1) {
  70066. //>>excludeEnd("ctx");
  70067. $recv(self._targetClassMiddle())._removeCompiledMethod_(self["@method"]);
  70068. return self;
  70069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70070. }, function($ctx1) {$ctx1.fill(self,"deinstallMiddle",{},$globals.MethodInheritanceTest)});
  70071. //>>excludeEnd("ctx");
  70072. },
  70073. //>>excludeStart("ide", pragmas.excludeIdeData);
  70074. args: [],
  70075. source: "deinstallMiddle\x0a\x09self targetClassMiddle removeCompiledMethod: method",
  70076. referencedClasses: [],
  70077. //>>excludeEnd("ide");
  70078. messageSends: ["removeCompiledMethod:", "targetClassMiddle"]
  70079. }),
  70080. $globals.MethodInheritanceTest);
  70081. $core.addMethod(
  70082. $core.method({
  70083. selector: "deinstallTop",
  70084. protocol: 'testing',
  70085. fn: function (){
  70086. var self=this;
  70087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70088. return $core.withContext(function($ctx1) {
  70089. //>>excludeEnd("ctx");
  70090. $recv(self._targetClassTop())._removeCompiledMethod_(self["@method"]);
  70091. return self;
  70092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70093. }, function($ctx1) {$ctx1.fill(self,"deinstallTop",{},$globals.MethodInheritanceTest)});
  70094. //>>excludeEnd("ctx");
  70095. },
  70096. //>>excludeStart("ide", pragmas.excludeIdeData);
  70097. args: [],
  70098. source: "deinstallTop\x0a\x09self targetClassTop removeCompiledMethod: method",
  70099. referencedClasses: [],
  70100. //>>excludeEnd("ide");
  70101. messageSends: ["removeCompiledMethod:", "targetClassTop"]
  70102. }),
  70103. $globals.MethodInheritanceTest);
  70104. $core.addMethod(
  70105. $core.method({
  70106. selector: "installBottom:",
  70107. protocol: 'testing',
  70108. fn: function (aString){
  70109. var self=this;
  70110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70111. return $core.withContext(function($ctx1) {
  70112. //>>excludeEnd("ctx");
  70113. self["@method"]=$recv(self._compiler())._install_forClass_protocol_(aString,self._targetClassBottom(),"tests");
  70114. return self;
  70115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70116. }, function($ctx1) {$ctx1.fill(self,"installBottom:",{aString:aString},$globals.MethodInheritanceTest)});
  70117. //>>excludeEnd("ctx");
  70118. },
  70119. //>>excludeStart("ide", pragmas.excludeIdeData);
  70120. args: ["aString"],
  70121. source: "installBottom: aString\x0a\x09method := self compiler install: aString forClass: self targetClassBottom protocol: 'tests'",
  70122. referencedClasses: [],
  70123. //>>excludeEnd("ide");
  70124. messageSends: ["install:forClass:protocol:", "compiler", "targetClassBottom"]
  70125. }),
  70126. $globals.MethodInheritanceTest);
  70127. $core.addMethod(
  70128. $core.method({
  70129. selector: "installMiddle:",
  70130. protocol: 'testing',
  70131. fn: function (aString){
  70132. var self=this;
  70133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70134. return $core.withContext(function($ctx1) {
  70135. //>>excludeEnd("ctx");
  70136. self["@method"]=$recv(self._compiler())._install_forClass_protocol_(aString,self._targetClassMiddle(),"tests");
  70137. return self;
  70138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70139. }, function($ctx1) {$ctx1.fill(self,"installMiddle:",{aString:aString},$globals.MethodInheritanceTest)});
  70140. //>>excludeEnd("ctx");
  70141. },
  70142. //>>excludeStart("ide", pragmas.excludeIdeData);
  70143. args: ["aString"],
  70144. source: "installMiddle: aString\x0a\x09method := self compiler install: aString forClass: self targetClassMiddle protocol: 'tests'",
  70145. referencedClasses: [],
  70146. //>>excludeEnd("ide");
  70147. messageSends: ["install:forClass:protocol:", "compiler", "targetClassMiddle"]
  70148. }),
  70149. $globals.MethodInheritanceTest);
  70150. $core.addMethod(
  70151. $core.method({
  70152. selector: "installTop:",
  70153. protocol: 'testing',
  70154. fn: function (aString){
  70155. var self=this;
  70156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70157. return $core.withContext(function($ctx1) {
  70158. //>>excludeEnd("ctx");
  70159. self["@method"]=$recv(self._compiler())._install_forClass_protocol_(aString,self._targetClassTop(),"tests");
  70160. return self;
  70161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70162. }, function($ctx1) {$ctx1.fill(self,"installTop:",{aString:aString},$globals.MethodInheritanceTest)});
  70163. //>>excludeEnd("ctx");
  70164. },
  70165. //>>excludeStart("ide", pragmas.excludeIdeData);
  70166. args: ["aString"],
  70167. source: "installTop: aString\x0a\x09method := self compiler install: aString forClass: self targetClassTop protocol: 'tests'",
  70168. referencedClasses: [],
  70169. //>>excludeEnd("ide");
  70170. messageSends: ["install:forClass:protocol:", "compiler", "targetClassTop"]
  70171. }),
  70172. $globals.MethodInheritanceTest);
  70173. $core.addMethod(
  70174. $core.method({
  70175. selector: "setUp",
  70176. protocol: 'initialization',
  70177. fn: function (){
  70178. var self=this;
  70179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70180. return $core.withContext(function($ctx1) {
  70181. //>>excludeEnd("ctx");
  70182. self["@receiverTop"]=$recv(self._targetClassTop())._new();
  70183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70184. $ctx1.sendIdx["new"]=1;
  70185. //>>excludeEnd("ctx");
  70186. self["@receiverMiddle"]=$recv(self._targetClassMiddle())._new();
  70187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70188. $ctx1.sendIdx["new"]=2;
  70189. //>>excludeEnd("ctx");
  70190. self["@receiverBottom"]=$recv(self._targetClassBottom())._new();
  70191. self["@method"]=nil;
  70192. self["@performBlock"]=(function(){
  70193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70194. return $core.withContext(function($ctx2) {
  70195. //>>excludeEnd("ctx");
  70196. return self._error_("performBlock not initialized");
  70197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70198. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  70199. //>>excludeEnd("ctx");
  70200. });
  70201. return self;
  70202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70203. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.MethodInheritanceTest)});
  70204. //>>excludeEnd("ctx");
  70205. },
  70206. //>>excludeStart("ide", pragmas.excludeIdeData);
  70207. args: [],
  70208. 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' ]",
  70209. referencedClasses: [],
  70210. //>>excludeEnd("ide");
  70211. messageSends: ["new", "targetClassTop", "targetClassMiddle", "targetClassBottom", "error:"]
  70212. }),
  70213. $globals.MethodInheritanceTest);
  70214. $core.addMethod(
  70215. $core.method({
  70216. selector: "shouldMNU",
  70217. protocol: 'testing',
  70218. fn: function (){
  70219. var self=this;
  70220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70221. return $core.withContext(function($ctx1) {
  70222. //>>excludeEnd("ctx");
  70223. self._shouldMNUTop();
  70224. self._shouldMNUMiddle();
  70225. self._shouldMNUBottom();
  70226. return self;
  70227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70228. }, function($ctx1) {$ctx1.fill(self,"shouldMNU",{},$globals.MethodInheritanceTest)});
  70229. //>>excludeEnd("ctx");
  70230. },
  70231. //>>excludeStart("ide", pragmas.excludeIdeData);
  70232. args: [],
  70233. source: "shouldMNU\x0a\x09self shouldMNUTop.\x0a\x09self shouldMNUMiddle.\x0a\x09self shouldMNUBottom",
  70234. referencedClasses: [],
  70235. //>>excludeEnd("ide");
  70236. messageSends: ["shouldMNUTop", "shouldMNUMiddle", "shouldMNUBottom"]
  70237. }),
  70238. $globals.MethodInheritanceTest);
  70239. $core.addMethod(
  70240. $core.method({
  70241. selector: "shouldMNUBottom",
  70242. protocol: 'testing',
  70243. fn: function (){
  70244. var self=this;
  70245. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  70246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70247. return $core.withContext(function($ctx1) {
  70248. //>>excludeEnd("ctx");
  70249. self._should_raise_((function(){
  70250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70251. return $core.withContext(function($ctx2) {
  70252. //>>excludeEnd("ctx");
  70253. return $recv(self["@performBlock"])._value_(self["@receiverBottom"]);
  70254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70255. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  70256. //>>excludeEnd("ctx");
  70257. }),$MessageNotUnderstood());
  70258. return self;
  70259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70260. }, function($ctx1) {$ctx1.fill(self,"shouldMNUBottom",{},$globals.MethodInheritanceTest)});
  70261. //>>excludeEnd("ctx");
  70262. },
  70263. //>>excludeStart("ide", pragmas.excludeIdeData);
  70264. args: [],
  70265. source: "shouldMNUBottom\x0a\x09self should: [ performBlock value: receiverBottom ] raise: MessageNotUnderstood",
  70266. referencedClasses: ["MessageNotUnderstood"],
  70267. //>>excludeEnd("ide");
  70268. messageSends: ["should:raise:", "value:"]
  70269. }),
  70270. $globals.MethodInheritanceTest);
  70271. $core.addMethod(
  70272. $core.method({
  70273. selector: "shouldMNUMiddle",
  70274. protocol: 'testing',
  70275. fn: function (){
  70276. var self=this;
  70277. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  70278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70279. return $core.withContext(function($ctx1) {
  70280. //>>excludeEnd("ctx");
  70281. self._should_raise_((function(){
  70282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70283. return $core.withContext(function($ctx2) {
  70284. //>>excludeEnd("ctx");
  70285. return $recv(self["@performBlock"])._value_(self["@receiverMiddle"]);
  70286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70287. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  70288. //>>excludeEnd("ctx");
  70289. }),$MessageNotUnderstood());
  70290. return self;
  70291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70292. }, function($ctx1) {$ctx1.fill(self,"shouldMNUMiddle",{},$globals.MethodInheritanceTest)});
  70293. //>>excludeEnd("ctx");
  70294. },
  70295. //>>excludeStart("ide", pragmas.excludeIdeData);
  70296. args: [],
  70297. source: "shouldMNUMiddle\x0a\x09self should: [ performBlock value: receiverMiddle ] raise: MessageNotUnderstood",
  70298. referencedClasses: ["MessageNotUnderstood"],
  70299. //>>excludeEnd("ide");
  70300. messageSends: ["should:raise:", "value:"]
  70301. }),
  70302. $globals.MethodInheritanceTest);
  70303. $core.addMethod(
  70304. $core.method({
  70305. selector: "shouldMNUTop",
  70306. protocol: 'testing',
  70307. fn: function (){
  70308. var self=this;
  70309. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  70310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70311. return $core.withContext(function($ctx1) {
  70312. //>>excludeEnd("ctx");
  70313. self._should_raise_((function(){
  70314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70315. return $core.withContext(function($ctx2) {
  70316. //>>excludeEnd("ctx");
  70317. return $recv(self["@performBlock"])._value_(self["@receiverTop"]);
  70318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70319. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  70320. //>>excludeEnd("ctx");
  70321. }),$MessageNotUnderstood());
  70322. return self;
  70323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70324. }, function($ctx1) {$ctx1.fill(self,"shouldMNUTop",{},$globals.MethodInheritanceTest)});
  70325. //>>excludeEnd("ctx");
  70326. },
  70327. //>>excludeStart("ide", pragmas.excludeIdeData);
  70328. args: [],
  70329. source: "shouldMNUTop\x0a\x09self should: [ performBlock value: receiverTop ] raise: MessageNotUnderstood",
  70330. referencedClasses: ["MessageNotUnderstood"],
  70331. //>>excludeEnd("ide");
  70332. messageSends: ["should:raise:", "value:"]
  70333. }),
  70334. $globals.MethodInheritanceTest);
  70335. $core.addMethod(
  70336. $core.method({
  70337. selector: "shouldReturn:",
  70338. protocol: 'testing',
  70339. fn: function (anObject){
  70340. var self=this;
  70341. var result;
  70342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70343. return $core.withContext(function($ctx1) {
  70344. //>>excludeEnd("ctx");
  70345. result=$recv(self["@performBlock"])._value_(self["@receiverTop"]);
  70346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70347. $ctx1.sendIdx["value:"]=1;
  70348. //>>excludeEnd("ctx");
  70349. self._assert_equals_(["top",anObject],["top",result]);
  70350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70351. $ctx1.sendIdx["assert:equals:"]=1;
  70352. //>>excludeEnd("ctx");
  70353. result=$recv(self["@performBlock"])._value_(self["@receiverMiddle"]);
  70354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70355. $ctx1.sendIdx["value:"]=2;
  70356. //>>excludeEnd("ctx");
  70357. self._assert_equals_(["middle",anObject],["middle",result]);
  70358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70359. $ctx1.sendIdx["assert:equals:"]=2;
  70360. //>>excludeEnd("ctx");
  70361. result=$recv(self["@performBlock"])._value_(self["@receiverBottom"]);
  70362. self._assert_equals_(["bottom",anObject],["bottom",result]);
  70363. return self;
  70364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70365. }, function($ctx1) {$ctx1.fill(self,"shouldReturn:",{anObject:anObject,result:result},$globals.MethodInheritanceTest)});
  70366. //>>excludeEnd("ctx");
  70367. },
  70368. //>>excludeStart("ide", pragmas.excludeIdeData);
  70369. args: ["anObject"],
  70370. 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 }",
  70371. referencedClasses: [],
  70372. //>>excludeEnd("ide");
  70373. messageSends: ["value:", "assert:equals:"]
  70374. }),
  70375. $globals.MethodInheritanceTest);
  70376. $core.addMethod(
  70377. $core.method({
  70378. selector: "shouldReturn:and:and:",
  70379. protocol: 'testing',
  70380. fn: function (anObject,anObject2,anObject3){
  70381. var self=this;
  70382. var result;
  70383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70384. return $core.withContext(function($ctx1) {
  70385. //>>excludeEnd("ctx");
  70386. result=$recv(self["@performBlock"])._value_(self["@receiverTop"]);
  70387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70388. $ctx1.sendIdx["value:"]=1;
  70389. //>>excludeEnd("ctx");
  70390. self._assert_equals_(["top",anObject],["top",result]);
  70391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70392. $ctx1.sendIdx["assert:equals:"]=1;
  70393. //>>excludeEnd("ctx");
  70394. result=$recv(self["@performBlock"])._value_(self["@receiverMiddle"]);
  70395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70396. $ctx1.sendIdx["value:"]=2;
  70397. //>>excludeEnd("ctx");
  70398. self._assert_equals_(["middle",anObject2],["middle",result]);
  70399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70400. $ctx1.sendIdx["assert:equals:"]=2;
  70401. //>>excludeEnd("ctx");
  70402. result=$recv(self["@performBlock"])._value_(self["@receiverBottom"]);
  70403. self._assert_equals_(["bottom",anObject3],["bottom",result]);
  70404. return self;
  70405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70406. }, function($ctx1) {$ctx1.fill(self,"shouldReturn:and:and:",{anObject:anObject,anObject2:anObject2,anObject3:anObject3,result:result},$globals.MethodInheritanceTest)});
  70407. //>>excludeEnd("ctx");
  70408. },
  70409. //>>excludeStart("ide", pragmas.excludeIdeData);
  70410. args: ["anObject", "anObject2", "anObject3"],
  70411. 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 }",
  70412. referencedClasses: [],
  70413. //>>excludeEnd("ide");
  70414. messageSends: ["value:", "assert:equals:"]
  70415. }),
  70416. $globals.MethodInheritanceTest);
  70417. $core.addMethod(
  70418. $core.method({
  70419. selector: "targetClassBottom",
  70420. protocol: 'accessing',
  70421. fn: function (){
  70422. var self=this;
  70423. function $JavaScriptException(){return $globals.JavaScriptException||(typeof JavaScriptException=="undefined"?nil:JavaScriptException)}
  70424. return $JavaScriptException();
  70425. },
  70426. //>>excludeStart("ide", pragmas.excludeIdeData);
  70427. args: [],
  70428. source: "targetClassBottom\x0a\x09^ JavaScriptException",
  70429. referencedClasses: ["JavaScriptException"],
  70430. //>>excludeEnd("ide");
  70431. messageSends: []
  70432. }),
  70433. $globals.MethodInheritanceTest);
  70434. $core.addMethod(
  70435. $core.method({
  70436. selector: "targetClassMiddle",
  70437. protocol: 'accessing',
  70438. fn: function (){
  70439. var self=this;
  70440. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  70441. return $Error();
  70442. },
  70443. //>>excludeStart("ide", pragmas.excludeIdeData);
  70444. args: [],
  70445. source: "targetClassMiddle\x0a\x09^ Error",
  70446. referencedClasses: ["Error"],
  70447. //>>excludeEnd("ide");
  70448. messageSends: []
  70449. }),
  70450. $globals.MethodInheritanceTest);
  70451. $core.addMethod(
  70452. $core.method({
  70453. selector: "targetClassTop",
  70454. protocol: 'accessing',
  70455. fn: function (){
  70456. var self=this;
  70457. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  70458. return $Object();
  70459. },
  70460. //>>excludeStart("ide", pragmas.excludeIdeData);
  70461. args: [],
  70462. source: "targetClassTop\x0a\x09^ Object",
  70463. referencedClasses: ["Object"],
  70464. //>>excludeEnd("ide");
  70465. messageSends: []
  70466. }),
  70467. $globals.MethodInheritanceTest);
  70468. $core.addMethod(
  70469. $core.method({
  70470. selector: "tearDown",
  70471. protocol: 'initialization',
  70472. fn: function (){
  70473. var self=this;
  70474. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  70475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70476. return $core.withContext(function($ctx1) {
  70477. //>>excludeEnd("ctx");
  70478. $recv((function(){
  70479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70480. return $core.withContext(function($ctx2) {
  70481. //>>excludeEnd("ctx");
  70482. return self._deinstallTop();
  70483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70484. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  70485. //>>excludeEnd("ctx");
  70486. }))._on_do_($Error(),(function(){
  70487. }));
  70488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70489. $ctx1.sendIdx["on:do:"]=1;
  70490. //>>excludeEnd("ctx");
  70491. $recv((function(){
  70492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70493. return $core.withContext(function($ctx2) {
  70494. //>>excludeEnd("ctx");
  70495. return self._deinstallMiddle();
  70496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70497. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  70498. //>>excludeEnd("ctx");
  70499. }))._on_do_($Error(),(function(){
  70500. }));
  70501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70502. $ctx1.sendIdx["on:do:"]=2;
  70503. //>>excludeEnd("ctx");
  70504. $recv((function(){
  70505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70506. return $core.withContext(function($ctx2) {
  70507. //>>excludeEnd("ctx");
  70508. return self._deinstallBottom();
  70509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70510. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  70511. //>>excludeEnd("ctx");
  70512. }))._on_do_($Error(),(function(){
  70513. }));
  70514. return self;
  70515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70516. }, function($ctx1) {$ctx1.fill(self,"tearDown",{},$globals.MethodInheritanceTest)});
  70517. //>>excludeEnd("ctx");
  70518. },
  70519. //>>excludeStart("ide", pragmas.excludeIdeData);
  70520. args: [],
  70521. source: "tearDown\x0a\x09[ self deinstallTop ] on: Error do: [ ].\x0a\x09[ self deinstallMiddle ] on: Error do: [ ].\x0a\x09[ self deinstallBottom ] on: Error do: [ ]",
  70522. referencedClasses: ["Error"],
  70523. //>>excludeEnd("ide");
  70524. messageSends: ["on:do:", "deinstallTop", "deinstallMiddle", "deinstallBottom"]
  70525. }),
  70526. $globals.MethodInheritanceTest);
  70527. $core.addMethod(
  70528. $core.method({
  70529. selector: "testMNU11",
  70530. protocol: 'tests',
  70531. fn: function (){
  70532. var self=this;
  70533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70534. return $core.withContext(function($ctx1) {
  70535. //>>excludeEnd("ctx");
  70536. self["@performBlock"]=(function(x){
  70537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70538. return $core.withContext(function($ctx2) {
  70539. //>>excludeEnd("ctx");
  70540. return $recv(x)._foo();
  70541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70542. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  70543. //>>excludeEnd("ctx");
  70544. });
  70545. self._shouldMNU();
  70546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70547. $ctx1.sendIdx["shouldMNU"]=1;
  70548. //>>excludeEnd("ctx");
  70549. self._installTop_("foo ^ false");
  70550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70551. $ctx1.sendIdx["installTop:"]=1;
  70552. //>>excludeEnd("ctx");
  70553. self._installTop_("foo ^ true");
  70554. self._deinstallTop();
  70555. self._shouldMNU();
  70556. return self;
  70557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70558. }, function($ctx1) {$ctx1.fill(self,"testMNU11",{},$globals.MethodInheritanceTest)});
  70559. //>>excludeEnd("ctx");
  70560. },
  70561. //>>excludeStart("ide", pragmas.excludeIdeData);
  70562. args: [],
  70563. 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",
  70564. referencedClasses: [],
  70565. //>>excludeEnd("ide");
  70566. messageSends: ["foo", "shouldMNU", "installTop:", "deinstallTop"]
  70567. }),
  70568. $globals.MethodInheritanceTest);
  70569. $core.addMethod(
  70570. $core.method({
  70571. selector: "testMNU22",
  70572. protocol: 'tests',
  70573. fn: function (){
  70574. var self=this;
  70575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70576. return $core.withContext(function($ctx1) {
  70577. //>>excludeEnd("ctx");
  70578. self["@performBlock"]=(function(x){
  70579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70580. return $core.withContext(function($ctx2) {
  70581. //>>excludeEnd("ctx");
  70582. return $recv(x)._foo();
  70583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70584. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  70585. //>>excludeEnd("ctx");
  70586. });
  70587. self._shouldMNU();
  70588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70589. $ctx1.sendIdx["shouldMNU"]=1;
  70590. //>>excludeEnd("ctx");
  70591. self._installMiddle_("foo ^ false");
  70592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70593. $ctx1.sendIdx["installMiddle:"]=1;
  70594. //>>excludeEnd("ctx");
  70595. self._installMiddle_("foo ^ true");
  70596. self._deinstallMiddle();
  70597. self._shouldMNU();
  70598. return self;
  70599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70600. }, function($ctx1) {$ctx1.fill(self,"testMNU22",{},$globals.MethodInheritanceTest)});
  70601. //>>excludeEnd("ctx");
  70602. },
  70603. //>>excludeStart("ide", pragmas.excludeIdeData);
  70604. args: [],
  70605. 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",
  70606. referencedClasses: [],
  70607. //>>excludeEnd("ide");
  70608. messageSends: ["foo", "shouldMNU", "installMiddle:", "deinstallMiddle"]
  70609. }),
  70610. $globals.MethodInheritanceTest);
  70611. $core.addMethod(
  70612. $core.method({
  70613. selector: "testReturns1",
  70614. protocol: 'tests',
  70615. fn: function (){
  70616. var self=this;
  70617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70618. return $core.withContext(function($ctx1) {
  70619. //>>excludeEnd("ctx");
  70620. self["@performBlock"]=(function(x){
  70621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70622. return $core.withContext(function($ctx2) {
  70623. //>>excludeEnd("ctx");
  70624. return $recv(x)._foo();
  70625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70626. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  70627. //>>excludeEnd("ctx");
  70628. });
  70629. self._installTop_("foo ^ false");
  70630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70631. $ctx1.sendIdx["installTop:"]=1;
  70632. //>>excludeEnd("ctx");
  70633. self._shouldReturn_(false);
  70634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70635. $ctx1.sendIdx["shouldReturn:"]=1;
  70636. //>>excludeEnd("ctx");
  70637. self._installTop_("foo ^ true");
  70638. self._shouldReturn_(true);
  70639. return self;
  70640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70641. }, function($ctx1) {$ctx1.fill(self,"testReturns1",{},$globals.MethodInheritanceTest)});
  70642. //>>excludeEnd("ctx");
  70643. },
  70644. //>>excludeStart("ide", pragmas.excludeIdeData);
  70645. args: [],
  70646. 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",
  70647. referencedClasses: [],
  70648. //>>excludeEnd("ide");
  70649. messageSends: ["foo", "installTop:", "shouldReturn:"]
  70650. }),
  70651. $globals.MethodInheritanceTest);
  70652. $core.addClass('NumberTest', $globals.TestCase, [], 'Kernel-Tests');
  70653. $core.addMethod(
  70654. $core.method({
  70655. selector: "testAbs",
  70656. protocol: 'tests',
  70657. fn: function (){
  70658. var self=this;
  70659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70660. return $core.withContext(function($ctx1) {
  70661. //>>excludeEnd("ctx");
  70662. var $1;
  70663. $1=(4)._abs();
  70664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70665. $ctx1.sendIdx["abs"]=1;
  70666. //>>excludeEnd("ctx");
  70667. self._assert_equals_($1,(4));
  70668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70669. $ctx1.sendIdx["assert:equals:"]=1;
  70670. //>>excludeEnd("ctx");
  70671. self._assert_equals_((-4)._abs(),(4));
  70672. return self;
  70673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70674. }, function($ctx1) {$ctx1.fill(self,"testAbs",{},$globals.NumberTest)});
  70675. //>>excludeEnd("ctx");
  70676. },
  70677. //>>excludeStart("ide", pragmas.excludeIdeData);
  70678. args: [],
  70679. source: "testAbs\x0a\x09self assert: 4 abs equals: 4.\x0a\x09self assert: -4 abs equals: 4",
  70680. referencedClasses: [],
  70681. //>>excludeEnd("ide");
  70682. messageSends: ["assert:equals:", "abs"]
  70683. }),
  70684. $globals.NumberTest);
  70685. $core.addMethod(
  70686. $core.method({
  70687. selector: "testArithmetic",
  70688. protocol: 'tests',
  70689. fn: function (){
  70690. var self=this;
  70691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70692. return $core.withContext(function($ctx1) {
  70693. //>>excludeEnd("ctx");
  70694. var $1,$2,$3,$5,$4;
  70695. $1=(1.5).__plus((1));
  70696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70697. $ctx1.sendIdx["+"]=1;
  70698. //>>excludeEnd("ctx");
  70699. self._assert_equals_($1,(2.5));
  70700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70701. $ctx1.sendIdx["assert:equals:"]=1;
  70702. //>>excludeEnd("ctx");
  70703. $2=(2).__minus((1));
  70704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70705. $ctx1.sendIdx["-"]=1;
  70706. //>>excludeEnd("ctx");
  70707. self._assert_equals_($2,(1));
  70708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70709. $ctx1.sendIdx["assert:equals:"]=2;
  70710. //>>excludeEnd("ctx");
  70711. self._assert_equals_((-2).__minus((1)),(-3));
  70712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70713. $ctx1.sendIdx["assert:equals:"]=3;
  70714. //>>excludeEnd("ctx");
  70715. self._assert_equals_((12).__slash((2)),(6));
  70716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70717. $ctx1.sendIdx["assert:equals:"]=4;
  70718. //>>excludeEnd("ctx");
  70719. $3=(3).__star((4));
  70720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70721. $ctx1.sendIdx["*"]=1;
  70722. //>>excludeEnd("ctx");
  70723. self._assert_equals_($3,(12));
  70724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70725. $ctx1.sendIdx["assert:equals:"]=5;
  70726. //>>excludeEnd("ctx");
  70727. self._assert_equals_((7).__slash_slash((2)),(3));
  70728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70729. $ctx1.sendIdx["assert:equals:"]=6;
  70730. //>>excludeEnd("ctx");
  70731. self._assert_equals_((7).__backslash_backslash((2)),(1));
  70732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70733. $ctx1.sendIdx["assert:equals:"]=7;
  70734. //>>excludeEnd("ctx");
  70735. $5=(1).__plus((2));
  70736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70737. $ctx1.sendIdx["+"]=2;
  70738. //>>excludeEnd("ctx");
  70739. $4=$recv($5).__star((3));
  70740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70741. $ctx1.sendIdx["*"]=2;
  70742. //>>excludeEnd("ctx");
  70743. self._assert_equals_($4,(9));
  70744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70745. $ctx1.sendIdx["assert:equals:"]=8;
  70746. //>>excludeEnd("ctx");
  70747. self._assert_equals_((1).__plus((2).__star((3))),(7));
  70748. return self;
  70749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70750. }, function($ctx1) {$ctx1.fill(self,"testArithmetic",{},$globals.NumberTest)});
  70751. //>>excludeEnd("ctx");
  70752. },
  70753. //>>excludeStart("ide", pragmas.excludeIdeData);
  70754. args: [],
  70755. 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",
  70756. referencedClasses: [],
  70757. //>>excludeEnd("ide");
  70758. messageSends: ["assert:equals:", "+", "-", "/", "*", "//", "\x5c\x5c"]
  70759. }),
  70760. $globals.NumberTest);
  70761. $core.addMethod(
  70762. $core.method({
  70763. selector: "testAsNumber",
  70764. protocol: 'tests',
  70765. fn: function (){
  70766. var self=this;
  70767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70768. return $core.withContext(function($ctx1) {
  70769. //>>excludeEnd("ctx");
  70770. self._assert_equals_((3)._asNumber(),(3));
  70771. return self;
  70772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70773. }, function($ctx1) {$ctx1.fill(self,"testAsNumber",{},$globals.NumberTest)});
  70774. //>>excludeEnd("ctx");
  70775. },
  70776. //>>excludeStart("ide", pragmas.excludeIdeData);
  70777. args: [],
  70778. source: "testAsNumber\x0a\x09self assert: 3 asNumber equals: 3.",
  70779. referencedClasses: [],
  70780. //>>excludeEnd("ide");
  70781. messageSends: ["assert:equals:", "asNumber"]
  70782. }),
  70783. $globals.NumberTest);
  70784. $core.addMethod(
  70785. $core.method({
  70786. selector: "testCeiling",
  70787. protocol: 'tests',
  70788. fn: function (){
  70789. var self=this;
  70790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70791. return $core.withContext(function($ctx1) {
  70792. //>>excludeEnd("ctx");
  70793. var $1,$2;
  70794. $1=(1.2)._ceiling();
  70795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70796. $ctx1.sendIdx["ceiling"]=1;
  70797. //>>excludeEnd("ctx");
  70798. self._assert_equals_($1,(2));
  70799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70800. $ctx1.sendIdx["assert:equals:"]=1;
  70801. //>>excludeEnd("ctx");
  70802. $2=(-1.2)._ceiling();
  70803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70804. $ctx1.sendIdx["ceiling"]=2;
  70805. //>>excludeEnd("ctx");
  70806. self._assert_equals_($2,(-1));
  70807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70808. $ctx1.sendIdx["assert:equals:"]=2;
  70809. //>>excludeEnd("ctx");
  70810. self._assert_equals_((1)._ceiling(),(1));
  70811. return self;
  70812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70813. }, function($ctx1) {$ctx1.fill(self,"testCeiling",{},$globals.NumberTest)});
  70814. //>>excludeEnd("ctx");
  70815. },
  70816. //>>excludeStart("ide", pragmas.excludeIdeData);
  70817. args: [],
  70818. 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.",
  70819. referencedClasses: [],
  70820. //>>excludeEnd("ide");
  70821. messageSends: ["assert:equals:", "ceiling"]
  70822. }),
  70823. $globals.NumberTest);
  70824. $core.addMethod(
  70825. $core.method({
  70826. selector: "testComparison",
  70827. protocol: 'tests',
  70828. fn: function (){
  70829. var self=this;
  70830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70831. return $core.withContext(function($ctx1) {
  70832. //>>excludeEnd("ctx");
  70833. var $1,$2,$3,$4;
  70834. $1=(3).__gt((2));
  70835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70836. $ctx1.sendIdx[">"]=1;
  70837. //>>excludeEnd("ctx");
  70838. self._assert_($1);
  70839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70840. $ctx1.sendIdx["assert:"]=1;
  70841. //>>excludeEnd("ctx");
  70842. $2=(2).__lt((3));
  70843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70844. $ctx1.sendIdx["<"]=1;
  70845. //>>excludeEnd("ctx");
  70846. self._assert_($2);
  70847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70848. $ctx1.sendIdx["assert:"]=2;
  70849. //>>excludeEnd("ctx");
  70850. self._deny_((3).__lt((2)));
  70851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70852. $ctx1.sendIdx["deny:"]=1;
  70853. //>>excludeEnd("ctx");
  70854. self._deny_((2).__gt((3)));
  70855. $3=(3).__gt_eq((3));
  70856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70857. $ctx1.sendIdx[">="]=1;
  70858. //>>excludeEnd("ctx");
  70859. self._assert_($3);
  70860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70861. $ctx1.sendIdx["assert:"]=3;
  70862. //>>excludeEnd("ctx");
  70863. self._assert_((3.1).__gt_eq((3)));
  70864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70865. $ctx1.sendIdx["assert:"]=4;
  70866. //>>excludeEnd("ctx");
  70867. $4=(3).__lt_eq((3));
  70868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70869. $ctx1.sendIdx["<="]=1;
  70870. //>>excludeEnd("ctx");
  70871. self._assert_($4);
  70872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70873. $ctx1.sendIdx["assert:"]=5;
  70874. //>>excludeEnd("ctx");
  70875. self._assert_((3).__lt_eq((3.1)));
  70876. return self;
  70877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70878. }, function($ctx1) {$ctx1.fill(self,"testComparison",{},$globals.NumberTest)});
  70879. //>>excludeEnd("ctx");
  70880. },
  70881. //>>excludeStart("ide", pragmas.excludeIdeData);
  70882. args: [],
  70883. 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",
  70884. referencedClasses: [],
  70885. //>>excludeEnd("ide");
  70886. messageSends: ["assert:", ">", "<", "deny:", ">=", "<="]
  70887. }),
  70888. $globals.NumberTest);
  70889. $core.addMethod(
  70890. $core.method({
  70891. selector: "testCopying",
  70892. protocol: 'tests',
  70893. fn: function (){
  70894. var self=this;
  70895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70896. return $core.withContext(function($ctx1) {
  70897. //>>excludeEnd("ctx");
  70898. var $1;
  70899. $1=$recv((1)._copy()).__eq_eq((1));
  70900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70901. $ctx1.sendIdx["=="]=1;
  70902. //>>excludeEnd("ctx");
  70903. self._assert_($1);
  70904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70905. $ctx1.sendIdx["assert:"]=1;
  70906. //>>excludeEnd("ctx");
  70907. self._assert_($recv((1)._deepCopy()).__eq_eq((1)));
  70908. return self;
  70909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70910. }, function($ctx1) {$ctx1.fill(self,"testCopying",{},$globals.NumberTest)});
  70911. //>>excludeEnd("ctx");
  70912. },
  70913. //>>excludeStart("ide", pragmas.excludeIdeData);
  70914. args: [],
  70915. source: "testCopying\x0a\x09self assert: 1 copy == 1.\x0a\x09self assert: 1 deepCopy == 1",
  70916. referencedClasses: [],
  70917. //>>excludeEnd("ide");
  70918. messageSends: ["assert:", "==", "copy", "deepCopy"]
  70919. }),
  70920. $globals.NumberTest);
  70921. $core.addMethod(
  70922. $core.method({
  70923. selector: "testEquality",
  70924. protocol: 'tests',
  70925. fn: function (){
  70926. var self=this;
  70927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70928. return $core.withContext(function($ctx1) {
  70929. //>>excludeEnd("ctx");
  70930. var $1,$2,$3,$5,$4,$7,$6,$9,$8,$10,$11,$12;
  70931. $1=(1).__eq((1));
  70932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70933. $ctx1.sendIdx["="]=1;
  70934. //>>excludeEnd("ctx");
  70935. self._assert_($1);
  70936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70937. $ctx1.sendIdx["assert:"]=1;
  70938. //>>excludeEnd("ctx");
  70939. $2=(0).__eq((0));
  70940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70941. $ctx1.sendIdx["="]=2;
  70942. //>>excludeEnd("ctx");
  70943. self._assert_($2);
  70944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70945. $ctx1.sendIdx["assert:"]=2;
  70946. //>>excludeEnd("ctx");
  70947. $3=(1).__eq((0));
  70948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70949. $ctx1.sendIdx["="]=3;
  70950. //>>excludeEnd("ctx");
  70951. self._deny_($3);
  70952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70953. $ctx1.sendIdx["deny:"]=1;
  70954. //>>excludeEnd("ctx");
  70955. $5=(1)._yourself();
  70956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70957. $ctx1.sendIdx["yourself"]=1;
  70958. //>>excludeEnd("ctx");
  70959. $4=$recv($5).__eq((1));
  70960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70961. $ctx1.sendIdx["="]=4;
  70962. //>>excludeEnd("ctx");
  70963. self._assert_($4);
  70964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70965. $ctx1.sendIdx["assert:"]=3;
  70966. //>>excludeEnd("ctx");
  70967. $7=(1)._yourself();
  70968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70969. $ctx1.sendIdx["yourself"]=2;
  70970. //>>excludeEnd("ctx");
  70971. $6=(1).__eq($7);
  70972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70973. $ctx1.sendIdx["="]=5;
  70974. //>>excludeEnd("ctx");
  70975. self._assert_($6);
  70976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70977. $ctx1.sendIdx["assert:"]=4;
  70978. //>>excludeEnd("ctx");
  70979. $9=(1)._yourself();
  70980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70981. $ctx1.sendIdx["yourself"]=3;
  70982. //>>excludeEnd("ctx");
  70983. $8=$recv($9).__eq((1)._yourself());
  70984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70985. $ctx1.sendIdx["="]=6;
  70986. //>>excludeEnd("ctx");
  70987. self._assert_($8);
  70988. $10=(0).__eq(false);
  70989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70990. $ctx1.sendIdx["="]=7;
  70991. //>>excludeEnd("ctx");
  70992. self._deny_($10);
  70993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70994. $ctx1.sendIdx["deny:"]=2;
  70995. //>>excludeEnd("ctx");
  70996. $11=false.__eq((0));
  70997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70998. $ctx1.sendIdx["="]=8;
  70999. //>>excludeEnd("ctx");
  71000. self._deny_($11);
  71001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71002. $ctx1.sendIdx["deny:"]=3;
  71003. //>>excludeEnd("ctx");
  71004. $12="".__eq((0));
  71005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71006. $ctx1.sendIdx["="]=9;
  71007. //>>excludeEnd("ctx");
  71008. self._deny_($12);
  71009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71010. $ctx1.sendIdx["deny:"]=4;
  71011. //>>excludeEnd("ctx");
  71012. self._deny_((0).__eq(""));
  71013. return self;
  71014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71015. }, function($ctx1) {$ctx1.fill(self,"testEquality",{},$globals.NumberTest)});
  71016. //>>excludeEnd("ctx");
  71017. },
  71018. //>>excludeStart("ide", pragmas.excludeIdeData);
  71019. args: [],
  71020. 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 = ''",
  71021. referencedClasses: [],
  71022. //>>excludeEnd("ide");
  71023. messageSends: ["assert:", "=", "deny:", "yourself"]
  71024. }),
  71025. $globals.NumberTest);
  71026. $core.addMethod(
  71027. $core.method({
  71028. selector: "testFloor",
  71029. protocol: 'tests',
  71030. fn: function (){
  71031. var self=this;
  71032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71033. return $core.withContext(function($ctx1) {
  71034. //>>excludeEnd("ctx");
  71035. var $1,$2;
  71036. $1=(1.2)._floor();
  71037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71038. $ctx1.sendIdx["floor"]=1;
  71039. //>>excludeEnd("ctx");
  71040. self._assert_equals_($1,(1));
  71041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71042. $ctx1.sendIdx["assert:equals:"]=1;
  71043. //>>excludeEnd("ctx");
  71044. $2=(-1.2)._floor();
  71045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71046. $ctx1.sendIdx["floor"]=2;
  71047. //>>excludeEnd("ctx");
  71048. self._assert_equals_($2,(-2));
  71049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71050. $ctx1.sendIdx["assert:equals:"]=2;
  71051. //>>excludeEnd("ctx");
  71052. self._assert_equals_((1)._floor(),(1));
  71053. return self;
  71054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71055. }, function($ctx1) {$ctx1.fill(self,"testFloor",{},$globals.NumberTest)});
  71056. //>>excludeEnd("ctx");
  71057. },
  71058. //>>excludeStart("ide", pragmas.excludeIdeData);
  71059. args: [],
  71060. 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.",
  71061. referencedClasses: [],
  71062. //>>excludeEnd("ide");
  71063. messageSends: ["assert:equals:", "floor"]
  71064. }),
  71065. $globals.NumberTest);
  71066. $core.addMethod(
  71067. $core.method({
  71068. selector: "testHexNumbers",
  71069. protocol: 'tests',
  71070. fn: function (){
  71071. var self=this;
  71072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71073. return $core.withContext(function($ctx1) {
  71074. //>>excludeEnd("ctx");
  71075. var $1,$2,$3,$4,$5;
  71076. self._assert_equals_((9),(9));
  71077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71078. $ctx1.sendIdx["assert:equals:"]=1;
  71079. //>>excludeEnd("ctx");
  71080. $1=(10)._truncated();
  71081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71082. $ctx1.sendIdx["truncated"]=1;
  71083. //>>excludeEnd("ctx");
  71084. self._assert_equals_($1,(10));
  71085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71086. $ctx1.sendIdx["assert:equals:"]=2;
  71087. //>>excludeEnd("ctx");
  71088. $2=(11)._truncated();
  71089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71090. $ctx1.sendIdx["truncated"]=2;
  71091. //>>excludeEnd("ctx");
  71092. self._assert_equals_($2,(11));
  71093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71094. $ctx1.sendIdx["assert:equals:"]=3;
  71095. //>>excludeEnd("ctx");
  71096. $3=(12)._truncated();
  71097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71098. $ctx1.sendIdx["truncated"]=3;
  71099. //>>excludeEnd("ctx");
  71100. self._assert_equals_($3,(12));
  71101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71102. $ctx1.sendIdx["assert:equals:"]=4;
  71103. //>>excludeEnd("ctx");
  71104. $4=(13)._truncated();
  71105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71106. $ctx1.sendIdx["truncated"]=4;
  71107. //>>excludeEnd("ctx");
  71108. self._assert_equals_($4,(13));
  71109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71110. $ctx1.sendIdx["assert:equals:"]=5;
  71111. //>>excludeEnd("ctx");
  71112. $5=(14)._truncated();
  71113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71114. $ctx1.sendIdx["truncated"]=5;
  71115. //>>excludeEnd("ctx");
  71116. self._assert_equals_($5,(14));
  71117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71118. $ctx1.sendIdx["assert:equals:"]=6;
  71119. //>>excludeEnd("ctx");
  71120. self._assert_equals_((15)._truncated(),(15));
  71121. return self;
  71122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71123. }, function($ctx1) {$ctx1.fill(self,"testHexNumbers",{},$globals.NumberTest)});
  71124. //>>excludeEnd("ctx");
  71125. },
  71126. //>>excludeStart("ide", pragmas.excludeIdeData);
  71127. args: [],
  71128. 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",
  71129. referencedClasses: [],
  71130. //>>excludeEnd("ide");
  71131. messageSends: ["assert:equals:", "truncated"]
  71132. }),
  71133. $globals.NumberTest);
  71134. $core.addMethod(
  71135. $core.method({
  71136. selector: "testIdentity",
  71137. protocol: 'tests',
  71138. fn: function (){
  71139. var self=this;
  71140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71141. return $core.withContext(function($ctx1) {
  71142. //>>excludeEnd("ctx");
  71143. var $1,$2,$3,$5,$4,$7,$6,$9,$8;
  71144. $1=(1).__eq_eq((1));
  71145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71146. $ctx1.sendIdx["=="]=1;
  71147. //>>excludeEnd("ctx");
  71148. self._assert_($1);
  71149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71150. $ctx1.sendIdx["assert:"]=1;
  71151. //>>excludeEnd("ctx");
  71152. $2=(0).__eq_eq((0));
  71153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71154. $ctx1.sendIdx["=="]=2;
  71155. //>>excludeEnd("ctx");
  71156. self._assert_($2);
  71157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71158. $ctx1.sendIdx["assert:"]=2;
  71159. //>>excludeEnd("ctx");
  71160. $3=(1).__eq_eq((0));
  71161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71162. $ctx1.sendIdx["=="]=3;
  71163. //>>excludeEnd("ctx");
  71164. self._deny_($3);
  71165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71166. $ctx1.sendIdx["deny:"]=1;
  71167. //>>excludeEnd("ctx");
  71168. $5=(1)._yourself();
  71169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71170. $ctx1.sendIdx["yourself"]=1;
  71171. //>>excludeEnd("ctx");
  71172. $4=$recv($5).__eq_eq((1));
  71173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71174. $ctx1.sendIdx["=="]=4;
  71175. //>>excludeEnd("ctx");
  71176. self._assert_($4);
  71177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71178. $ctx1.sendIdx["assert:"]=3;
  71179. //>>excludeEnd("ctx");
  71180. $7=(1)._yourself();
  71181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71182. $ctx1.sendIdx["yourself"]=2;
  71183. //>>excludeEnd("ctx");
  71184. $6=(1).__eq_eq($7);
  71185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71186. $ctx1.sendIdx["=="]=5;
  71187. //>>excludeEnd("ctx");
  71188. self._assert_($6);
  71189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71190. $ctx1.sendIdx["assert:"]=4;
  71191. //>>excludeEnd("ctx");
  71192. $9=(1)._yourself();
  71193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71194. $ctx1.sendIdx["yourself"]=3;
  71195. //>>excludeEnd("ctx");
  71196. $8=$recv($9).__eq_eq((1)._yourself());
  71197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71198. $ctx1.sendIdx["=="]=6;
  71199. //>>excludeEnd("ctx");
  71200. self._assert_($8);
  71201. self._deny_((1).__eq_eq((2)));
  71202. return self;
  71203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71204. }, function($ctx1) {$ctx1.fill(self,"testIdentity",{},$globals.NumberTest)});
  71205. //>>excludeEnd("ctx");
  71206. },
  71207. //>>excludeStart("ide", pragmas.excludeIdeData);
  71208. args: [],
  71209. 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",
  71210. referencedClasses: [],
  71211. //>>excludeEnd("ide");
  71212. messageSends: ["assert:", "==", "deny:", "yourself"]
  71213. }),
  71214. $globals.NumberTest);
  71215. $core.addMethod(
  71216. $core.method({
  71217. selector: "testInvalidHexNumbers",
  71218. protocol: 'tests',
  71219. fn: function (){
  71220. var self=this;
  71221. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  71222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71223. return $core.withContext(function($ctx1) {
  71224. //>>excludeEnd("ctx");
  71225. self._should_raise_((function(){
  71226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71227. return $core.withContext(function($ctx2) {
  71228. //>>excludeEnd("ctx");
  71229. return (16)._rG();
  71230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71231. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  71232. //>>excludeEnd("ctx");
  71233. }),$MessageNotUnderstood());
  71234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71235. $ctx1.sendIdx["should:raise:"]=1;
  71236. //>>excludeEnd("ctx");
  71237. self._should_raise_((function(){
  71238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71239. return $core.withContext(function($ctx2) {
  71240. //>>excludeEnd("ctx");
  71241. return (16)._rg();
  71242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71243. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  71244. //>>excludeEnd("ctx");
  71245. }),$MessageNotUnderstood());
  71246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71247. $ctx1.sendIdx["should:raise:"]=2;
  71248. //>>excludeEnd("ctx");
  71249. self._should_raise_((function(){
  71250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71251. return $core.withContext(function($ctx2) {
  71252. //>>excludeEnd("ctx");
  71253. return (16)._rH();
  71254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71255. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  71256. //>>excludeEnd("ctx");
  71257. }),$MessageNotUnderstood());
  71258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71259. $ctx1.sendIdx["should:raise:"]=3;
  71260. //>>excludeEnd("ctx");
  71261. self._should_raise_((function(){
  71262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71263. return $core.withContext(function($ctx2) {
  71264. //>>excludeEnd("ctx");
  71265. return (16)._rh();
  71266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71267. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  71268. //>>excludeEnd("ctx");
  71269. }),$MessageNotUnderstood());
  71270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71271. $ctx1.sendIdx["should:raise:"]=4;
  71272. //>>excludeEnd("ctx");
  71273. self._should_raise_((function(){
  71274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71275. return $core.withContext(function($ctx2) {
  71276. //>>excludeEnd("ctx");
  71277. return (16)._rI();
  71278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71279. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  71280. //>>excludeEnd("ctx");
  71281. }),$MessageNotUnderstood());
  71282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71283. $ctx1.sendIdx["should:raise:"]=5;
  71284. //>>excludeEnd("ctx");
  71285. self._should_raise_((function(){
  71286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71287. return $core.withContext(function($ctx2) {
  71288. //>>excludeEnd("ctx");
  71289. return (16)._ri();
  71290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71291. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  71292. //>>excludeEnd("ctx");
  71293. }),$MessageNotUnderstood());
  71294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71295. $ctx1.sendIdx["should:raise:"]=6;
  71296. //>>excludeEnd("ctx");
  71297. self._should_raise_((function(){
  71298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71299. return $core.withContext(function($ctx2) {
  71300. //>>excludeEnd("ctx");
  71301. return (16)._rJ();
  71302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71303. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  71304. //>>excludeEnd("ctx");
  71305. }),$MessageNotUnderstood());
  71306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71307. $ctx1.sendIdx["should:raise:"]=7;
  71308. //>>excludeEnd("ctx");
  71309. self._should_raise_((function(){
  71310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71311. return $core.withContext(function($ctx2) {
  71312. //>>excludeEnd("ctx");
  71313. return (16)._rj();
  71314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71315. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,8)});
  71316. //>>excludeEnd("ctx");
  71317. }),$MessageNotUnderstood());
  71318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71319. $ctx1.sendIdx["should:raise:"]=8;
  71320. //>>excludeEnd("ctx");
  71321. self._should_raise_((function(){
  71322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71323. return $core.withContext(function($ctx2) {
  71324. //>>excludeEnd("ctx");
  71325. return (16)._rK();
  71326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71327. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,9)});
  71328. //>>excludeEnd("ctx");
  71329. }),$MessageNotUnderstood());
  71330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71331. $ctx1.sendIdx["should:raise:"]=9;
  71332. //>>excludeEnd("ctx");
  71333. self._should_raise_((function(){
  71334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71335. return $core.withContext(function($ctx2) {
  71336. //>>excludeEnd("ctx");
  71337. return (16)._rk();
  71338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71339. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,10)});
  71340. //>>excludeEnd("ctx");
  71341. }),$MessageNotUnderstood());
  71342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71343. $ctx1.sendIdx["should:raise:"]=10;
  71344. //>>excludeEnd("ctx");
  71345. self._should_raise_((function(){
  71346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71347. return $core.withContext(function($ctx2) {
  71348. //>>excludeEnd("ctx");
  71349. return (16)._rL();
  71350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71351. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,11)});
  71352. //>>excludeEnd("ctx");
  71353. }),$MessageNotUnderstood());
  71354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71355. $ctx1.sendIdx["should:raise:"]=11;
  71356. //>>excludeEnd("ctx");
  71357. self._should_raise_((function(){
  71358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71359. return $core.withContext(function($ctx2) {
  71360. //>>excludeEnd("ctx");
  71361. return (16)._rl();
  71362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71363. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,12)});
  71364. //>>excludeEnd("ctx");
  71365. }),$MessageNotUnderstood());
  71366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71367. $ctx1.sendIdx["should:raise:"]=12;
  71368. //>>excludeEnd("ctx");
  71369. self._should_raise_((function(){
  71370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71371. return $core.withContext(function($ctx2) {
  71372. //>>excludeEnd("ctx");
  71373. return (16)._rM();
  71374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71375. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,13)});
  71376. //>>excludeEnd("ctx");
  71377. }),$MessageNotUnderstood());
  71378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71379. $ctx1.sendIdx["should:raise:"]=13;
  71380. //>>excludeEnd("ctx");
  71381. self._should_raise_((function(){
  71382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71383. return $core.withContext(function($ctx2) {
  71384. //>>excludeEnd("ctx");
  71385. return (16)._rm();
  71386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71387. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,14)});
  71388. //>>excludeEnd("ctx");
  71389. }),$MessageNotUnderstood());
  71390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71391. $ctx1.sendIdx["should:raise:"]=14;
  71392. //>>excludeEnd("ctx");
  71393. self._should_raise_((function(){
  71394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71395. return $core.withContext(function($ctx2) {
  71396. //>>excludeEnd("ctx");
  71397. return (16)._rN();
  71398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71399. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,15)});
  71400. //>>excludeEnd("ctx");
  71401. }),$MessageNotUnderstood());
  71402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71403. $ctx1.sendIdx["should:raise:"]=15;
  71404. //>>excludeEnd("ctx");
  71405. self._should_raise_((function(){
  71406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71407. return $core.withContext(function($ctx2) {
  71408. //>>excludeEnd("ctx");
  71409. return (16)._rn();
  71410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71411. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,16)});
  71412. //>>excludeEnd("ctx");
  71413. }),$MessageNotUnderstood());
  71414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71415. $ctx1.sendIdx["should:raise:"]=16;
  71416. //>>excludeEnd("ctx");
  71417. self._should_raise_((function(){
  71418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71419. return $core.withContext(function($ctx2) {
  71420. //>>excludeEnd("ctx");
  71421. return (16)._rO();
  71422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71423. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,17)});
  71424. //>>excludeEnd("ctx");
  71425. }),$MessageNotUnderstood());
  71426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71427. $ctx1.sendIdx["should:raise:"]=17;
  71428. //>>excludeEnd("ctx");
  71429. self._should_raise_((function(){
  71430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71431. return $core.withContext(function($ctx2) {
  71432. //>>excludeEnd("ctx");
  71433. return (16)._ro();
  71434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71435. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,18)});
  71436. //>>excludeEnd("ctx");
  71437. }),$MessageNotUnderstood());
  71438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71439. $ctx1.sendIdx["should:raise:"]=18;
  71440. //>>excludeEnd("ctx");
  71441. self._should_raise_((function(){
  71442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71443. return $core.withContext(function($ctx2) {
  71444. //>>excludeEnd("ctx");
  71445. return (16)._rP();
  71446. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71447. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,19)});
  71448. //>>excludeEnd("ctx");
  71449. }),$MessageNotUnderstood());
  71450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71451. $ctx1.sendIdx["should:raise:"]=19;
  71452. //>>excludeEnd("ctx");
  71453. self._should_raise_((function(){
  71454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71455. return $core.withContext(function($ctx2) {
  71456. //>>excludeEnd("ctx");
  71457. return (16)._rp();
  71458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71459. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,20)});
  71460. //>>excludeEnd("ctx");
  71461. }),$MessageNotUnderstood());
  71462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71463. $ctx1.sendIdx["should:raise:"]=20;
  71464. //>>excludeEnd("ctx");
  71465. self._should_raise_((function(){
  71466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71467. return $core.withContext(function($ctx2) {
  71468. //>>excludeEnd("ctx");
  71469. return (16)._rQ();
  71470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71471. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,21)});
  71472. //>>excludeEnd("ctx");
  71473. }),$MessageNotUnderstood());
  71474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71475. $ctx1.sendIdx["should:raise:"]=21;
  71476. //>>excludeEnd("ctx");
  71477. self._should_raise_((function(){
  71478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71479. return $core.withContext(function($ctx2) {
  71480. //>>excludeEnd("ctx");
  71481. return (16)._rq();
  71482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71483. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,22)});
  71484. //>>excludeEnd("ctx");
  71485. }),$MessageNotUnderstood());
  71486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71487. $ctx1.sendIdx["should:raise:"]=22;
  71488. //>>excludeEnd("ctx");
  71489. self._should_raise_((function(){
  71490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71491. return $core.withContext(function($ctx2) {
  71492. //>>excludeEnd("ctx");
  71493. return (16)._rR();
  71494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71495. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,23)});
  71496. //>>excludeEnd("ctx");
  71497. }),$MessageNotUnderstood());
  71498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71499. $ctx1.sendIdx["should:raise:"]=23;
  71500. //>>excludeEnd("ctx");
  71501. self._should_raise_((function(){
  71502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71503. return $core.withContext(function($ctx2) {
  71504. //>>excludeEnd("ctx");
  71505. return (16)._rr();
  71506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71507. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,24)});
  71508. //>>excludeEnd("ctx");
  71509. }),$MessageNotUnderstood());
  71510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71511. $ctx1.sendIdx["should:raise:"]=24;
  71512. //>>excludeEnd("ctx");
  71513. self._should_raise_((function(){
  71514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71515. return $core.withContext(function($ctx2) {
  71516. //>>excludeEnd("ctx");
  71517. return (16)._rS();
  71518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71519. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,25)});
  71520. //>>excludeEnd("ctx");
  71521. }),$MessageNotUnderstood());
  71522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71523. $ctx1.sendIdx["should:raise:"]=25;
  71524. //>>excludeEnd("ctx");
  71525. self._should_raise_((function(){
  71526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71527. return $core.withContext(function($ctx2) {
  71528. //>>excludeEnd("ctx");
  71529. return (16)._rs();
  71530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71531. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,26)});
  71532. //>>excludeEnd("ctx");
  71533. }),$MessageNotUnderstood());
  71534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71535. $ctx1.sendIdx["should:raise:"]=26;
  71536. //>>excludeEnd("ctx");
  71537. self._should_raise_((function(){
  71538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71539. return $core.withContext(function($ctx2) {
  71540. //>>excludeEnd("ctx");
  71541. return (16)._rT();
  71542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71543. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,27)});
  71544. //>>excludeEnd("ctx");
  71545. }),$MessageNotUnderstood());
  71546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71547. $ctx1.sendIdx["should:raise:"]=27;
  71548. //>>excludeEnd("ctx");
  71549. self._should_raise_((function(){
  71550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71551. return $core.withContext(function($ctx2) {
  71552. //>>excludeEnd("ctx");
  71553. return (16)._rt();
  71554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71555. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,28)});
  71556. //>>excludeEnd("ctx");
  71557. }),$MessageNotUnderstood());
  71558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71559. $ctx1.sendIdx["should:raise:"]=28;
  71560. //>>excludeEnd("ctx");
  71561. self._should_raise_((function(){
  71562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71563. return $core.withContext(function($ctx2) {
  71564. //>>excludeEnd("ctx");
  71565. return (16)._rU();
  71566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71567. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,29)});
  71568. //>>excludeEnd("ctx");
  71569. }),$MessageNotUnderstood());
  71570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71571. $ctx1.sendIdx["should:raise:"]=29;
  71572. //>>excludeEnd("ctx");
  71573. self._should_raise_((function(){
  71574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71575. return $core.withContext(function($ctx2) {
  71576. //>>excludeEnd("ctx");
  71577. return (16)._ru();
  71578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71579. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,30)});
  71580. //>>excludeEnd("ctx");
  71581. }),$MessageNotUnderstood());
  71582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71583. $ctx1.sendIdx["should:raise:"]=30;
  71584. //>>excludeEnd("ctx");
  71585. self._should_raise_((function(){
  71586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71587. return $core.withContext(function($ctx2) {
  71588. //>>excludeEnd("ctx");
  71589. return (16)._rV();
  71590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71591. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,31)});
  71592. //>>excludeEnd("ctx");
  71593. }),$MessageNotUnderstood());
  71594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71595. $ctx1.sendIdx["should:raise:"]=31;
  71596. //>>excludeEnd("ctx");
  71597. self._should_raise_((function(){
  71598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71599. return $core.withContext(function($ctx2) {
  71600. //>>excludeEnd("ctx");
  71601. return (16)._rv();
  71602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71603. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,32)});
  71604. //>>excludeEnd("ctx");
  71605. }),$MessageNotUnderstood());
  71606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71607. $ctx1.sendIdx["should:raise:"]=32;
  71608. //>>excludeEnd("ctx");
  71609. self._should_raise_((function(){
  71610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71611. return $core.withContext(function($ctx2) {
  71612. //>>excludeEnd("ctx");
  71613. return (16)._rW();
  71614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71615. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,33)});
  71616. //>>excludeEnd("ctx");
  71617. }),$MessageNotUnderstood());
  71618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71619. $ctx1.sendIdx["should:raise:"]=33;
  71620. //>>excludeEnd("ctx");
  71621. self._should_raise_((function(){
  71622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71623. return $core.withContext(function($ctx2) {
  71624. //>>excludeEnd("ctx");
  71625. return (16)._rw();
  71626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71627. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,34)});
  71628. //>>excludeEnd("ctx");
  71629. }),$MessageNotUnderstood());
  71630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71631. $ctx1.sendIdx["should:raise:"]=34;
  71632. //>>excludeEnd("ctx");
  71633. self._should_raise_((function(){
  71634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71635. return $core.withContext(function($ctx2) {
  71636. //>>excludeEnd("ctx");
  71637. return (16)._rX();
  71638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71639. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,35)});
  71640. //>>excludeEnd("ctx");
  71641. }),$MessageNotUnderstood());
  71642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71643. $ctx1.sendIdx["should:raise:"]=35;
  71644. //>>excludeEnd("ctx");
  71645. self._should_raise_((function(){
  71646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71647. return $core.withContext(function($ctx2) {
  71648. //>>excludeEnd("ctx");
  71649. return (16)._rx();
  71650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71651. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,36)});
  71652. //>>excludeEnd("ctx");
  71653. }),$MessageNotUnderstood());
  71654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71655. $ctx1.sendIdx["should:raise:"]=36;
  71656. //>>excludeEnd("ctx");
  71657. self._should_raise_((function(){
  71658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71659. return $core.withContext(function($ctx2) {
  71660. //>>excludeEnd("ctx");
  71661. return (16)._rY();
  71662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71663. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,37)});
  71664. //>>excludeEnd("ctx");
  71665. }),$MessageNotUnderstood());
  71666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71667. $ctx1.sendIdx["should:raise:"]=37;
  71668. //>>excludeEnd("ctx");
  71669. self._should_raise_((function(){
  71670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71671. return $core.withContext(function($ctx2) {
  71672. //>>excludeEnd("ctx");
  71673. return (16)._ry();
  71674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71675. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,38)});
  71676. //>>excludeEnd("ctx");
  71677. }),$MessageNotUnderstood());
  71678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71679. $ctx1.sendIdx["should:raise:"]=38;
  71680. //>>excludeEnd("ctx");
  71681. self._should_raise_((function(){
  71682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71683. return $core.withContext(function($ctx2) {
  71684. //>>excludeEnd("ctx");
  71685. return (16)._rZ();
  71686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71687. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,39)});
  71688. //>>excludeEnd("ctx");
  71689. }),$MessageNotUnderstood());
  71690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71691. $ctx1.sendIdx["should:raise:"]=39;
  71692. //>>excludeEnd("ctx");
  71693. self._should_raise_((function(){
  71694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71695. return $core.withContext(function($ctx2) {
  71696. //>>excludeEnd("ctx");
  71697. return (16)._rz();
  71698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71699. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,40)});
  71700. //>>excludeEnd("ctx");
  71701. }),$MessageNotUnderstood());
  71702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71703. $ctx1.sendIdx["should:raise:"]=40;
  71704. //>>excludeEnd("ctx");
  71705. self._should_raise_((function(){
  71706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71707. return $core.withContext(function($ctx2) {
  71708. //>>excludeEnd("ctx");
  71709. return (11259375)._Z();
  71710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71711. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,41)});
  71712. //>>excludeEnd("ctx");
  71713. }),$MessageNotUnderstood());
  71714. return self;
  71715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71716. }, function($ctx1) {$ctx1.fill(self,"testInvalidHexNumbers",{},$globals.NumberTest)});
  71717. //>>excludeEnd("ctx");
  71718. },
  71719. //>>excludeStart("ide", pragmas.excludeIdeData);
  71720. args: [],
  71721. 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.",
  71722. referencedClasses: ["MessageNotUnderstood"],
  71723. //>>excludeEnd("ide");
  71724. 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"]
  71725. }),
  71726. $globals.NumberTest);
  71727. $core.addMethod(
  71728. $core.method({
  71729. selector: "testLog",
  71730. protocol: 'tests',
  71731. fn: function (){
  71732. var self=this;
  71733. function $Number(){return $globals.Number||(typeof Number=="undefined"?nil:Number)}
  71734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71735. return $core.withContext(function($ctx1) {
  71736. //>>excludeEnd("ctx");
  71737. self._assert_equals_((10000)._log(),(4));
  71738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71739. $ctx1.sendIdx["assert:equals:"]=1;
  71740. //>>excludeEnd("ctx");
  71741. self._assert_equals_((512)._log_((2)),(9));
  71742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71743. $ctx1.sendIdx["assert:equals:"]=2;
  71744. //>>excludeEnd("ctx");
  71745. self._assert_equals_($recv($recv($Number())._e())._ln(),(1));
  71746. return self;
  71747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71748. }, function($ctx1) {$ctx1.fill(self,"testLog",{},$globals.NumberTest)});
  71749. //>>excludeEnd("ctx");
  71750. },
  71751. //>>excludeStart("ide", pragmas.excludeIdeData);
  71752. args: [],
  71753. 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.",
  71754. referencedClasses: ["Number"],
  71755. //>>excludeEnd("ide");
  71756. messageSends: ["assert:equals:", "log", "log:", "ln", "e"]
  71757. }),
  71758. $globals.NumberTest);
  71759. $core.addMethod(
  71760. $core.method({
  71761. selector: "testMinMax",
  71762. protocol: 'tests',
  71763. fn: function (){
  71764. var self=this;
  71765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71766. return $core.withContext(function($ctx1) {
  71767. //>>excludeEnd("ctx");
  71768. self._assert_equals_((2)._max_((5)),(5));
  71769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71770. $ctx1.sendIdx["assert:equals:"]=1;
  71771. //>>excludeEnd("ctx");
  71772. self._assert_equals_((2)._min_((5)),(2));
  71773. return self;
  71774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71775. }, function($ctx1) {$ctx1.fill(self,"testMinMax",{},$globals.NumberTest)});
  71776. //>>excludeEnd("ctx");
  71777. },
  71778. //>>excludeStart("ide", pragmas.excludeIdeData);
  71779. args: [],
  71780. source: "testMinMax\x0a\x09\x0a\x09self assert: (2 max: 5) equals: 5.\x0a\x09self assert: (2 min: 5) equals: 2",
  71781. referencedClasses: [],
  71782. //>>excludeEnd("ide");
  71783. messageSends: ["assert:equals:", "max:", "min:"]
  71784. }),
  71785. $globals.NumberTest);
  71786. $core.addMethod(
  71787. $core.method({
  71788. selector: "testNegated",
  71789. protocol: 'tests',
  71790. fn: function (){
  71791. var self=this;
  71792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71793. return $core.withContext(function($ctx1) {
  71794. //>>excludeEnd("ctx");
  71795. var $1;
  71796. $1=(3)._negated();
  71797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71798. $ctx1.sendIdx["negated"]=1;
  71799. //>>excludeEnd("ctx");
  71800. self._assert_equals_($1,(-3));
  71801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71802. $ctx1.sendIdx["assert:equals:"]=1;
  71803. //>>excludeEnd("ctx");
  71804. self._assert_equals_((-3)._negated(),(3));
  71805. return self;
  71806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71807. }, function($ctx1) {$ctx1.fill(self,"testNegated",{},$globals.NumberTest)});
  71808. //>>excludeEnd("ctx");
  71809. },
  71810. //>>excludeStart("ide", pragmas.excludeIdeData);
  71811. args: [],
  71812. source: "testNegated\x0a\x09self assert: 3 negated equals: -3.\x0a\x09self assert: -3 negated equals: 3",
  71813. referencedClasses: [],
  71814. //>>excludeEnd("ide");
  71815. messageSends: ["assert:equals:", "negated"]
  71816. }),
  71817. $globals.NumberTest);
  71818. $core.addMethod(
  71819. $core.method({
  71820. selector: "testPrintShowingDecimalPlaces",
  71821. protocol: 'tests',
  71822. fn: function (){
  71823. var self=this;
  71824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71825. return $core.withContext(function($ctx1) {
  71826. //>>excludeEnd("ctx");
  71827. var $1,$2,$4,$3,$5,$6,$8,$7,$10,$9,$11,$12,$13,$14,$15;
  71828. $1=(23)._printShowingDecimalPlaces_((2));
  71829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71830. $ctx1.sendIdx["printShowingDecimalPlaces:"]=1;
  71831. //>>excludeEnd("ctx");
  71832. self._assert_equals_($1,"23.00");
  71833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71834. $ctx1.sendIdx["assert:equals:"]=1;
  71835. //>>excludeEnd("ctx");
  71836. $2=(23.5698)._printShowingDecimalPlaces_((2));
  71837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71838. $ctx1.sendIdx["printShowingDecimalPlaces:"]=2;
  71839. //>>excludeEnd("ctx");
  71840. self._assert_equals_($2,"23.57");
  71841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71842. $ctx1.sendIdx["assert:equals:"]=2;
  71843. //>>excludeEnd("ctx");
  71844. $4=(234.567)._negated();
  71845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71846. $ctx1.sendIdx["negated"]=1;
  71847. //>>excludeEnd("ctx");
  71848. $3=$recv($4)._printShowingDecimalPlaces_((5));
  71849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71850. $ctx1.sendIdx["printShowingDecimalPlaces:"]=3;
  71851. //>>excludeEnd("ctx");
  71852. self._assert_equals_($3,"-234.56700");
  71853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71854. $ctx1.sendIdx["assert:equals:"]=3;
  71855. //>>excludeEnd("ctx");
  71856. $5=(23.4567)._printShowingDecimalPlaces_((0));
  71857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71858. $ctx1.sendIdx["printShowingDecimalPlaces:"]=4;
  71859. //>>excludeEnd("ctx");
  71860. self._assert_equals_($5,"23");
  71861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71862. $ctx1.sendIdx["assert:equals:"]=4;
  71863. //>>excludeEnd("ctx");
  71864. $6=(23.5567)._printShowingDecimalPlaces_((0));
  71865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71866. $ctx1.sendIdx["printShowingDecimalPlaces:"]=5;
  71867. //>>excludeEnd("ctx");
  71868. self._assert_equals_($6,"24");
  71869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71870. $ctx1.sendIdx["assert:equals:"]=5;
  71871. //>>excludeEnd("ctx");
  71872. $8=(23.4567)._negated();
  71873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71874. $ctx1.sendIdx["negated"]=2;
  71875. //>>excludeEnd("ctx");
  71876. $7=$recv($8)._printShowingDecimalPlaces_((0));
  71877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71878. $ctx1.sendIdx["printShowingDecimalPlaces:"]=6;
  71879. //>>excludeEnd("ctx");
  71880. self._assert_equals_($7,"-23");
  71881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71882. $ctx1.sendIdx["assert:equals:"]=6;
  71883. //>>excludeEnd("ctx");
  71884. $10=(23.5567)._negated();
  71885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71886. $ctx1.sendIdx["negated"]=3;
  71887. //>>excludeEnd("ctx");
  71888. $9=$recv($10)._printShowingDecimalPlaces_((0));
  71889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71890. $ctx1.sendIdx["printShowingDecimalPlaces:"]=7;
  71891. //>>excludeEnd("ctx");
  71892. self._assert_equals_($9,"-24");
  71893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71894. $ctx1.sendIdx["assert:equals:"]=7;
  71895. //>>excludeEnd("ctx");
  71896. $11=(100000000)._printShowingDecimalPlaces_((1));
  71897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71898. $ctx1.sendIdx["printShowingDecimalPlaces:"]=8;
  71899. //>>excludeEnd("ctx");
  71900. self._assert_equals_($11,"100000000.0");
  71901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71902. $ctx1.sendIdx["assert:equals:"]=8;
  71903. //>>excludeEnd("ctx");
  71904. $12=(0.98)._printShowingDecimalPlaces_((5));
  71905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71906. $ctx1.sendIdx["printShowingDecimalPlaces:"]=9;
  71907. //>>excludeEnd("ctx");
  71908. self._assert_equals_($12,"0.98000");
  71909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71910. $ctx1.sendIdx["assert:equals:"]=9;
  71911. //>>excludeEnd("ctx");
  71912. $13=$recv((0.98)._negated())._printShowingDecimalPlaces_((2));
  71913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71914. $ctx1.sendIdx["printShowingDecimalPlaces:"]=10;
  71915. //>>excludeEnd("ctx");
  71916. self._assert_equals_($13,"-0.98");
  71917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71918. $ctx1.sendIdx["assert:equals:"]=10;
  71919. //>>excludeEnd("ctx");
  71920. $14=(2.567)._printShowingDecimalPlaces_((2));
  71921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71922. $ctx1.sendIdx["printShowingDecimalPlaces:"]=11;
  71923. //>>excludeEnd("ctx");
  71924. self._assert_equals_($14,"2.57");
  71925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71926. $ctx1.sendIdx["assert:equals:"]=11;
  71927. //>>excludeEnd("ctx");
  71928. $15=(-2.567)._printShowingDecimalPlaces_((2));
  71929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71930. $ctx1.sendIdx["printShowingDecimalPlaces:"]=12;
  71931. //>>excludeEnd("ctx");
  71932. self._assert_equals_($15,"-2.57");
  71933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71934. $ctx1.sendIdx["assert:equals:"]=12;
  71935. //>>excludeEnd("ctx");
  71936. self._assert_equals_((0)._printShowingDecimalPlaces_((2)),"0.00");
  71937. return self;
  71938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71939. }, function($ctx1) {$ctx1.fill(self,"testPrintShowingDecimalPlaces",{},$globals.NumberTest)});
  71940. //>>excludeEnd("ctx");
  71941. },
  71942. //>>excludeStart("ide", pragmas.excludeIdeData);
  71943. args: [],
  71944. 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'.",
  71945. referencedClasses: [],
  71946. //>>excludeEnd("ide");
  71947. messageSends: ["assert:equals:", "printShowingDecimalPlaces:", "negated"]
  71948. }),
  71949. $globals.NumberTest);
  71950. $core.addMethod(
  71951. $core.method({
  71952. selector: "testRaisedTo",
  71953. protocol: 'tests',
  71954. fn: function (){
  71955. var self=this;
  71956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71957. return $core.withContext(function($ctx1) {
  71958. //>>excludeEnd("ctx");
  71959. var $1,$2,$3;
  71960. $1=(2)._raisedTo_((4));
  71961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71962. $ctx1.sendIdx["raisedTo:"]=1;
  71963. //>>excludeEnd("ctx");
  71964. self._assert_equals_($1,(16));
  71965. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71966. $ctx1.sendIdx["assert:equals:"]=1;
  71967. //>>excludeEnd("ctx");
  71968. $2=(2)._raisedTo_((0));
  71969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71970. $ctx1.sendIdx["raisedTo:"]=2;
  71971. //>>excludeEnd("ctx");
  71972. self._assert_equals_($2,(1));
  71973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71974. $ctx1.sendIdx["assert:equals:"]=2;
  71975. //>>excludeEnd("ctx");
  71976. $3=(2)._raisedTo_((-3));
  71977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71978. $ctx1.sendIdx["raisedTo:"]=3;
  71979. //>>excludeEnd("ctx");
  71980. self._assert_equals_($3,(0.125));
  71981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71982. $ctx1.sendIdx["assert:equals:"]=3;
  71983. //>>excludeEnd("ctx");
  71984. self._assert_equals_((4)._raisedTo_((0.5)),(2));
  71985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71986. $ctx1.sendIdx["assert:equals:"]=4;
  71987. //>>excludeEnd("ctx");
  71988. self._assert_equals_((2).__star_star((4)),(16));
  71989. return self;
  71990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71991. }, function($ctx1) {$ctx1.fill(self,"testRaisedTo",{},$globals.NumberTest)});
  71992. //>>excludeEnd("ctx");
  71993. },
  71994. //>>excludeStart("ide", pragmas.excludeIdeData);
  71995. args: [],
  71996. 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.",
  71997. referencedClasses: [],
  71998. //>>excludeEnd("ide");
  71999. messageSends: ["assert:equals:", "raisedTo:", "**"]
  72000. }),
  72001. $globals.NumberTest);
  72002. $core.addMethod(
  72003. $core.method({
  72004. selector: "testRounded",
  72005. protocol: 'tests',
  72006. fn: function (){
  72007. var self=this;
  72008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72009. return $core.withContext(function($ctx1) {
  72010. //>>excludeEnd("ctx");
  72011. var $1,$2;
  72012. $1=(3)._rounded();
  72013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72014. $ctx1.sendIdx["rounded"]=1;
  72015. //>>excludeEnd("ctx");
  72016. self._assert_equals_($1,(3));
  72017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72018. $ctx1.sendIdx["assert:equals:"]=1;
  72019. //>>excludeEnd("ctx");
  72020. $2=(3.212)._rounded();
  72021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72022. $ctx1.sendIdx["rounded"]=2;
  72023. //>>excludeEnd("ctx");
  72024. self._assert_equals_($2,(3));
  72025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72026. $ctx1.sendIdx["assert:equals:"]=2;
  72027. //>>excludeEnd("ctx");
  72028. self._assert_equals_((3.51)._rounded(),(4));
  72029. return self;
  72030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72031. }, function($ctx1) {$ctx1.fill(self,"testRounded",{},$globals.NumberTest)});
  72032. //>>excludeEnd("ctx");
  72033. },
  72034. //>>excludeStart("ide", pragmas.excludeIdeData);
  72035. args: [],
  72036. 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",
  72037. referencedClasses: [],
  72038. //>>excludeEnd("ide");
  72039. messageSends: ["assert:equals:", "rounded"]
  72040. }),
  72041. $globals.NumberTest);
  72042. $core.addMethod(
  72043. $core.method({
  72044. selector: "testSign",
  72045. protocol: 'tests',
  72046. fn: function (){
  72047. var self=this;
  72048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72049. return $core.withContext(function($ctx1) {
  72050. //>>excludeEnd("ctx");
  72051. var $1,$2;
  72052. $1=(5)._sign();
  72053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72054. $ctx1.sendIdx["sign"]=1;
  72055. //>>excludeEnd("ctx");
  72056. self._assert_equals_($1,(1));
  72057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72058. $ctx1.sendIdx["assert:equals:"]=1;
  72059. //>>excludeEnd("ctx");
  72060. $2=(0)._sign();
  72061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72062. $ctx1.sendIdx["sign"]=2;
  72063. //>>excludeEnd("ctx");
  72064. self._assert_equals_($2,(0));
  72065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72066. $ctx1.sendIdx["assert:equals:"]=2;
  72067. //>>excludeEnd("ctx");
  72068. self._assert_equals_((-1.4)._sign(),(-1));
  72069. return self;
  72070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72071. }, function($ctx1) {$ctx1.fill(self,"testSign",{},$globals.NumberTest)});
  72072. //>>excludeEnd("ctx");
  72073. },
  72074. //>>excludeStart("ide", pragmas.excludeIdeData);
  72075. args: [],
  72076. source: "testSign\x0a\x09self assert: 5 sign equals: 1.\x0a\x09self assert: 0 sign equals: 0.\x0a\x09self assert: -1.4 sign equals: -1.",
  72077. referencedClasses: [],
  72078. //>>excludeEnd("ide");
  72079. messageSends: ["assert:equals:", "sign"]
  72080. }),
  72081. $globals.NumberTest);
  72082. $core.addMethod(
  72083. $core.method({
  72084. selector: "testSqrt",
  72085. protocol: 'tests',
  72086. fn: function (){
  72087. var self=this;
  72088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72089. return $core.withContext(function($ctx1) {
  72090. //>>excludeEnd("ctx");
  72091. var $1;
  72092. $1=(4)._sqrt();
  72093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72094. $ctx1.sendIdx["sqrt"]=1;
  72095. //>>excludeEnd("ctx");
  72096. self._assert_equals_($1,(2));
  72097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72098. $ctx1.sendIdx["assert:equals:"]=1;
  72099. //>>excludeEnd("ctx");
  72100. self._assert_equals_((16)._sqrt(),(4));
  72101. return self;
  72102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72103. }, function($ctx1) {$ctx1.fill(self,"testSqrt",{},$globals.NumberTest)});
  72104. //>>excludeEnd("ctx");
  72105. },
  72106. //>>excludeStart("ide", pragmas.excludeIdeData);
  72107. args: [],
  72108. source: "testSqrt\x0a\x09\x0a\x09self assert: 4 sqrt equals: 2.\x0a\x09self assert: 16 sqrt equals: 4",
  72109. referencedClasses: [],
  72110. //>>excludeEnd("ide");
  72111. messageSends: ["assert:equals:", "sqrt"]
  72112. }),
  72113. $globals.NumberTest);
  72114. $core.addMethod(
  72115. $core.method({
  72116. selector: "testSquared",
  72117. protocol: 'tests',
  72118. fn: function (){
  72119. var self=this;
  72120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72121. return $core.withContext(function($ctx1) {
  72122. //>>excludeEnd("ctx");
  72123. self._assert_equals_((4)._squared(),(16));
  72124. return self;
  72125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72126. }, function($ctx1) {$ctx1.fill(self,"testSquared",{},$globals.NumberTest)});
  72127. //>>excludeEnd("ctx");
  72128. },
  72129. //>>excludeStart("ide", pragmas.excludeIdeData);
  72130. args: [],
  72131. source: "testSquared\x0a\x09\x0a\x09self assert: 4 squared equals: 16",
  72132. referencedClasses: [],
  72133. //>>excludeEnd("ide");
  72134. messageSends: ["assert:equals:", "squared"]
  72135. }),
  72136. $globals.NumberTest);
  72137. $core.addMethod(
  72138. $core.method({
  72139. selector: "testTimesRepeat",
  72140. protocol: 'tests',
  72141. fn: function (){
  72142. var self=this;
  72143. var i;
  72144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72145. return $core.withContext(function($ctx1) {
  72146. //>>excludeEnd("ctx");
  72147. i=(0);
  72148. (0)._timesRepeat_((function(){
  72149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72150. return $core.withContext(function($ctx2) {
  72151. //>>excludeEnd("ctx");
  72152. i=$recv(i).__plus((1));
  72153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72154. $ctx2.sendIdx["+"]=1;
  72155. //>>excludeEnd("ctx");
  72156. return i;
  72157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72158. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  72159. //>>excludeEnd("ctx");
  72160. }));
  72161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72162. $ctx1.sendIdx["timesRepeat:"]=1;
  72163. //>>excludeEnd("ctx");
  72164. self._assert_equals_(i,(0));
  72165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72166. $ctx1.sendIdx["assert:equals:"]=1;
  72167. //>>excludeEnd("ctx");
  72168. (5)._timesRepeat_((function(){
  72169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72170. return $core.withContext(function($ctx2) {
  72171. //>>excludeEnd("ctx");
  72172. i=$recv(i).__plus((1));
  72173. return i;
  72174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72175. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  72176. //>>excludeEnd("ctx");
  72177. }));
  72178. self._assert_equals_(i,(5));
  72179. return self;
  72180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72181. }, function($ctx1) {$ctx1.fill(self,"testTimesRepeat",{i:i},$globals.NumberTest)});
  72182. //>>excludeEnd("ctx");
  72183. },
  72184. //>>excludeStart("ide", pragmas.excludeIdeData);
  72185. args: [],
  72186. 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",
  72187. referencedClasses: [],
  72188. //>>excludeEnd("ide");
  72189. messageSends: ["timesRepeat:", "+", "assert:equals:"]
  72190. }),
  72191. $globals.NumberTest);
  72192. $core.addMethod(
  72193. $core.method({
  72194. selector: "testTo",
  72195. protocol: 'tests',
  72196. fn: function (){
  72197. var self=this;
  72198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72199. return $core.withContext(function($ctx1) {
  72200. //>>excludeEnd("ctx");
  72201. self._assert_equals_((1)._to_((5)),[(1), (2), (3), (4), (5)]);
  72202. return self;
  72203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72204. }, function($ctx1) {$ctx1.fill(self,"testTo",{},$globals.NumberTest)});
  72205. //>>excludeEnd("ctx");
  72206. },
  72207. //>>excludeStart("ide", pragmas.excludeIdeData);
  72208. args: [],
  72209. source: "testTo\x0a\x09self assert: (1 to: 5) equals: #(1 2 3 4 5)",
  72210. referencedClasses: [],
  72211. //>>excludeEnd("ide");
  72212. messageSends: ["assert:equals:", "to:"]
  72213. }),
  72214. $globals.NumberTest);
  72215. $core.addMethod(
  72216. $core.method({
  72217. selector: "testToBy",
  72218. protocol: 'tests',
  72219. fn: function (){
  72220. var self=this;
  72221. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  72222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72223. return $core.withContext(function($ctx1) {
  72224. //>>excludeEnd("ctx");
  72225. var $1;
  72226. $1=(0)._to_by_((6),(2));
  72227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72228. $ctx1.sendIdx["to:by:"]=1;
  72229. //>>excludeEnd("ctx");
  72230. self._assert_equals_($1,[(0), (2), (4), (6)]);
  72231. self._should_raise_((function(){
  72232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72233. return $core.withContext(function($ctx2) {
  72234. //>>excludeEnd("ctx");
  72235. return (1)._to_by_((4),(0));
  72236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72237. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  72238. //>>excludeEnd("ctx");
  72239. }),$Error());
  72240. return self;
  72241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72242. }, function($ctx1) {$ctx1.fill(self,"testToBy",{},$globals.NumberTest)});
  72243. //>>excludeEnd("ctx");
  72244. },
  72245. //>>excludeStart("ide", pragmas.excludeIdeData);
  72246. args: [],
  72247. 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",
  72248. referencedClasses: ["Error"],
  72249. //>>excludeEnd("ide");
  72250. messageSends: ["assert:equals:", "to:by:", "should:raise:"]
  72251. }),
  72252. $globals.NumberTest);
  72253. $core.addMethod(
  72254. $core.method({
  72255. selector: "testTrigonometry",
  72256. protocol: 'tests',
  72257. fn: function (){
  72258. var self=this;
  72259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72260. return $core.withContext(function($ctx1) {
  72261. //>>excludeEnd("ctx");
  72262. self._assert_equals_((0)._cos(),(1));
  72263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72264. $ctx1.sendIdx["assert:equals:"]=1;
  72265. //>>excludeEnd("ctx");
  72266. self._assert_equals_((0)._sin(),(0));
  72267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72268. $ctx1.sendIdx["assert:equals:"]=2;
  72269. //>>excludeEnd("ctx");
  72270. self._assert_equals_((0)._tan(),(0));
  72271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72272. $ctx1.sendIdx["assert:equals:"]=3;
  72273. //>>excludeEnd("ctx");
  72274. self._assert_equals_((1)._arcCos(),(0));
  72275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72276. $ctx1.sendIdx["assert:equals:"]=4;
  72277. //>>excludeEnd("ctx");
  72278. self._assert_equals_((0)._arcSin(),(0));
  72279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72280. $ctx1.sendIdx["assert:equals:"]=5;
  72281. //>>excludeEnd("ctx");
  72282. self._assert_equals_((0)._arcTan(),(0));
  72283. return self;
  72284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72285. }, function($ctx1) {$ctx1.fill(self,"testTrigonometry",{},$globals.NumberTest)});
  72286. //>>excludeEnd("ctx");
  72287. },
  72288. //>>excludeStart("ide", pragmas.excludeIdeData);
  72289. args: [],
  72290. 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.",
  72291. referencedClasses: [],
  72292. //>>excludeEnd("ide");
  72293. messageSends: ["assert:equals:", "cos", "sin", "tan", "arcCos", "arcSin", "arcTan"]
  72294. }),
  72295. $globals.NumberTest);
  72296. $core.addMethod(
  72297. $core.method({
  72298. selector: "testTruncated",
  72299. protocol: 'tests',
  72300. fn: function (){
  72301. var self=this;
  72302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72303. return $core.withContext(function($ctx1) {
  72304. //>>excludeEnd("ctx");
  72305. var $1,$2;
  72306. $1=(3)._truncated();
  72307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72308. $ctx1.sendIdx["truncated"]=1;
  72309. //>>excludeEnd("ctx");
  72310. self._assert_equals_($1,(3));
  72311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72312. $ctx1.sendIdx["assert:equals:"]=1;
  72313. //>>excludeEnd("ctx");
  72314. $2=(3.212)._truncated();
  72315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72316. $ctx1.sendIdx["truncated"]=2;
  72317. //>>excludeEnd("ctx");
  72318. self._assert_equals_($2,(3));
  72319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72320. $ctx1.sendIdx["assert:equals:"]=2;
  72321. //>>excludeEnd("ctx");
  72322. self._assert_equals_((3.51)._truncated(),(3));
  72323. return self;
  72324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72325. }, function($ctx1) {$ctx1.fill(self,"testTruncated",{},$globals.NumberTest)});
  72326. //>>excludeEnd("ctx");
  72327. },
  72328. //>>excludeStart("ide", pragmas.excludeIdeData);
  72329. args: [],
  72330. 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",
  72331. referencedClasses: [],
  72332. //>>excludeEnd("ide");
  72333. messageSends: ["assert:equals:", "truncated"]
  72334. }),
  72335. $globals.NumberTest);
  72336. $core.addClass('ObjectMock', $globals.Object, ['foo', 'bar'], 'Kernel-Tests');
  72337. //>>excludeStart("ide", pragmas.excludeIdeData);
  72338. $globals.ObjectMock.comment="ObjectMock is there only to perform tests on classes.";
  72339. //>>excludeEnd("ide");
  72340. $core.addMethod(
  72341. $core.method({
  72342. selector: "foo",
  72343. protocol: 'not yet classified',
  72344. fn: function (){
  72345. var self=this;
  72346. var $1;
  72347. $1=self["@foo"];
  72348. return $1;
  72349. },
  72350. //>>excludeStart("ide", pragmas.excludeIdeData);
  72351. args: [],
  72352. source: "foo\x0a\x09^ foo",
  72353. referencedClasses: [],
  72354. //>>excludeEnd("ide");
  72355. messageSends: []
  72356. }),
  72357. $globals.ObjectMock);
  72358. $core.addMethod(
  72359. $core.method({
  72360. selector: "foo:",
  72361. protocol: 'not yet classified',
  72362. fn: function (anObject){
  72363. var self=this;
  72364. self["@foo"]=anObject;
  72365. return self;
  72366. },
  72367. //>>excludeStart("ide", pragmas.excludeIdeData);
  72368. args: ["anObject"],
  72369. source: "foo: anObject\x0a\x09foo := anObject",
  72370. referencedClasses: [],
  72371. //>>excludeEnd("ide");
  72372. messageSends: []
  72373. }),
  72374. $globals.ObjectMock);
  72375. $core.addClass('ObjectTest', $globals.TestCase, [], 'Kernel-Tests');
  72376. $core.addMethod(
  72377. $core.method({
  72378. selector: "notDefined",
  72379. protocol: 'tests',
  72380. fn: function (){
  72381. var self=this;
  72382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72383. return $core.withContext(function($ctx1) {
  72384. //>>excludeEnd("ctx");
  72385. return void 0;;
  72386. return self;
  72387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72388. }, function($ctx1) {$ctx1.fill(self,"notDefined",{},$globals.ObjectTest)});
  72389. //>>excludeEnd("ctx");
  72390. },
  72391. //>>excludeStart("ide", pragmas.excludeIdeData);
  72392. args: [],
  72393. source: "notDefined\x0a\x09<return void 0;>",
  72394. referencedClasses: [],
  72395. //>>excludeEnd("ide");
  72396. messageSends: []
  72397. }),
  72398. $globals.ObjectTest);
  72399. $core.addMethod(
  72400. $core.method({
  72401. selector: "testBasicAccess",
  72402. protocol: 'tests',
  72403. fn: function (){
  72404. var self=this;
  72405. var o;
  72406. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  72407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72408. return $core.withContext(function($ctx1) {
  72409. //>>excludeEnd("ctx");
  72410. var $1;
  72411. o=$recv($Object())._new();
  72412. $recv(o)._basicAt_put_("a",(1));
  72413. $1=$recv(o)._basicAt_("a");
  72414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72415. $ctx1.sendIdx["basicAt:"]=1;
  72416. //>>excludeEnd("ctx");
  72417. self._assert_equals_($1,(1));
  72418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72419. $ctx1.sendIdx["assert:equals:"]=1;
  72420. //>>excludeEnd("ctx");
  72421. self._assert_equals_($recv(o)._basicAt_("b"),nil);
  72422. return self;
  72423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72424. }, function($ctx1) {$ctx1.fill(self,"testBasicAccess",{o:o},$globals.ObjectTest)});
  72425. //>>excludeEnd("ctx");
  72426. },
  72427. //>>excludeStart("ide", pragmas.excludeIdeData);
  72428. args: [],
  72429. 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",
  72430. referencedClasses: ["Object"],
  72431. //>>excludeEnd("ide");
  72432. messageSends: ["new", "basicAt:put:", "assert:equals:", "basicAt:"]
  72433. }),
  72434. $globals.ObjectTest);
  72435. $core.addMethod(
  72436. $core.method({
  72437. selector: "testBasicPerform",
  72438. protocol: 'tests',
  72439. fn: function (){
  72440. var self=this;
  72441. var o;
  72442. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  72443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72444. return $core.withContext(function($ctx1) {
  72445. //>>excludeEnd("ctx");
  72446. o=$recv($Object())._new();
  72447. $recv(o)._basicAt_put_("func",(function(){
  72448. return "hello";
  72449. }));
  72450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72451. $ctx1.sendIdx["basicAt:put:"]=1;
  72452. //>>excludeEnd("ctx");
  72453. $recv(o)._basicAt_put_("func2",(function(a){
  72454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72455. return $core.withContext(function($ctx2) {
  72456. //>>excludeEnd("ctx");
  72457. return $recv(a).__plus((1));
  72458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72459. }, function($ctx2) {$ctx2.fillBlock({a:a},$ctx1,2)});
  72460. //>>excludeEnd("ctx");
  72461. }));
  72462. self._assert_equals_($recv(o)._basicPerform_("func"),"hello");
  72463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72464. $ctx1.sendIdx["assert:equals:"]=1;
  72465. //>>excludeEnd("ctx");
  72466. self._assert_equals_($recv(o)._basicPerform_withArguments_("func2",[(3)]),(4));
  72467. return self;
  72468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72469. }, function($ctx1) {$ctx1.fill(self,"testBasicPerform",{o:o},$globals.ObjectTest)});
  72470. //>>excludeEnd("ctx");
  72471. },
  72472. //>>excludeStart("ide", pragmas.excludeIdeData);
  72473. args: [],
  72474. 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",
  72475. referencedClasses: ["Object"],
  72476. //>>excludeEnd("ide");
  72477. messageSends: ["new", "basicAt:put:", "+", "assert:equals:", "basicPerform:", "basicPerform:withArguments:"]
  72478. }),
  72479. $globals.ObjectTest);
  72480. $core.addMethod(
  72481. $core.method({
  72482. selector: "testDNU",
  72483. protocol: 'tests',
  72484. fn: function (){
  72485. var self=this;
  72486. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  72487. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  72488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72489. return $core.withContext(function($ctx1) {
  72490. //>>excludeEnd("ctx");
  72491. self._should_raise_((function(){
  72492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72493. return $core.withContext(function($ctx2) {
  72494. //>>excludeEnd("ctx");
  72495. return $recv($recv($Object())._new())._foo();
  72496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72497. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  72498. //>>excludeEnd("ctx");
  72499. }),$MessageNotUnderstood());
  72500. return self;
  72501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72502. }, function($ctx1) {$ctx1.fill(self,"testDNU",{},$globals.ObjectTest)});
  72503. //>>excludeEnd("ctx");
  72504. },
  72505. //>>excludeStart("ide", pragmas.excludeIdeData);
  72506. args: [],
  72507. source: "testDNU\x0a\x09self should: [ Object new foo ] raise: MessageNotUnderstood",
  72508. referencedClasses: ["Object", "MessageNotUnderstood"],
  72509. //>>excludeEnd("ide");
  72510. messageSends: ["should:raise:", "foo", "new"]
  72511. }),
  72512. $globals.ObjectTest);
  72513. $core.addMethod(
  72514. $core.method({
  72515. selector: "testEquality",
  72516. protocol: 'tests',
  72517. fn: function (){
  72518. var self=this;
  72519. var o;
  72520. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  72521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72522. return $core.withContext(function($ctx1) {
  72523. //>>excludeEnd("ctx");
  72524. var $1,$2,$4,$3;
  72525. o=$recv($Object())._new();
  72526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72527. $ctx1.sendIdx["new"]=1;
  72528. //>>excludeEnd("ctx");
  72529. $1=$recv(o).__eq($recv($Object())._new());
  72530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72531. $ctx1.sendIdx["="]=1;
  72532. //>>excludeEnd("ctx");
  72533. self._deny_($1);
  72534. $2=$recv(o).__eq(o);
  72535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72536. $ctx1.sendIdx["="]=2;
  72537. //>>excludeEnd("ctx");
  72538. self._assert_($2);
  72539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72540. $ctx1.sendIdx["assert:"]=1;
  72541. //>>excludeEnd("ctx");
  72542. $4=$recv(o)._yourself();
  72543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72544. $ctx1.sendIdx["yourself"]=1;
  72545. //>>excludeEnd("ctx");
  72546. $3=$recv($4).__eq(o);
  72547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72548. $ctx1.sendIdx["="]=3;
  72549. //>>excludeEnd("ctx");
  72550. self._assert_($3);
  72551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72552. $ctx1.sendIdx["assert:"]=2;
  72553. //>>excludeEnd("ctx");
  72554. self._assert_($recv(o).__eq($recv(o)._yourself()));
  72555. return self;
  72556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72557. }, function($ctx1) {$ctx1.fill(self,"testEquality",{o:o},$globals.ObjectTest)});
  72558. //>>excludeEnd("ctx");
  72559. },
  72560. //>>excludeStart("ide", pragmas.excludeIdeData);
  72561. args: [],
  72562. 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)",
  72563. referencedClasses: ["Object"],
  72564. //>>excludeEnd("ide");
  72565. messageSends: ["new", "deny:", "=", "assert:", "yourself"]
  72566. }),
  72567. $globals.ObjectTest);
  72568. $core.addMethod(
  72569. $core.method({
  72570. selector: "testHalt",
  72571. protocol: 'tests',
  72572. fn: function (){
  72573. var self=this;
  72574. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  72575. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  72576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72577. return $core.withContext(function($ctx1) {
  72578. //>>excludeEnd("ctx");
  72579. self._should_raise_((function(){
  72580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72581. return $core.withContext(function($ctx2) {
  72582. //>>excludeEnd("ctx");
  72583. return $recv($recv($Object())._new())._halt();
  72584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72585. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  72586. //>>excludeEnd("ctx");
  72587. }),$Error());
  72588. return self;
  72589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72590. }, function($ctx1) {$ctx1.fill(self,"testHalt",{},$globals.ObjectTest)});
  72591. //>>excludeEnd("ctx");
  72592. },
  72593. //>>excludeStart("ide", pragmas.excludeIdeData);
  72594. args: [],
  72595. source: "testHalt\x0a\x09self should: [ Object new halt ] raise: Error",
  72596. referencedClasses: ["Object", "Error"],
  72597. //>>excludeEnd("ide");
  72598. messageSends: ["should:raise:", "halt", "new"]
  72599. }),
  72600. $globals.ObjectTest);
  72601. $core.addMethod(
  72602. $core.method({
  72603. selector: "testIdentity",
  72604. protocol: 'tests',
  72605. fn: function (){
  72606. var self=this;
  72607. var o;
  72608. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  72609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72610. return $core.withContext(function($ctx1) {
  72611. //>>excludeEnd("ctx");
  72612. var $1,$2,$4,$3;
  72613. o=$recv($Object())._new();
  72614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72615. $ctx1.sendIdx["new"]=1;
  72616. //>>excludeEnd("ctx");
  72617. $1=$recv(o).__eq_eq($recv($Object())._new());
  72618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72619. $ctx1.sendIdx["=="]=1;
  72620. //>>excludeEnd("ctx");
  72621. self._deny_($1);
  72622. $2=$recv(o).__eq_eq(o);
  72623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72624. $ctx1.sendIdx["=="]=2;
  72625. //>>excludeEnd("ctx");
  72626. self._assert_($2);
  72627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72628. $ctx1.sendIdx["assert:"]=1;
  72629. //>>excludeEnd("ctx");
  72630. $4=$recv(o)._yourself();
  72631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72632. $ctx1.sendIdx["yourself"]=1;
  72633. //>>excludeEnd("ctx");
  72634. $3=$recv($4).__eq_eq(o);
  72635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72636. $ctx1.sendIdx["=="]=3;
  72637. //>>excludeEnd("ctx");
  72638. self._assert_($3);
  72639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72640. $ctx1.sendIdx["assert:"]=2;
  72641. //>>excludeEnd("ctx");
  72642. self._assert_($recv(o).__eq_eq($recv(o)._yourself()));
  72643. return self;
  72644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72645. }, function($ctx1) {$ctx1.fill(self,"testIdentity",{o:o},$globals.ObjectTest)});
  72646. //>>excludeEnd("ctx");
  72647. },
  72648. //>>excludeStart("ide", pragmas.excludeIdeData);
  72649. args: [],
  72650. 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",
  72651. referencedClasses: ["Object"],
  72652. //>>excludeEnd("ide");
  72653. messageSends: ["new", "deny:", "==", "assert:", "yourself"]
  72654. }),
  72655. $globals.ObjectTest);
  72656. $core.addMethod(
  72657. $core.method({
  72658. selector: "testIfNil",
  72659. protocol: 'tests',
  72660. fn: function (){
  72661. var self=this;
  72662. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  72663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72664. return $core.withContext(function($ctx1) {
  72665. //>>excludeEnd("ctx");
  72666. var $2,$1,$5,$4,$3,$7,$6,$9,$8,$11,$10,$receiver;
  72667. $2=$recv($Object())._new();
  72668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72669. $ctx1.sendIdx["new"]=1;
  72670. //>>excludeEnd("ctx");
  72671. $1=$recv($2)._isNil();
  72672. self._deny_($1);
  72673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72674. $ctx1.sendIdx["deny:"]=1;
  72675. //>>excludeEnd("ctx");
  72676. $5=$recv($Object())._new();
  72677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72678. $ctx1.sendIdx["new"]=2;
  72679. //>>excludeEnd("ctx");
  72680. if(($receiver = $5) == null || $receiver.isNil){
  72681. $4=true;
  72682. } else {
  72683. $4=$5;
  72684. };
  72685. $3=$recv($4).__eq(true);
  72686. self._deny_($3);
  72687. $7=$recv($Object())._new();
  72688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72689. $ctx1.sendIdx["new"]=3;
  72690. //>>excludeEnd("ctx");
  72691. if(($receiver = $7) == null || $receiver.isNil){
  72692. $6=$7;
  72693. } else {
  72694. $6=true;
  72695. };
  72696. self._assert_equals_($6,true);
  72697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72698. $ctx1.sendIdx["assert:equals:"]=1;
  72699. //>>excludeEnd("ctx");
  72700. $9=$recv($Object())._new();
  72701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72702. $ctx1.sendIdx["new"]=4;
  72703. //>>excludeEnd("ctx");
  72704. if(($receiver = $9) == null || $receiver.isNil){
  72705. $8=false;
  72706. } else {
  72707. $8=true;
  72708. };
  72709. self._assert_equals_($8,true);
  72710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72711. $ctx1.sendIdx["assert:equals:"]=2;
  72712. //>>excludeEnd("ctx");
  72713. $11=$recv($Object())._new();
  72714. if(($receiver = $11) == null || $receiver.isNil){
  72715. $10=false;
  72716. } else {
  72717. $10=true;
  72718. };
  72719. self._assert_equals_($10,true);
  72720. return self;
  72721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72722. }, function($ctx1) {$ctx1.fill(self,"testIfNil",{},$globals.ObjectTest)});
  72723. //>>excludeEnd("ctx");
  72724. },
  72725. //>>excludeStart("ide", pragmas.excludeIdeData);
  72726. args: [],
  72727. 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",
  72728. referencedClasses: ["Object"],
  72729. //>>excludeEnd("ide");
  72730. messageSends: ["deny:", "isNil", "new", "=", "ifNil:", "assert:equals:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"]
  72731. }),
  72732. $globals.ObjectTest);
  72733. $core.addMethod(
  72734. $core.method({
  72735. selector: "testInstVars",
  72736. protocol: 'tests',
  72737. fn: function (){
  72738. var self=this;
  72739. var o;
  72740. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  72741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72742. return $core.withContext(function($ctx1) {
  72743. //>>excludeEnd("ctx");
  72744. var $1,$2;
  72745. o=$recv($ObjectMock())._new();
  72746. $1=$recv(o)._instVarAt_("foo");
  72747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72748. $ctx1.sendIdx["instVarAt:"]=1;
  72749. //>>excludeEnd("ctx");
  72750. self._assert_equals_($1,nil);
  72751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72752. $ctx1.sendIdx["assert:equals:"]=1;
  72753. //>>excludeEnd("ctx");
  72754. $recv(o)._instVarAt_put_("foo",(1));
  72755. $2=$recv(o)._instVarAt_("foo");
  72756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72757. $ctx1.sendIdx["instVarAt:"]=2;
  72758. //>>excludeEnd("ctx");
  72759. self._assert_equals_($2,(1));
  72760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72761. $ctx1.sendIdx["assert:equals:"]=2;
  72762. //>>excludeEnd("ctx");
  72763. self._assert_equals_($recv(o)._instVarAt_("foo"),(1));
  72764. return self;
  72765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72766. }, function($ctx1) {$ctx1.fill(self,"testInstVars",{o:o},$globals.ObjectTest)});
  72767. //>>excludeEnd("ctx");
  72768. },
  72769. //>>excludeStart("ide", pragmas.excludeIdeData);
  72770. args: [],
  72771. 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",
  72772. referencedClasses: ["ObjectMock"],
  72773. //>>excludeEnd("ide");
  72774. messageSends: ["new", "assert:equals:", "instVarAt:", "instVarAt:put:"]
  72775. }),
  72776. $globals.ObjectTest);
  72777. $core.addMethod(
  72778. $core.method({
  72779. selector: "testNilUndefined",
  72780. protocol: 'tests',
  72781. fn: function (){
  72782. var self=this;
  72783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72784. return $core.withContext(function($ctx1) {
  72785. //>>excludeEnd("ctx");
  72786. self._assert_equals_(self._notDefined(),nil);
  72787. return self;
  72788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72789. }, function($ctx1) {$ctx1.fill(self,"testNilUndefined",{},$globals.ObjectTest)});
  72790. //>>excludeEnd("ctx");
  72791. },
  72792. //>>excludeStart("ide", pragmas.excludeIdeData);
  72793. args: [],
  72794. source: "testNilUndefined\x0a\x09\x22nil in Smalltalk is the undefined object in JS\x22\x0a\x0a\x09self assert: self notDefined equals: nil",
  72795. referencedClasses: [],
  72796. //>>excludeEnd("ide");
  72797. messageSends: ["assert:equals:", "notDefined"]
  72798. }),
  72799. $globals.ObjectTest);
  72800. $core.addMethod(
  72801. $core.method({
  72802. selector: "testYourself",
  72803. protocol: 'tests',
  72804. fn: function (){
  72805. var self=this;
  72806. var o;
  72807. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  72808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72809. return $core.withContext(function($ctx1) {
  72810. //>>excludeEnd("ctx");
  72811. o=$recv($ObjectMock())._new();
  72812. self._assert_($recv($recv(o)._yourself()).__eq_eq(o));
  72813. return self;
  72814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72815. }, function($ctx1) {$ctx1.fill(self,"testYourself",{o:o},$globals.ObjectTest)});
  72816. //>>excludeEnd("ctx");
  72817. },
  72818. //>>excludeStart("ide", pragmas.excludeIdeData);
  72819. args: [],
  72820. source: "testYourself\x0a\x09| o |\x0a\x09o := ObjectMock new.\x0a\x09self assert: o yourself == o",
  72821. referencedClasses: ["ObjectMock"],
  72822. //>>excludeEnd("ide");
  72823. messageSends: ["new", "assert:", "==", "yourself"]
  72824. }),
  72825. $globals.ObjectTest);
  72826. $core.addMethod(
  72827. $core.method({
  72828. selector: "testidentityHash",
  72829. protocol: 'tests',
  72830. fn: function (){
  72831. var self=this;
  72832. var o1,o2;
  72833. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  72834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72835. return $core.withContext(function($ctx1) {
  72836. //>>excludeEnd("ctx");
  72837. var $2,$3,$1,$5,$4;
  72838. o1=$recv($Object())._new();
  72839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72840. $ctx1.sendIdx["new"]=1;
  72841. //>>excludeEnd("ctx");
  72842. o2=$recv($Object())._new();
  72843. $2=$recv(o1)._identityHash();
  72844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72845. $ctx1.sendIdx["identityHash"]=1;
  72846. //>>excludeEnd("ctx");
  72847. $3=$recv(o1)._identityHash();
  72848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72849. $ctx1.sendIdx["identityHash"]=2;
  72850. //>>excludeEnd("ctx");
  72851. $1=$recv($2).__eq_eq($3);
  72852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72853. $ctx1.sendIdx["=="]=1;
  72854. //>>excludeEnd("ctx");
  72855. self._assert_($1);
  72856. $5=$recv(o1)._identityHash();
  72857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72858. $ctx1.sendIdx["identityHash"]=3;
  72859. //>>excludeEnd("ctx");
  72860. $4=$recv($5).__eq_eq($recv(o2)._identityHash());
  72861. self._deny_($4);
  72862. return self;
  72863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72864. }, function($ctx1) {$ctx1.fill(self,"testidentityHash",{o1:o1,o2:o2},$globals.ObjectTest)});
  72865. //>>excludeEnd("ctx");
  72866. },
  72867. //>>excludeStart("ide", pragmas.excludeIdeData);
  72868. args: [],
  72869. 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",
  72870. referencedClasses: ["Object"],
  72871. //>>excludeEnd("ide");
  72872. messageSends: ["new", "assert:", "==", "identityHash", "deny:"]
  72873. }),
  72874. $globals.ObjectTest);
  72875. $core.addClass('PointTest', $globals.TestCase, [], 'Kernel-Tests');
  72876. $core.addMethod(
  72877. $core.method({
  72878. selector: "testAccessing",
  72879. protocol: 'tests',
  72880. fn: function (){
  72881. var self=this;
  72882. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  72883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72884. return $core.withContext(function($ctx1) {
  72885. //>>excludeEnd("ctx");
  72886. var $2,$1,$3,$6,$5,$4;
  72887. $2=$recv($Point())._x_y_((3),(4));
  72888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72889. $ctx1.sendIdx["x:y:"]=1;
  72890. //>>excludeEnd("ctx");
  72891. $1=$recv($2)._x();
  72892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72893. $ctx1.sendIdx["x"]=1;
  72894. //>>excludeEnd("ctx");
  72895. self._assert_equals_($1,(3));
  72896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72897. $ctx1.sendIdx["assert:equals:"]=1;
  72898. //>>excludeEnd("ctx");
  72899. $3=$recv($recv($Point())._x_y_((3),(4)))._y();
  72900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72901. $ctx1.sendIdx["y"]=1;
  72902. //>>excludeEnd("ctx");
  72903. self._assert_equals_($3,(4));
  72904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72905. $ctx1.sendIdx["assert:equals:"]=2;
  72906. //>>excludeEnd("ctx");
  72907. $6=$recv($Point())._new();
  72908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72909. $ctx1.sendIdx["new"]=1;
  72910. //>>excludeEnd("ctx");
  72911. $5=$recv($6)._x_((3));
  72912. $4=$recv($5)._x();
  72913. self._assert_equals_($4,(3));
  72914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72915. $ctx1.sendIdx["assert:equals:"]=3;
  72916. //>>excludeEnd("ctx");
  72917. self._assert_equals_($recv($recv($recv($Point())._new())._y_((4)))._y(),(4));
  72918. return self;
  72919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72920. }, function($ctx1) {$ctx1.fill(self,"testAccessing",{},$globals.PointTest)});
  72921. //>>excludeEnd("ctx");
  72922. },
  72923. //>>excludeStart("ide", pragmas.excludeIdeData);
  72924. args: [],
  72925. 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",
  72926. referencedClasses: ["Point"],
  72927. //>>excludeEnd("ide");
  72928. messageSends: ["assert:equals:", "x", "x:y:", "y", "x:", "new", "y:"]
  72929. }),
  72930. $globals.PointTest);
  72931. $core.addMethod(
  72932. $core.method({
  72933. selector: "testArithmetic",
  72934. protocol: 'tests',
  72935. fn: function (){
  72936. var self=this;
  72937. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  72938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72939. return $core.withContext(function($ctx1) {
  72940. //>>excludeEnd("ctx");
  72941. var $2,$3,$1,$4,$6,$7,$5,$8,$10,$11,$9,$12,$14,$13;
  72942. $2=(3).__at((4));
  72943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72944. $ctx1.sendIdx["@"]=1;
  72945. //>>excludeEnd("ctx");
  72946. $3=(3).__at((4));
  72947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72948. $ctx1.sendIdx["@"]=2;
  72949. //>>excludeEnd("ctx");
  72950. $1=$recv($2).__star($3);
  72951. $4=$recv($Point())._x_y_((9),(16));
  72952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72953. $ctx1.sendIdx["x:y:"]=1;
  72954. //>>excludeEnd("ctx");
  72955. self._assert_equals_($1,$4);
  72956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72957. $ctx1.sendIdx["assert:equals:"]=1;
  72958. //>>excludeEnd("ctx");
  72959. $6=(3).__at((4));
  72960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72961. $ctx1.sendIdx["@"]=3;
  72962. //>>excludeEnd("ctx");
  72963. $7=(3).__at((4));
  72964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72965. $ctx1.sendIdx["@"]=4;
  72966. //>>excludeEnd("ctx");
  72967. $5=$recv($6).__plus($7);
  72968. $8=$recv($Point())._x_y_((6),(8));
  72969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72970. $ctx1.sendIdx["x:y:"]=2;
  72971. //>>excludeEnd("ctx");
  72972. self._assert_equals_($5,$8);
  72973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72974. $ctx1.sendIdx["assert:equals:"]=2;
  72975. //>>excludeEnd("ctx");
  72976. $10=(3).__at((4));
  72977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72978. $ctx1.sendIdx["@"]=5;
  72979. //>>excludeEnd("ctx");
  72980. $11=(3).__at((4));
  72981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72982. $ctx1.sendIdx["@"]=6;
  72983. //>>excludeEnd("ctx");
  72984. $9=$recv($10).__minus($11);
  72985. $12=$recv($Point())._x_y_((0),(0));
  72986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72987. $ctx1.sendIdx["x:y:"]=3;
  72988. //>>excludeEnd("ctx");
  72989. self._assert_equals_($9,$12);
  72990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72991. $ctx1.sendIdx["assert:equals:"]=3;
  72992. //>>excludeEnd("ctx");
  72993. $14=(6).__at((8));
  72994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72995. $ctx1.sendIdx["@"]=7;
  72996. //>>excludeEnd("ctx");
  72997. $13=$recv($14).__slash((3).__at((4)));
  72998. self._assert_equals_($13,$recv($Point())._x_y_((2),(2)));
  72999. return self;
  73000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73001. }, function($ctx1) {$ctx1.fill(self,"testArithmetic",{},$globals.PointTest)});
  73002. //>>excludeEnd("ctx");
  73003. },
  73004. //>>excludeStart("ide", pragmas.excludeIdeData);
  73005. args: [],
  73006. 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)",
  73007. referencedClasses: ["Point"],
  73008. //>>excludeEnd("ide");
  73009. messageSends: ["assert:equals:", "*", "@", "x:y:", "+", "-", "/"]
  73010. }),
  73011. $globals.PointTest);
  73012. $core.addMethod(
  73013. $core.method({
  73014. selector: "testAt",
  73015. protocol: 'tests',
  73016. fn: function (){
  73017. var self=this;
  73018. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  73019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73020. return $core.withContext(function($ctx1) {
  73021. //>>excludeEnd("ctx");
  73022. self._assert_equals_((3).__at((4)),$recv($Point())._x_y_((3),(4)));
  73023. return self;
  73024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73025. }, function($ctx1) {$ctx1.fill(self,"testAt",{},$globals.PointTest)});
  73026. //>>excludeEnd("ctx");
  73027. },
  73028. //>>excludeStart("ide", pragmas.excludeIdeData);
  73029. args: [],
  73030. source: "testAt\x0a\x09self assert: 3@4 equals: (Point x: 3 y: 4)",
  73031. referencedClasses: ["Point"],
  73032. //>>excludeEnd("ide");
  73033. messageSends: ["assert:equals:", "@", "x:y:"]
  73034. }),
  73035. $globals.PointTest);
  73036. $core.addMethod(
  73037. $core.method({
  73038. selector: "testComparison",
  73039. protocol: 'tests',
  73040. fn: function (){
  73041. var self=this;
  73042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73043. return $core.withContext(function($ctx1) {
  73044. //>>excludeEnd("ctx");
  73045. var $2,$3,$1,$5,$6,$4,$8,$9,$7,$11,$12,$10,$14,$15,$13,$17,$18,$16,$20,$21,$19,$23,$22;
  73046. $2=(3).__at((4));
  73047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73048. $ctx1.sendIdx["@"]=1;
  73049. //>>excludeEnd("ctx");
  73050. $3=(4).__at((5));
  73051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73052. $ctx1.sendIdx["@"]=2;
  73053. //>>excludeEnd("ctx");
  73054. $1=$recv($2).__lt($3);
  73055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73056. $ctx1.sendIdx["<"]=1;
  73057. //>>excludeEnd("ctx");
  73058. self._assert_($1);
  73059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73060. $ctx1.sendIdx["assert:"]=1;
  73061. //>>excludeEnd("ctx");
  73062. $5=(3).__at((4));
  73063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73064. $ctx1.sendIdx["@"]=3;
  73065. //>>excludeEnd("ctx");
  73066. $6=(4).__at((4));
  73067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73068. $ctx1.sendIdx["@"]=4;
  73069. //>>excludeEnd("ctx");
  73070. $4=$recv($5).__lt($6);
  73071. self._deny_($4);
  73072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73073. $ctx1.sendIdx["deny:"]=1;
  73074. //>>excludeEnd("ctx");
  73075. $8=(4).__at((5));
  73076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73077. $ctx1.sendIdx["@"]=5;
  73078. //>>excludeEnd("ctx");
  73079. $9=(4).__at((5));
  73080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73081. $ctx1.sendIdx["@"]=6;
  73082. //>>excludeEnd("ctx");
  73083. $7=$recv($8).__lt_eq($9);
  73084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73085. $ctx1.sendIdx["<="]=1;
  73086. //>>excludeEnd("ctx");
  73087. self._assert_($7);
  73088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73089. $ctx1.sendIdx["assert:"]=2;
  73090. //>>excludeEnd("ctx");
  73091. $11=(4).__at((5));
  73092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73093. $ctx1.sendIdx["@"]=7;
  73094. //>>excludeEnd("ctx");
  73095. $12=(3).__at((5));
  73096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73097. $ctx1.sendIdx["@"]=8;
  73098. //>>excludeEnd("ctx");
  73099. $10=$recv($11).__lt_eq($12);
  73100. self._deny_($10);
  73101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73102. $ctx1.sendIdx["deny:"]=2;
  73103. //>>excludeEnd("ctx");
  73104. $14=(5).__at((6));
  73105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73106. $ctx1.sendIdx["@"]=9;
  73107. //>>excludeEnd("ctx");
  73108. $15=(4).__at((5));
  73109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73110. $ctx1.sendIdx["@"]=10;
  73111. //>>excludeEnd("ctx");
  73112. $13=$recv($14).__gt($15);
  73113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73114. $ctx1.sendIdx[">"]=1;
  73115. //>>excludeEnd("ctx");
  73116. self._assert_($13);
  73117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73118. $ctx1.sendIdx["assert:"]=3;
  73119. //>>excludeEnd("ctx");
  73120. $17=(5).__at((6));
  73121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73122. $ctx1.sendIdx["@"]=11;
  73123. //>>excludeEnd("ctx");
  73124. $18=(6).__at((6));
  73125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73126. $ctx1.sendIdx["@"]=12;
  73127. //>>excludeEnd("ctx");
  73128. $16=$recv($17).__gt($18);
  73129. self._deny_($16);
  73130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73131. $ctx1.sendIdx["deny:"]=3;
  73132. //>>excludeEnd("ctx");
  73133. $20=(4).__at((5));
  73134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73135. $ctx1.sendIdx["@"]=13;
  73136. //>>excludeEnd("ctx");
  73137. $21=(4).__at((5));
  73138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73139. $ctx1.sendIdx["@"]=14;
  73140. //>>excludeEnd("ctx");
  73141. $19=$recv($20).__gt_eq($21);
  73142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73143. $ctx1.sendIdx[">="]=1;
  73144. //>>excludeEnd("ctx");
  73145. self._assert_($19);
  73146. $23=(4).__at((5));
  73147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73148. $ctx1.sendIdx["@"]=15;
  73149. //>>excludeEnd("ctx");
  73150. $22=$recv($23).__gt_eq((5).__at((5)));
  73151. self._deny_($22);
  73152. return self;
  73153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73154. }, function($ctx1) {$ctx1.fill(self,"testComparison",{},$globals.PointTest)});
  73155. //>>excludeEnd("ctx");
  73156. },
  73157. //>>excludeStart("ide", pragmas.excludeIdeData);
  73158. args: [],
  73159. 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)",
  73160. referencedClasses: [],
  73161. //>>excludeEnd("ide");
  73162. messageSends: ["assert:", "<", "@", "deny:", "<=", ">", ">="]
  73163. }),
  73164. $globals.PointTest);
  73165. $core.addMethod(
  73166. $core.method({
  73167. selector: "testEgality",
  73168. protocol: 'tests',
  73169. fn: function (){
  73170. var self=this;
  73171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73172. return $core.withContext(function($ctx1) {
  73173. //>>excludeEnd("ctx");
  73174. var $2,$3,$1,$5,$4;
  73175. $2=(3).__at((4));
  73176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73177. $ctx1.sendIdx["@"]=1;
  73178. //>>excludeEnd("ctx");
  73179. $3=(3).__at((4));
  73180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73181. $ctx1.sendIdx["@"]=2;
  73182. //>>excludeEnd("ctx");
  73183. $1=$recv($2).__eq($3);
  73184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73185. $ctx1.sendIdx["="]=1;
  73186. //>>excludeEnd("ctx");
  73187. self._assert_($1);
  73188. $5=(3).__at((5));
  73189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73190. $ctx1.sendIdx["@"]=3;
  73191. //>>excludeEnd("ctx");
  73192. $4=$recv($5).__eq((3).__at((6)));
  73193. self._deny_($4);
  73194. return self;
  73195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73196. }, function($ctx1) {$ctx1.fill(self,"testEgality",{},$globals.PointTest)});
  73197. //>>excludeEnd("ctx");
  73198. },
  73199. //>>excludeStart("ide", pragmas.excludeIdeData);
  73200. args: [],
  73201. source: "testEgality\x0a\x09self assert: (3@4 = (3@4)).\x0a\x09self deny: 3@5 = (3@6)",
  73202. referencedClasses: [],
  73203. //>>excludeEnd("ide");
  73204. messageSends: ["assert:", "=", "@", "deny:"]
  73205. }),
  73206. $globals.PointTest);
  73207. $core.addMethod(
  73208. $core.method({
  73209. selector: "testNew",
  73210. protocol: 'tests',
  73211. fn: function (){
  73212. var self=this;
  73213. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  73214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73215. return $core.withContext(function($ctx1) {
  73216. //>>excludeEnd("ctx");
  73217. var $3,$2,$1,$7,$6,$5,$4,$10,$9,$8;
  73218. $3=$recv($Point())._new();
  73219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73220. $ctx1.sendIdx["new"]=1;
  73221. //>>excludeEnd("ctx");
  73222. $2=$recv($3)._x_((3));
  73223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73224. $ctx1.sendIdx["x:"]=1;
  73225. //>>excludeEnd("ctx");
  73226. $1=$recv($2)._y();
  73227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73228. $ctx1.sendIdx["y"]=1;
  73229. //>>excludeEnd("ctx");
  73230. self._assert_equals_($1,nil);
  73231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73232. $ctx1.sendIdx["assert:equals:"]=1;
  73233. //>>excludeEnd("ctx");
  73234. $7=$recv($Point())._new();
  73235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73236. $ctx1.sendIdx["new"]=2;
  73237. //>>excludeEnd("ctx");
  73238. $6=$recv($7)._x_((3));
  73239. $5=$recv($6)._x();
  73240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73241. $ctx1.sendIdx["x"]=1;
  73242. //>>excludeEnd("ctx");
  73243. $4=$recv($5).__eq((0));
  73244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73245. $ctx1.sendIdx["="]=1;
  73246. //>>excludeEnd("ctx");
  73247. self._deny_($4);
  73248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73249. $ctx1.sendIdx["deny:"]=1;
  73250. //>>excludeEnd("ctx");
  73251. $10=$recv($Point())._new();
  73252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73253. $ctx1.sendIdx["new"]=3;
  73254. //>>excludeEnd("ctx");
  73255. $9=$recv($10)._y_((4));
  73256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73257. $ctx1.sendIdx["y:"]=1;
  73258. //>>excludeEnd("ctx");
  73259. $8=$recv($9)._x();
  73260. self._assert_equals_($8,nil);
  73261. self._deny_($recv($recv($recv($recv($Point())._new())._y_((4)))._y()).__eq((0)));
  73262. return self;
  73263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73264. }, function($ctx1) {$ctx1.fill(self,"testNew",{},$globals.PointTest)});
  73265. //>>excludeEnd("ctx");
  73266. },
  73267. //>>excludeStart("ide", pragmas.excludeIdeData);
  73268. args: [],
  73269. 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",
  73270. referencedClasses: ["Point"],
  73271. //>>excludeEnd("ide");
  73272. messageSends: ["assert:equals:", "y", "x:", "new", "deny:", "=", "x", "y:"]
  73273. }),
  73274. $globals.PointTest);
  73275. $core.addMethod(
  73276. $core.method({
  73277. selector: "testTranslateBy",
  73278. protocol: 'tests',
  73279. fn: function (){
  73280. var self=this;
  73281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73282. return $core.withContext(function($ctx1) {
  73283. //>>excludeEnd("ctx");
  73284. var $2,$3,$1,$4,$6,$8,$7,$5,$9,$11,$12,$10,$13,$15,$16,$14;
  73285. $2=(3).__at((3));
  73286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73287. $ctx1.sendIdx["@"]=1;
  73288. //>>excludeEnd("ctx");
  73289. $3=(0).__at((1));
  73290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73291. $ctx1.sendIdx["@"]=2;
  73292. //>>excludeEnd("ctx");
  73293. $1=$recv($2)._translateBy_($3);
  73294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73295. $ctx1.sendIdx["translateBy:"]=1;
  73296. //>>excludeEnd("ctx");
  73297. $4=(3).__at((4));
  73298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73299. $ctx1.sendIdx["@"]=3;
  73300. //>>excludeEnd("ctx");
  73301. self._assert_equals_($1,$4);
  73302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73303. $ctx1.sendIdx["assert:equals:"]=1;
  73304. //>>excludeEnd("ctx");
  73305. $6=(3).__at((3));
  73306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73307. $ctx1.sendIdx["@"]=4;
  73308. //>>excludeEnd("ctx");
  73309. $8=(1)._negated();
  73310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73311. $ctx1.sendIdx["negated"]=1;
  73312. //>>excludeEnd("ctx");
  73313. $7=(0).__at($8);
  73314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73315. $ctx1.sendIdx["@"]=5;
  73316. //>>excludeEnd("ctx");
  73317. $5=$recv($6)._translateBy_($7);
  73318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73319. $ctx1.sendIdx["translateBy:"]=2;
  73320. //>>excludeEnd("ctx");
  73321. $9=(3).__at((2));
  73322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73323. $ctx1.sendIdx["@"]=6;
  73324. //>>excludeEnd("ctx");
  73325. self._assert_equals_($5,$9);
  73326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73327. $ctx1.sendIdx["assert:equals:"]=2;
  73328. //>>excludeEnd("ctx");
  73329. $11=(3).__at((3));
  73330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73331. $ctx1.sendIdx["@"]=7;
  73332. //>>excludeEnd("ctx");
  73333. $12=(2).__at((3));
  73334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73335. $ctx1.sendIdx["@"]=8;
  73336. //>>excludeEnd("ctx");
  73337. $10=$recv($11)._translateBy_($12);
  73338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73339. $ctx1.sendIdx["translateBy:"]=3;
  73340. //>>excludeEnd("ctx");
  73341. $13=(5).__at((6));
  73342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73343. $ctx1.sendIdx["@"]=9;
  73344. //>>excludeEnd("ctx");
  73345. self._assert_equals_($10,$13);
  73346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73347. $ctx1.sendIdx["assert:equals:"]=3;
  73348. //>>excludeEnd("ctx");
  73349. $15=(3).__at((3));
  73350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73351. $ctx1.sendIdx["@"]=10;
  73352. //>>excludeEnd("ctx");
  73353. $16=$recv((3)._negated()).__at((0));
  73354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73355. $ctx1.sendIdx["@"]=11;
  73356. //>>excludeEnd("ctx");
  73357. $14=$recv($15)._translateBy_($16);
  73358. self._assert_equals_($14,(0).__at((3)));
  73359. return self;
  73360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73361. }, function($ctx1) {$ctx1.fill(self,"testTranslateBy",{},$globals.PointTest)});
  73362. //>>excludeEnd("ctx");
  73363. },
  73364. //>>excludeStart("ide", pragmas.excludeIdeData);
  73365. args: [],
  73366. 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.",
  73367. referencedClasses: [],
  73368. //>>excludeEnd("ide");
  73369. messageSends: ["assert:equals:", "translateBy:", "@", "negated"]
  73370. }),
  73371. $globals.PointTest);
  73372. $core.addClass('QueueTest', $globals.TestCase, [], 'Kernel-Tests');
  73373. $core.addMethod(
  73374. $core.method({
  73375. selector: "testNextIfAbsent",
  73376. protocol: 'tests',
  73377. fn: function (){
  73378. var self=this;
  73379. var queue;
  73380. function $Queue(){return $globals.Queue||(typeof Queue=="undefined"?nil:Queue)}
  73381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73382. return $core.withContext(function($ctx1) {
  73383. //>>excludeEnd("ctx");
  73384. var $2,$1;
  73385. queue=$recv($Queue())._new();
  73386. $recv(queue)._nextPut_("index1");
  73387. $2=$recv(queue)._nextIfAbsent_("empty");
  73388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73389. $ctx1.sendIdx["nextIfAbsent:"]=1;
  73390. //>>excludeEnd("ctx");
  73391. $1=$recv($2).__eq("index1");
  73392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73393. $ctx1.sendIdx["="]=1;
  73394. //>>excludeEnd("ctx");
  73395. self._assert_($1);
  73396. self._deny_($recv($recv(queue)._nextIfAbsent_("empty")).__eq("index1"));
  73397. return self;
  73398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73399. }, function($ctx1) {$ctx1.fill(self,"testNextIfAbsent",{queue:queue},$globals.QueueTest)});
  73400. //>>excludeEnd("ctx");
  73401. },
  73402. //>>excludeStart("ide", pragmas.excludeIdeData);
  73403. args: [],
  73404. 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'",
  73405. referencedClasses: ["Queue"],
  73406. //>>excludeEnd("ide");
  73407. messageSends: ["new", "nextPut:", "assert:", "=", "nextIfAbsent:", "deny:"]
  73408. }),
  73409. $globals.QueueTest);
  73410. $core.addMethod(
  73411. $core.method({
  73412. selector: "testQueueNext",
  73413. protocol: 'tests',
  73414. fn: function (){
  73415. var self=this;
  73416. var queue;
  73417. function $Queue(){return $globals.Queue||(typeof Queue=="undefined"?nil:Queue)}
  73418. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  73419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73420. return $core.withContext(function($ctx1) {
  73421. //>>excludeEnd("ctx");
  73422. var $1,$2,$4,$3,$6,$5;
  73423. queue=$recv($Queue())._new();
  73424. $1=queue;
  73425. $recv($1)._nextPut_("index1");
  73426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73427. $ctx1.sendIdx["nextPut:"]=1;
  73428. //>>excludeEnd("ctx");
  73429. $2=$recv($1)._nextPut_("index2");
  73430. $4=$recv(queue)._next();
  73431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73432. $ctx1.sendIdx["next"]=1;
  73433. //>>excludeEnd("ctx");
  73434. $3=$recv($4).__eq("index1");
  73435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73436. $ctx1.sendIdx["="]=1;
  73437. //>>excludeEnd("ctx");
  73438. self._assert_($3);
  73439. $6=$recv(queue)._next();
  73440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73441. $ctx1.sendIdx["next"]=2;
  73442. //>>excludeEnd("ctx");
  73443. $5=$recv($6).__eq("index");
  73444. self._deny_($5);
  73445. self._should_raise_((function(){
  73446. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73447. return $core.withContext(function($ctx2) {
  73448. //>>excludeEnd("ctx");
  73449. return $recv(queue)._next();
  73450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73451. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  73452. //>>excludeEnd("ctx");
  73453. }),$Error());
  73454. return self;
  73455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73456. }, function($ctx1) {$ctx1.fill(self,"testQueueNext",{queue:queue},$globals.QueueTest)});
  73457. //>>excludeEnd("ctx");
  73458. },
  73459. //>>excludeStart("ide", pragmas.excludeIdeData);
  73460. args: [],
  73461. 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",
  73462. referencedClasses: ["Queue", "Error"],
  73463. //>>excludeEnd("ide");
  73464. messageSends: ["new", "nextPut:", "assert:", "=", "next", "deny:", "should:raise:"]
  73465. }),
  73466. $globals.QueueTest);
  73467. $core.addClass('RandomTest', $globals.TestCase, [], 'Kernel-Tests');
  73468. $core.addMethod(
  73469. $core.method({
  73470. selector: "testAtRandomNumber",
  73471. protocol: 'tests',
  73472. fn: function (){
  73473. var self=this;
  73474. var val;
  73475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73476. return $core.withContext(function($ctx1) {
  73477. //>>excludeEnd("ctx");
  73478. (100)._timesRepeat_((function(){
  73479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73480. return $core.withContext(function($ctx2) {
  73481. //>>excludeEnd("ctx");
  73482. val=(10)._atRandom();
  73483. val;
  73484. self._assert_($recv(val).__gt((0)));
  73485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73486. $ctx2.sendIdx["assert:"]=1;
  73487. //>>excludeEnd("ctx");
  73488. return self._assert_($recv(val).__lt((11)));
  73489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73490. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  73491. //>>excludeEnd("ctx");
  73492. }));
  73493. return self;
  73494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73495. }, function($ctx1) {$ctx1.fill(self,"testAtRandomNumber",{val:val},$globals.RandomTest)});
  73496. //>>excludeEnd("ctx");
  73497. },
  73498. //>>excludeStart("ide", pragmas.excludeIdeData);
  73499. args: [],
  73500. 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]",
  73501. referencedClasses: [],
  73502. //>>excludeEnd("ide");
  73503. messageSends: ["timesRepeat:", "atRandom", "assert:", ">", "<"]
  73504. }),
  73505. $globals.RandomTest);
  73506. $core.addMethod(
  73507. $core.method({
  73508. selector: "testAtRandomSequenceableCollection",
  73509. protocol: 'tests',
  73510. fn: function (){
  73511. var self=this;
  73512. var val;
  73513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73514. return $core.withContext(function($ctx1) {
  73515. //>>excludeEnd("ctx");
  73516. var $3,$4,$2,$1;
  73517. (100)._timesRepeat_((function(){
  73518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73519. return $core.withContext(function($ctx2) {
  73520. //>>excludeEnd("ctx");
  73521. val="abc"._atRandom();
  73522. val;
  73523. $3=$recv(val).__eq("a");
  73524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73525. $ctx2.sendIdx["="]=1;
  73526. //>>excludeEnd("ctx");
  73527. $4=$recv(val).__eq("b");
  73528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73529. $ctx2.sendIdx["="]=2;
  73530. //>>excludeEnd("ctx");
  73531. $2=$recv($3).__or($4);
  73532. $1=$recv($2).__or($recv(val).__eq("c"));
  73533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73534. $ctx2.sendIdx["|"]=1;
  73535. //>>excludeEnd("ctx");
  73536. return self._assert_($1);
  73537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73538. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  73539. //>>excludeEnd("ctx");
  73540. }));
  73541. return self;
  73542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73543. }, function($ctx1) {$ctx1.fill(self,"testAtRandomSequenceableCollection",{val:val},$globals.RandomTest)});
  73544. //>>excludeEnd("ctx");
  73545. },
  73546. //>>excludeStart("ide", pragmas.excludeIdeData);
  73547. args: [],
  73548. 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].",
  73549. referencedClasses: [],
  73550. //>>excludeEnd("ide");
  73551. messageSends: ["timesRepeat:", "atRandom", "assert:", "|", "="]
  73552. }),
  73553. $globals.RandomTest);
  73554. $core.addMethod(
  73555. $core.method({
  73556. selector: "textNext",
  73557. protocol: 'tests',
  73558. fn: function (){
  73559. var self=this;
  73560. function $Random(){return $globals.Random||(typeof Random=="undefined"?nil:Random)}
  73561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73562. return $core.withContext(function($ctx1) {
  73563. //>>excludeEnd("ctx");
  73564. var $1;
  73565. (10000)._timesRepeat_((function(){
  73566. var current,next;
  73567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73568. return $core.withContext(function($ctx2) {
  73569. //>>excludeEnd("ctx");
  73570. next=$recv($recv($Random())._new())._next();
  73571. next;
  73572. self._assert_($recv(next).__gt_eq((0)));
  73573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73574. $ctx2.sendIdx["assert:"]=1;
  73575. //>>excludeEnd("ctx");
  73576. self._assert_($recv(next).__lt((1)));
  73577. $1=$recv(current).__eq(next);
  73578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73579. $ctx2.sendIdx["="]=1;
  73580. //>>excludeEnd("ctx");
  73581. self._deny_($1);
  73582. return $recv(next).__eq(current);
  73583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73584. }, function($ctx2) {$ctx2.fillBlock({current:current,next:next},$ctx1,1)});
  73585. //>>excludeEnd("ctx");
  73586. }));
  73587. return self;
  73588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73589. }, function($ctx1) {$ctx1.fill(self,"textNext",{},$globals.RandomTest)});
  73590. //>>excludeEnd("ctx");
  73591. },
  73592. //>>excludeStart("ide", pragmas.excludeIdeData);
  73593. args: [],
  73594. 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 ]",
  73595. referencedClasses: ["Random"],
  73596. //>>excludeEnd("ide");
  73597. messageSends: ["timesRepeat:", "next", "new", "assert:", ">=", "<", "deny:", "="]
  73598. }),
  73599. $globals.RandomTest);
  73600. $core.addClass('StreamTest', $globals.TestCase, [], 'Kernel-Tests');
  73601. $core.addMethod(
  73602. $core.method({
  73603. selector: "collectionClass",
  73604. protocol: 'accessing',
  73605. fn: function (){
  73606. var self=this;
  73607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73608. return $core.withContext(function($ctx1) {
  73609. //>>excludeEnd("ctx");
  73610. var $1;
  73611. $1=$recv(self._class())._collectionClass();
  73612. return $1;
  73613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73614. }, function($ctx1) {$ctx1.fill(self,"collectionClass",{},$globals.StreamTest)});
  73615. //>>excludeEnd("ctx");
  73616. },
  73617. //>>excludeStart("ide", pragmas.excludeIdeData);
  73618. args: [],
  73619. source: "collectionClass\x0a\x09^ self class collectionClass",
  73620. referencedClasses: [],
  73621. //>>excludeEnd("ide");
  73622. messageSends: ["collectionClass", "class"]
  73623. }),
  73624. $globals.StreamTest);
  73625. $core.addMethod(
  73626. $core.method({
  73627. selector: "newCollection",
  73628. protocol: 'accessing',
  73629. fn: function (){
  73630. var self=this;
  73631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73632. return $core.withContext(function($ctx1) {
  73633. //>>excludeEnd("ctx");
  73634. var $1;
  73635. $1=$recv(self._collectionClass())._new();
  73636. return $1;
  73637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73638. }, function($ctx1) {$ctx1.fill(self,"newCollection",{},$globals.StreamTest)});
  73639. //>>excludeEnd("ctx");
  73640. },
  73641. //>>excludeStart("ide", pragmas.excludeIdeData);
  73642. args: [],
  73643. source: "newCollection\x0a\x09^ self collectionClass new",
  73644. referencedClasses: [],
  73645. //>>excludeEnd("ide");
  73646. messageSends: ["new", "collectionClass"]
  73647. }),
  73648. $globals.StreamTest);
  73649. $core.addMethod(
  73650. $core.method({
  73651. selector: "newStream",
  73652. protocol: 'accessing',
  73653. fn: function (){
  73654. var self=this;
  73655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73656. return $core.withContext(function($ctx1) {
  73657. //>>excludeEnd("ctx");
  73658. var $1;
  73659. $1=$recv($recv(self._collectionClass())._new())._stream();
  73660. return $1;
  73661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73662. }, function($ctx1) {$ctx1.fill(self,"newStream",{},$globals.StreamTest)});
  73663. //>>excludeEnd("ctx");
  73664. },
  73665. //>>excludeStart("ide", pragmas.excludeIdeData);
  73666. args: [],
  73667. source: "newStream\x0a\x09^ self collectionClass new stream",
  73668. referencedClasses: [],
  73669. //>>excludeEnd("ide");
  73670. messageSends: ["stream", "new", "collectionClass"]
  73671. }),
  73672. $globals.StreamTest);
  73673. $core.addMethod(
  73674. $core.method({
  73675. selector: "testAtStartAtEnd",
  73676. protocol: 'tests',
  73677. fn: function (){
  73678. var self=this;
  73679. var stream;
  73680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73681. return $core.withContext(function($ctx1) {
  73682. //>>excludeEnd("ctx");
  73683. var $1,$2,$3,$4;
  73684. stream=self._newStream();
  73685. $1=$recv(stream)._atStart();
  73686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73687. $ctx1.sendIdx["atStart"]=1;
  73688. //>>excludeEnd("ctx");
  73689. self._assert_($1);
  73690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73691. $ctx1.sendIdx["assert:"]=1;
  73692. //>>excludeEnd("ctx");
  73693. $2=$recv(stream)._atEnd();
  73694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73695. $ctx1.sendIdx["atEnd"]=1;
  73696. //>>excludeEnd("ctx");
  73697. self._assert_($2);
  73698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73699. $ctx1.sendIdx["assert:"]=2;
  73700. //>>excludeEnd("ctx");
  73701. $recv(stream)._nextPutAll_(self._newCollection());
  73702. $3=$recv(stream)._atEnd();
  73703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73704. $ctx1.sendIdx["atEnd"]=2;
  73705. //>>excludeEnd("ctx");
  73706. self._assert_($3);
  73707. $4=$recv(stream)._atStart();
  73708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73709. $ctx1.sendIdx["atStart"]=2;
  73710. //>>excludeEnd("ctx");
  73711. self._deny_($4);
  73712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73713. $ctx1.sendIdx["deny:"]=1;
  73714. //>>excludeEnd("ctx");
  73715. $recv(stream)._position_((1));
  73716. self._deny_($recv(stream)._atEnd());
  73717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73718. $ctx1.sendIdx["deny:"]=2;
  73719. //>>excludeEnd("ctx");
  73720. self._deny_($recv(stream)._atStart());
  73721. return self;
  73722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73723. }, function($ctx1) {$ctx1.fill(self,"testAtStartAtEnd",{stream:stream},$globals.StreamTest)});
  73724. //>>excludeEnd("ctx");
  73725. },
  73726. //>>excludeStart("ide", pragmas.excludeIdeData);
  73727. args: [],
  73728. 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",
  73729. referencedClasses: [],
  73730. //>>excludeEnd("ide");
  73731. messageSends: ["newStream", "assert:", "atStart", "atEnd", "nextPutAll:", "newCollection", "deny:", "position:"]
  73732. }),
  73733. $globals.StreamTest);
  73734. $core.addMethod(
  73735. $core.method({
  73736. selector: "testContents",
  73737. protocol: 'tests',
  73738. fn: function (){
  73739. var self=this;
  73740. var stream;
  73741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73742. return $core.withContext(function($ctx1) {
  73743. //>>excludeEnd("ctx");
  73744. var $1,$2;
  73745. stream=self._newStream();
  73746. $1=stream;
  73747. $2=self._newCollection();
  73748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73749. $ctx1.sendIdx["newCollection"]=1;
  73750. //>>excludeEnd("ctx");
  73751. $recv($1)._nextPutAll_($2);
  73752. self._assert_equals_($recv(stream)._contents(),self._newCollection());
  73753. return self;
  73754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73755. }, function($ctx1) {$ctx1.fill(self,"testContents",{stream:stream},$globals.StreamTest)});
  73756. //>>excludeEnd("ctx");
  73757. },
  73758. //>>excludeStart("ide", pragmas.excludeIdeData);
  73759. args: [],
  73760. 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",
  73761. referencedClasses: [],
  73762. //>>excludeEnd("ide");
  73763. messageSends: ["newStream", "nextPutAll:", "newCollection", "assert:equals:", "contents"]
  73764. }),
  73765. $globals.StreamTest);
  73766. $core.addMethod(
  73767. $core.method({
  73768. selector: "testIsEmpty",
  73769. protocol: 'tests',
  73770. fn: function (){
  73771. var self=this;
  73772. var stream;
  73773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73774. return $core.withContext(function($ctx1) {
  73775. //>>excludeEnd("ctx");
  73776. var $1;
  73777. stream=self._newStream();
  73778. $1=$recv(stream)._isEmpty();
  73779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73780. $ctx1.sendIdx["isEmpty"]=1;
  73781. //>>excludeEnd("ctx");
  73782. self._assert_($1);
  73783. $recv(stream)._nextPutAll_(self._newCollection());
  73784. self._deny_($recv(stream)._isEmpty());
  73785. return self;
  73786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73787. }, function($ctx1) {$ctx1.fill(self,"testIsEmpty",{stream:stream},$globals.StreamTest)});
  73788. //>>excludeEnd("ctx");
  73789. },
  73790. //>>excludeStart("ide", pragmas.excludeIdeData);
  73791. args: [],
  73792. 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",
  73793. referencedClasses: [],
  73794. //>>excludeEnd("ide");
  73795. messageSends: ["newStream", "assert:", "isEmpty", "nextPutAll:", "newCollection", "deny:"]
  73796. }),
  73797. $globals.StreamTest);
  73798. $core.addMethod(
  73799. $core.method({
  73800. selector: "testPosition",
  73801. protocol: 'tests',
  73802. fn: function (){
  73803. var self=this;
  73804. var collection,stream;
  73805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73806. return $core.withContext(function($ctx1) {
  73807. //>>excludeEnd("ctx");
  73808. var $1,$2,$3;
  73809. collection=self._newCollection();
  73810. stream=self._newStream();
  73811. $recv(stream)._nextPutAll_(collection);
  73812. $1=$recv(stream)._position();
  73813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73814. $ctx1.sendIdx["position"]=1;
  73815. //>>excludeEnd("ctx");
  73816. self._assert_equals_($1,$recv(collection)._size());
  73817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73818. $ctx1.sendIdx["assert:equals:"]=1;
  73819. //>>excludeEnd("ctx");
  73820. $recv(stream)._position_((0));
  73821. $2=$recv(stream)._position();
  73822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73823. $ctx1.sendIdx["position"]=2;
  73824. //>>excludeEnd("ctx");
  73825. self._assert_equals_($2,(0));
  73826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73827. $ctx1.sendIdx["assert:equals:"]=2;
  73828. //>>excludeEnd("ctx");
  73829. $recv(stream)._next();
  73830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73831. $ctx1.sendIdx["next"]=1;
  73832. //>>excludeEnd("ctx");
  73833. $3=$recv(stream)._position();
  73834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73835. $ctx1.sendIdx["position"]=3;
  73836. //>>excludeEnd("ctx");
  73837. self._assert_equals_($3,(1));
  73838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73839. $ctx1.sendIdx["assert:equals:"]=3;
  73840. //>>excludeEnd("ctx");
  73841. $recv(stream)._next();
  73842. self._assert_equals_($recv(stream)._position(),(2));
  73843. return self;
  73844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73845. }, function($ctx1) {$ctx1.fill(self,"testPosition",{collection:collection,stream:stream},$globals.StreamTest)});
  73846. //>>excludeEnd("ctx");
  73847. },
  73848. //>>excludeStart("ide", pragmas.excludeIdeData);
  73849. args: [],
  73850. 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",
  73851. referencedClasses: [],
  73852. //>>excludeEnd("ide");
  73853. messageSends: ["newCollection", "newStream", "nextPutAll:", "assert:equals:", "position", "size", "position:", "next"]
  73854. }),
  73855. $globals.StreamTest);
  73856. $core.addMethod(
  73857. $core.method({
  73858. selector: "testReading",
  73859. protocol: 'tests',
  73860. fn: function (){
  73861. var self=this;
  73862. var stream,collection;
  73863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73864. return $core.withContext(function($ctx1) {
  73865. //>>excludeEnd("ctx");
  73866. var $1,$2,$3;
  73867. collection=self._newCollection();
  73868. stream=self._newStream();
  73869. $1=stream;
  73870. $recv($1)._nextPutAll_(collection);
  73871. $2=$recv($1)._position_((0));
  73872. $recv(collection)._do_((function(each){
  73873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73874. return $core.withContext(function($ctx2) {
  73875. //>>excludeEnd("ctx");
  73876. $3=$recv(stream)._next();
  73877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73878. $ctx2.sendIdx["next"]=1;
  73879. //>>excludeEnd("ctx");
  73880. return self._assert_equals_($3,each);
  73881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73882. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  73883. //>>excludeEnd("ctx");
  73884. }));
  73885. self._assert_($recv($recv(stream)._next())._isNil());
  73886. return self;
  73887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73888. }, function($ctx1) {$ctx1.fill(self,"testReading",{stream:stream,collection:collection},$globals.StreamTest)});
  73889. //>>excludeEnd("ctx");
  73890. },
  73891. //>>excludeStart("ide", pragmas.excludeIdeData);
  73892. args: [],
  73893. 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",
  73894. referencedClasses: [],
  73895. //>>excludeEnd("ide");
  73896. messageSends: ["newCollection", "newStream", "nextPutAll:", "position:", "do:", "assert:equals:", "next", "assert:", "isNil"]
  73897. }),
  73898. $globals.StreamTest);
  73899. $core.addMethod(
  73900. $core.method({
  73901. selector: "testStreamContents",
  73902. protocol: 'tests',
  73903. fn: function (){
  73904. var self=this;
  73905. return self;
  73906. },
  73907. //>>excludeStart("ide", pragmas.excludeIdeData);
  73908. args: [],
  73909. source: "testStreamContents",
  73910. referencedClasses: [],
  73911. //>>excludeEnd("ide");
  73912. messageSends: []
  73913. }),
  73914. $globals.StreamTest);
  73915. $core.addMethod(
  73916. $core.method({
  73917. selector: "testWrite",
  73918. protocol: 'tests',
  73919. fn: function (){
  73920. var self=this;
  73921. var stream,collection;
  73922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73923. return $core.withContext(function($ctx1) {
  73924. //>>excludeEnd("ctx");
  73925. collection=self._newCollection();
  73926. stream=self._newStream();
  73927. $recv(collection)._do_((function(each){
  73928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73929. return $core.withContext(function($ctx2) {
  73930. //>>excludeEnd("ctx");
  73931. return $recv(stream).__lt_lt(each);
  73932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73933. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  73934. //>>excludeEnd("ctx");
  73935. }));
  73936. self._assert_equals_($recv(stream)._contents(),collection);
  73937. return self;
  73938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73939. }, function($ctx1) {$ctx1.fill(self,"testWrite",{stream:stream,collection:collection},$globals.StreamTest)});
  73940. //>>excludeEnd("ctx");
  73941. },
  73942. //>>excludeStart("ide", pragmas.excludeIdeData);
  73943. args: [],
  73944. 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",
  73945. referencedClasses: [],
  73946. //>>excludeEnd("ide");
  73947. messageSends: ["newCollection", "newStream", "do:", "<<", "assert:equals:", "contents"]
  73948. }),
  73949. $globals.StreamTest);
  73950. $core.addMethod(
  73951. $core.method({
  73952. selector: "testWriting",
  73953. protocol: 'tests',
  73954. fn: function (){
  73955. var self=this;
  73956. var stream,collection;
  73957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73958. return $core.withContext(function($ctx1) {
  73959. //>>excludeEnd("ctx");
  73960. var $1;
  73961. collection=self._newCollection();
  73962. stream=self._newStream();
  73963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73964. $ctx1.sendIdx["newStream"]=1;
  73965. //>>excludeEnd("ctx");
  73966. $recv(collection)._do_((function(each){
  73967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73968. return $core.withContext(function($ctx2) {
  73969. //>>excludeEnd("ctx");
  73970. return $recv(stream)._nextPut_(each);
  73971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73972. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  73973. //>>excludeEnd("ctx");
  73974. }));
  73975. $1=$recv(stream)._contents();
  73976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73977. $ctx1.sendIdx["contents"]=1;
  73978. //>>excludeEnd("ctx");
  73979. self._assert_equals_($1,collection);
  73980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73981. $ctx1.sendIdx["assert:equals:"]=1;
  73982. //>>excludeEnd("ctx");
  73983. stream=self._newStream();
  73984. $recv(stream)._nextPutAll_(collection);
  73985. self._assert_equals_($recv(stream)._contents(),collection);
  73986. return self;
  73987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73988. }, function($ctx1) {$ctx1.fill(self,"testWriting",{stream:stream,collection:collection},$globals.StreamTest)});
  73989. //>>excludeEnd("ctx");
  73990. },
  73991. //>>excludeStart("ide", pragmas.excludeIdeData);
  73992. args: [],
  73993. 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",
  73994. referencedClasses: [],
  73995. //>>excludeEnd("ide");
  73996. messageSends: ["newCollection", "newStream", "do:", "nextPut:", "assert:equals:", "contents", "nextPutAll:"]
  73997. }),
  73998. $globals.StreamTest);
  73999. $core.addMethod(
  74000. $core.method({
  74001. selector: "collectionClass",
  74002. protocol: 'accessing',
  74003. fn: function (){
  74004. var self=this;
  74005. return nil;
  74006. },
  74007. //>>excludeStart("ide", pragmas.excludeIdeData);
  74008. args: [],
  74009. source: "collectionClass\x0a\x09^ nil",
  74010. referencedClasses: [],
  74011. //>>excludeEnd("ide");
  74012. messageSends: []
  74013. }),
  74014. $globals.StreamTest.klass);
  74015. $core.addMethod(
  74016. $core.method({
  74017. selector: "isAbstract",
  74018. protocol: 'testing',
  74019. fn: function (){
  74020. var self=this;
  74021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74022. return $core.withContext(function($ctx1) {
  74023. //>>excludeEnd("ctx");
  74024. var $1;
  74025. $1=$recv(self._collectionClass())._isNil();
  74026. return $1;
  74027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74028. }, function($ctx1) {$ctx1.fill(self,"isAbstract",{},$globals.StreamTest.klass)});
  74029. //>>excludeEnd("ctx");
  74030. },
  74031. //>>excludeStart("ide", pragmas.excludeIdeData);
  74032. args: [],
  74033. source: "isAbstract\x0a\x09^ self collectionClass isNil",
  74034. referencedClasses: [],
  74035. //>>excludeEnd("ide");
  74036. messageSends: ["isNil", "collectionClass"]
  74037. }),
  74038. $globals.StreamTest.klass);
  74039. $core.addClass('ArrayStreamTest', $globals.StreamTest, [], 'Kernel-Tests');
  74040. $core.addMethod(
  74041. $core.method({
  74042. selector: "newCollection",
  74043. protocol: 'accessing',
  74044. fn: function (){
  74045. var self=this;
  74046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74047. return $core.withContext(function($ctx1) {
  74048. //>>excludeEnd("ctx");
  74049. var $1;
  74050. $1=[true,(1),(3).__at((4)),"foo"];
  74051. return $1;
  74052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74053. }, function($ctx1) {$ctx1.fill(self,"newCollection",{},$globals.ArrayStreamTest)});
  74054. //>>excludeEnd("ctx");
  74055. },
  74056. //>>excludeStart("ide", pragmas.excludeIdeData);
  74057. args: [],
  74058. source: "newCollection\x0a\x09^ { true. 1. 3@4. 'foo' }",
  74059. referencedClasses: [],
  74060. //>>excludeEnd("ide");
  74061. messageSends: ["@"]
  74062. }),
  74063. $globals.ArrayStreamTest);
  74064. $core.addMethod(
  74065. $core.method({
  74066. selector: "collectionClass",
  74067. protocol: 'accessing',
  74068. fn: function (){
  74069. var self=this;
  74070. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  74071. return $Array();
  74072. },
  74073. //>>excludeStart("ide", pragmas.excludeIdeData);
  74074. args: [],
  74075. source: "collectionClass\x0a\x09^ Array",
  74076. referencedClasses: ["Array"],
  74077. //>>excludeEnd("ide");
  74078. messageSends: []
  74079. }),
  74080. $globals.ArrayStreamTest.klass);
  74081. $core.addClass('StringStreamTest', $globals.StreamTest, [], 'Kernel-Tests');
  74082. $core.addMethod(
  74083. $core.method({
  74084. selector: "newCollection",
  74085. protocol: 'accessing',
  74086. fn: function (){
  74087. var self=this;
  74088. return "hello world";
  74089. },
  74090. //>>excludeStart("ide", pragmas.excludeIdeData);
  74091. args: [],
  74092. source: "newCollection\x0a\x09^ 'hello world'",
  74093. referencedClasses: [],
  74094. //>>excludeEnd("ide");
  74095. messageSends: []
  74096. }),
  74097. $globals.StringStreamTest);
  74098. $core.addMethod(
  74099. $core.method({
  74100. selector: "collectionClass",
  74101. protocol: 'accessing',
  74102. fn: function (){
  74103. var self=this;
  74104. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  74105. return $String();
  74106. },
  74107. //>>excludeStart("ide", pragmas.excludeIdeData);
  74108. args: [],
  74109. source: "collectionClass\x0a\x09^ String",
  74110. referencedClasses: ["String"],
  74111. //>>excludeEnd("ide");
  74112. messageSends: []
  74113. }),
  74114. $globals.StringStreamTest.klass);
  74115. $core.addClass('UndefinedTest', $globals.TestCase, [], 'Kernel-Tests');
  74116. $core.addMethod(
  74117. $core.method({
  74118. selector: "testCopying",
  74119. protocol: 'tests',
  74120. fn: function (){
  74121. var self=this;
  74122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74123. return $core.withContext(function($ctx1) {
  74124. //>>excludeEnd("ctx");
  74125. self._assert_equals_(nil._copy(),nil);
  74126. return self;
  74127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74128. }, function($ctx1) {$ctx1.fill(self,"testCopying",{},$globals.UndefinedTest)});
  74129. //>>excludeEnd("ctx");
  74130. },
  74131. //>>excludeStart("ide", pragmas.excludeIdeData);
  74132. args: [],
  74133. source: "testCopying\x0a\x09self assert: nil copy equals: nil",
  74134. referencedClasses: [],
  74135. //>>excludeEnd("ide");
  74136. messageSends: ["assert:equals:", "copy"]
  74137. }),
  74138. $globals.UndefinedTest);
  74139. $core.addMethod(
  74140. $core.method({
  74141. selector: "testDeepCopy",
  74142. protocol: 'tests',
  74143. fn: function (){
  74144. var self=this;
  74145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74146. return $core.withContext(function($ctx1) {
  74147. //>>excludeEnd("ctx");
  74148. self._assert_($recv(nil._deepCopy()).__eq(nil));
  74149. return self;
  74150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74151. }, function($ctx1) {$ctx1.fill(self,"testDeepCopy",{},$globals.UndefinedTest)});
  74152. //>>excludeEnd("ctx");
  74153. },
  74154. //>>excludeStart("ide", pragmas.excludeIdeData);
  74155. args: [],
  74156. source: "testDeepCopy\x0a\x09self assert: nil deepCopy = nil",
  74157. referencedClasses: [],
  74158. //>>excludeEnd("ide");
  74159. messageSends: ["assert:", "=", "deepCopy"]
  74160. }),
  74161. $globals.UndefinedTest);
  74162. $core.addMethod(
  74163. $core.method({
  74164. selector: "testIfNil",
  74165. protocol: 'tests',
  74166. fn: function (){
  74167. var self=this;
  74168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74169. return $core.withContext(function($ctx1) {
  74170. //>>excludeEnd("ctx");
  74171. var $1,$3,$2,$4,$6,$5,$receiver;
  74172. if(($receiver = nil) == null || $receiver.isNil){
  74173. $1=true;
  74174. } else {
  74175. $1=nil;
  74176. };
  74177. self._assert_equals_($1,true);
  74178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74179. $ctx1.sendIdx["assert:equals:"]=1;
  74180. //>>excludeEnd("ctx");
  74181. if(($receiver = nil) == null || $receiver.isNil){
  74182. $3=nil;
  74183. } else {
  74184. $3=true;
  74185. };
  74186. $2=$recv($3).__eq(true);
  74187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74188. $ctx1.sendIdx["="]=1;
  74189. //>>excludeEnd("ctx");
  74190. self._deny_($2);
  74191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74192. $ctx1.sendIdx["deny:"]=1;
  74193. //>>excludeEnd("ctx");
  74194. if(($receiver = nil) == null || $receiver.isNil){
  74195. $4=true;
  74196. } else {
  74197. $4=false;
  74198. };
  74199. self._assert_equals_($4,true);
  74200. if(($receiver = nil) == null || $receiver.isNil){
  74201. $6=false;
  74202. } else {
  74203. $6=true;
  74204. };
  74205. $5=$recv($6).__eq(true);
  74206. self._deny_($5);
  74207. return self;
  74208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74209. }, function($ctx1) {$ctx1.fill(self,"testIfNil",{},$globals.UndefinedTest)});
  74210. //>>excludeEnd("ctx");
  74211. },
  74212. //>>excludeStart("ide", pragmas.excludeIdeData);
  74213. args: [],
  74214. 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",
  74215. referencedClasses: [],
  74216. //>>excludeEnd("ide");
  74217. messageSends: ["assert:equals:", "ifNil:", "deny:", "=", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"]
  74218. }),
  74219. $globals.UndefinedTest);
  74220. $core.addMethod(
  74221. $core.method({
  74222. selector: "testIsNil",
  74223. protocol: 'tests',
  74224. fn: function (){
  74225. var self=this;
  74226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74227. return $core.withContext(function($ctx1) {
  74228. //>>excludeEnd("ctx");
  74229. self._assert_(nil._isNil());
  74230. self._deny_(nil._notNil());
  74231. return self;
  74232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74233. }, function($ctx1) {$ctx1.fill(self,"testIsNil",{},$globals.UndefinedTest)});
  74234. //>>excludeEnd("ctx");
  74235. },
  74236. //>>excludeStart("ide", pragmas.excludeIdeData);
  74237. args: [],
  74238. source: "testIsNil\x0a\x09self assert: nil isNil.\x0a\x09self deny: nil notNil.",
  74239. referencedClasses: [],
  74240. //>>excludeEnd("ide");
  74241. messageSends: ["assert:", "isNil", "deny:", "notNil"]
  74242. }),
  74243. $globals.UndefinedTest);
  74244. });
  74245. define("amber_core/Compiler-Tests", ["amber/boot", "amber_core/SUnit"], function($boot){
  74246. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  74247. $core.addPackage('Compiler-Tests');
  74248. $core.packages["Compiler-Tests"].innerEval = function (expr) { return eval(expr); };
  74249. $core.packages["Compiler-Tests"].transport = {"type":"amd","amdNamespace":"amber_core"};
  74250. $core.addClass('ASTParsingTest', $globals.TestCase, [], 'Compiler-Tests');
  74251. $core.addMethod(
  74252. $core.method({
  74253. selector: "analyze:forClass:",
  74254. protocol: 'convenience',
  74255. fn: function (aNode,aClass){
  74256. var self=this;
  74257. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  74258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74259. return $core.withContext(function($ctx1) {
  74260. //>>excludeEnd("ctx");
  74261. $recv($recv($SemanticAnalyzer())._on_(aClass))._visit_(aNode);
  74262. return aNode;
  74263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74264. }, function($ctx1) {$ctx1.fill(self,"analyze:forClass:",{aNode:aNode,aClass:aClass},$globals.ASTParsingTest)});
  74265. //>>excludeEnd("ctx");
  74266. },
  74267. //>>excludeStart("ide", pragmas.excludeIdeData);
  74268. args: ["aNode", "aClass"],
  74269. source: "analyze: aNode forClass: aClass\x0a\x09(SemanticAnalyzer on: aClass) visit: aNode.\x0a\x09^ aNode",
  74270. referencedClasses: ["SemanticAnalyzer"],
  74271. //>>excludeEnd("ide");
  74272. messageSends: ["visit:", "on:"]
  74273. }),
  74274. $globals.ASTParsingTest);
  74275. $core.addMethod(
  74276. $core.method({
  74277. selector: "parse:",
  74278. protocol: 'parsing',
  74279. fn: function (aString){
  74280. var self=this;
  74281. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  74282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74283. return $core.withContext(function($ctx1) {
  74284. //>>excludeEnd("ctx");
  74285. var $1;
  74286. $1=$recv($Smalltalk())._parse_(aString);
  74287. return $1;
  74288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74289. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString},$globals.ASTParsingTest)});
  74290. //>>excludeEnd("ctx");
  74291. },
  74292. //>>excludeStart("ide", pragmas.excludeIdeData);
  74293. args: ["aString"],
  74294. source: "parse: aString\x0a\x09^ Smalltalk parse: aString",
  74295. referencedClasses: ["Smalltalk"],
  74296. //>>excludeEnd("ide");
  74297. messageSends: ["parse:"]
  74298. }),
  74299. $globals.ASTParsingTest);
  74300. $core.addMethod(
  74301. $core.method({
  74302. selector: "parse:forClass:",
  74303. protocol: 'parsing',
  74304. fn: function (aString,aClass){
  74305. var self=this;
  74306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74307. return $core.withContext(function($ctx1) {
  74308. //>>excludeEnd("ctx");
  74309. var $1;
  74310. $1=self._analyze_forClass_(self._parse_(aString),aClass);
  74311. return $1;
  74312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74313. }, function($ctx1) {$ctx1.fill(self,"parse:forClass:",{aString:aString,aClass:aClass},$globals.ASTParsingTest)});
  74314. //>>excludeEnd("ctx");
  74315. },
  74316. //>>excludeStart("ide", pragmas.excludeIdeData);
  74317. args: ["aString", "aClass"],
  74318. source: "parse: aString forClass: aClass\x0a\x09^ self analyze: (self parse: aString) forClass: aClass",
  74319. referencedClasses: [],
  74320. //>>excludeEnd("ide");
  74321. messageSends: ["analyze:forClass:", "parse:"]
  74322. }),
  74323. $globals.ASTParsingTest);
  74324. $core.addClass('ASTPCNodeVisitorTest', $globals.ASTParsingTest, [], 'Compiler-Tests');
  74325. $core.addMethod(
  74326. $core.method({
  74327. selector: "astPCNodeVisitor",
  74328. protocol: 'factory',
  74329. fn: function (){
  74330. var self=this;
  74331. function $ASTPCNodeVisitor(){return $globals.ASTPCNodeVisitor||(typeof ASTPCNodeVisitor=="undefined"?nil:ASTPCNodeVisitor)}
  74332. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  74333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74334. return $core.withContext(function($ctx1) {
  74335. //>>excludeEnd("ctx");
  74336. var $2,$3,$4,$5,$1;
  74337. $2=$recv($ASTPCNodeVisitor())._new();
  74338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74339. $ctx1.sendIdx["new"]=1;
  74340. //>>excludeEnd("ctx");
  74341. $3=$2;
  74342. $4=$recv($recv($AIContext())._new())._yourself();
  74343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74344. $ctx1.sendIdx["yourself"]=1;
  74345. //>>excludeEnd("ctx");
  74346. $recv($3)._context_($4);
  74347. $5=$recv($2)._yourself();
  74348. $1=$5;
  74349. return $1;
  74350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74351. }, function($ctx1) {$ctx1.fill(self,"astPCNodeVisitor",{},$globals.ASTPCNodeVisitorTest)});
  74352. //>>excludeEnd("ctx");
  74353. },
  74354. //>>excludeStart("ide", pragmas.excludeIdeData);
  74355. args: [],
  74356. source: "astPCNodeVisitor\x0a\x09^ ASTPCNodeVisitor new\x0a\x09\x09context: (AIContext new\x0a\x09\x09\x09yourself);\x0a\x09\x09yourself",
  74357. referencedClasses: ["ASTPCNodeVisitor", "AIContext"],
  74358. //>>excludeEnd("ide");
  74359. messageSends: ["context:", "new", "yourself"]
  74360. }),
  74361. $globals.ASTPCNodeVisitorTest);
  74362. $core.addMethod(
  74363. $core.method({
  74364. selector: "astPCNodeVisitorForSelector:",
  74365. protocol: 'factory',
  74366. fn: function (aString){
  74367. var self=this;
  74368. function $ASTPCNodeVisitor(){return $globals.ASTPCNodeVisitor||(typeof ASTPCNodeVisitor=="undefined"?nil:ASTPCNodeVisitor)}
  74369. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  74370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74371. return $core.withContext(function($ctx1) {
  74372. //>>excludeEnd("ctx");
  74373. var $2,$3,$4,$5,$1;
  74374. $2=$recv($ASTPCNodeVisitor())._new();
  74375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74376. $ctx1.sendIdx["new"]=1;
  74377. //>>excludeEnd("ctx");
  74378. $recv($2)._selector_(aString);
  74379. $3=$2;
  74380. $4=$recv($recv($AIContext())._new())._yourself();
  74381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74382. $ctx1.sendIdx["yourself"]=1;
  74383. //>>excludeEnd("ctx");
  74384. $recv($3)._context_($4);
  74385. $5=$recv($2)._yourself();
  74386. $1=$5;
  74387. return $1;
  74388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74389. }, function($ctx1) {$ctx1.fill(self,"astPCNodeVisitorForSelector:",{aString:aString},$globals.ASTPCNodeVisitorTest)});
  74390. //>>excludeEnd("ctx");
  74391. },
  74392. //>>excludeStart("ide", pragmas.excludeIdeData);
  74393. args: ["aString"],
  74394. source: "astPCNodeVisitorForSelector: aString\x0a\x09^ ASTPCNodeVisitor new\x0a\x09\x09selector: aString;\x0a\x09\x09context: (AIContext new\x0a\x09\x09\x09yourself);\x0a\x09\x09yourself",
  74395. referencedClasses: ["ASTPCNodeVisitor", "AIContext"],
  74396. //>>excludeEnd("ide");
  74397. messageSends: ["selector:", "new", "context:", "yourself"]
  74398. }),
  74399. $globals.ASTPCNodeVisitorTest);
  74400. $core.addMethod(
  74401. $core.method({
  74402. selector: "testJSStatementNode",
  74403. protocol: 'tests',
  74404. fn: function (){
  74405. var self=this;
  74406. var ast,visitor;
  74407. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  74408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74409. return $core.withContext(function($ctx1) {
  74410. //>>excludeEnd("ctx");
  74411. var $1,$2;
  74412. ast=self._parse_forClass_("foo <consolee.log(1)>",$Object());
  74413. $1=self._astPCNodeVisitor();
  74414. $recv($1)._visit_(ast);
  74415. $2=$recv($1)._currentNode();
  74416. self._assert_($recv($2)._isJSStatementNode());
  74417. return self;
  74418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74419. }, function($ctx1) {$ctx1.fill(self,"testJSStatementNode",{ast:ast,visitor:visitor},$globals.ASTPCNodeVisitorTest)});
  74420. //>>excludeEnd("ctx");
  74421. },
  74422. //>>excludeStart("ide", pragmas.excludeIdeData);
  74423. args: [],
  74424. 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",
  74425. referencedClasses: ["Object"],
  74426. //>>excludeEnd("ide");
  74427. messageSends: ["parse:forClass:", "assert:", "isJSStatementNode", "visit:", "astPCNodeVisitor", "currentNode"]
  74428. }),
  74429. $globals.ASTPCNodeVisitorTest);
  74430. $core.addMethod(
  74431. $core.method({
  74432. selector: "testMessageSend",
  74433. protocol: 'tests',
  74434. fn: function (){
  74435. var self=this;
  74436. var ast;
  74437. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  74438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74439. return $core.withContext(function($ctx1) {
  74440. //>>excludeEnd("ctx");
  74441. var $1,$2;
  74442. ast=self._parse_forClass_("foo self asString yourself. ^ self asBoolean",$Object());
  74443. $1=self._astPCNodeVisitorForSelector_("yourself");
  74444. $recv($1)._visit_(ast);
  74445. $2=$recv($1)._currentNode();
  74446. self._assert_equals_($recv($2)._selector(),"yourself");
  74447. return self;
  74448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74449. }, function($ctx1) {$ctx1.fill(self,"testMessageSend",{ast:ast},$globals.ASTPCNodeVisitorTest)});
  74450. //>>excludeEnd("ctx");
  74451. },
  74452. //>>excludeStart("ide", pragmas.excludeIdeData);
  74453. args: [],
  74454. 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'",
  74455. referencedClasses: ["Object"],
  74456. //>>excludeEnd("ide");
  74457. messageSends: ["parse:forClass:", "assert:equals:", "selector", "visit:", "astPCNodeVisitorForSelector:", "currentNode"]
  74458. }),
  74459. $globals.ASTPCNodeVisitorTest);
  74460. $core.addMethod(
  74461. $core.method({
  74462. selector: "testMessageSendWithBlocks",
  74463. protocol: 'tests',
  74464. fn: function (){
  74465. var self=this;
  74466. var ast;
  74467. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  74468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74469. return $core.withContext(function($ctx1) {
  74470. //>>excludeEnd("ctx");
  74471. var $1,$2;
  74472. ast=self._parse_forClass_("foo true ifTrue: [ [ self asString yourself ] value. ]. ^ self asBoolean",$Object());
  74473. $1=self._astPCNodeVisitorForSelector_("yourself");
  74474. $recv($1)._visit_(ast);
  74475. $2=$recv($1)._currentNode();
  74476. self._assert_equals_($recv($2)._selector(),"yourself");
  74477. return self;
  74478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74479. }, function($ctx1) {$ctx1.fill(self,"testMessageSendWithBlocks",{ast:ast},$globals.ASTPCNodeVisitorTest)});
  74480. //>>excludeEnd("ctx");
  74481. },
  74482. //>>excludeStart("ide", pragmas.excludeIdeData);
  74483. args: [],
  74484. 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'",
  74485. referencedClasses: ["Object"],
  74486. //>>excludeEnd("ide");
  74487. messageSends: ["parse:forClass:", "assert:equals:", "selector", "visit:", "astPCNodeVisitorForSelector:", "currentNode"]
  74488. }),
  74489. $globals.ASTPCNodeVisitorTest);
  74490. $core.addMethod(
  74491. $core.method({
  74492. selector: "testMessageSendWithInlining",
  74493. protocol: 'tests',
  74494. fn: function (){
  74495. var self=this;
  74496. var ast;
  74497. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  74498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74499. return $core.withContext(function($ctx1) {
  74500. //>>excludeEnd("ctx");
  74501. var $3,$4,$2,$1,$5,$6;
  74502. ast=self._parse_forClass_("foo true ifTrue: [ self asString yourself ]. ^ self asBoolean",$Object());
  74503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74504. $ctx1.sendIdx["parse:forClass:"]=1;
  74505. //>>excludeEnd("ctx");
  74506. $3=self._astPCNodeVisitorForSelector_("yourself");
  74507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74508. $ctx1.sendIdx["astPCNodeVisitorForSelector:"]=1;
  74509. //>>excludeEnd("ctx");
  74510. $recv($3)._visit_(ast);
  74511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74512. $ctx1.sendIdx["visit:"]=1;
  74513. //>>excludeEnd("ctx");
  74514. $4=$recv($3)._currentNode();
  74515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74516. $ctx1.sendIdx["currentNode"]=1;
  74517. //>>excludeEnd("ctx");
  74518. $2=$4;
  74519. $1=$recv($2)._selector();
  74520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74521. $ctx1.sendIdx["selector"]=1;
  74522. //>>excludeEnd("ctx");
  74523. self._assert_equals_($1,"yourself");
  74524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74525. $ctx1.sendIdx["assert:equals:"]=1;
  74526. //>>excludeEnd("ctx");
  74527. ast=self._parse_forClass_("foo true ifTrue: [ self asString yourself ]. ^ self asBoolean",$Object());
  74528. $5=self._astPCNodeVisitorForSelector_("asBoolean");
  74529. $recv($5)._visit_(ast);
  74530. $6=$recv($5)._currentNode();
  74531. self._assert_equals_($recv($6)._selector(),"asBoolean");
  74532. return self;
  74533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74534. }, function($ctx1) {$ctx1.fill(self,"testMessageSendWithInlining",{ast:ast},$globals.ASTPCNodeVisitorTest)});
  74535. //>>excludeEnd("ctx");
  74536. },
  74537. //>>excludeStart("ide", pragmas.excludeIdeData);
  74538. args: [],
  74539. 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'",
  74540. referencedClasses: ["Object"],
  74541. //>>excludeEnd("ide");
  74542. messageSends: ["parse:forClass:", "assert:equals:", "selector", "visit:", "astPCNodeVisitorForSelector:", "currentNode"]
  74543. }),
  74544. $globals.ASTPCNodeVisitorTest);
  74545. $core.addMethod(
  74546. $core.method({
  74547. selector: "testNoMessageSend",
  74548. protocol: 'tests',
  74549. fn: function (){
  74550. var self=this;
  74551. var ast;
  74552. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  74553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74554. return $core.withContext(function($ctx1) {
  74555. //>>excludeEnd("ctx");
  74556. var $1,$2;
  74557. ast=self._parse_forClass_("foo ^ self",$Object());
  74558. $1=self._astPCNodeVisitor();
  74559. $recv($1)._visit_(ast);
  74560. $2=$recv($1)._currentNode();
  74561. self._assert_($recv($2)._isNil());
  74562. return self;
  74563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74564. }, function($ctx1) {$ctx1.fill(self,"testNoMessageSend",{ast:ast},$globals.ASTPCNodeVisitorTest)});
  74565. //>>excludeEnd("ctx");
  74566. },
  74567. //>>excludeStart("ide", pragmas.excludeIdeData);
  74568. args: [],
  74569. 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",
  74570. referencedClasses: ["Object"],
  74571. //>>excludeEnd("ide");
  74572. messageSends: ["parse:forClass:", "assert:", "isNil", "visit:", "astPCNodeVisitor", "currentNode"]
  74573. }),
  74574. $globals.ASTPCNodeVisitorTest);
  74575. $core.addMethod(
  74576. $core.method({
  74577. selector: "testPC",
  74578. protocol: 'tests',
  74579. fn: function (){
  74580. var self=this;
  74581. var ast,visitor;
  74582. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  74583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74584. return $core.withContext(function($ctx1) {
  74585. //>>excludeEnd("ctx");
  74586. var $1,$2;
  74587. ast=self._parse_forClass_("foo <console.log(1)>",$Object());
  74588. $1=self._astPCNodeVisitor();
  74589. $recv($1)._visit_(ast);
  74590. $2=$recv($1)._currentNode();
  74591. self._assert_($recv($2)._isJSStatementNode());
  74592. return self;
  74593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74594. }, function($ctx1) {$ctx1.fill(self,"testPC",{ast:ast,visitor:visitor},$globals.ASTPCNodeVisitorTest)});
  74595. //>>excludeEnd("ctx");
  74596. },
  74597. //>>excludeStart("ide", pragmas.excludeIdeData);
  74598. args: [],
  74599. 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",
  74600. referencedClasses: ["Object"],
  74601. //>>excludeEnd("ide");
  74602. messageSends: ["parse:forClass:", "assert:", "isJSStatementNode", "visit:", "astPCNodeVisitor", "currentNode"]
  74603. }),
  74604. $globals.ASTPCNodeVisitorTest);
  74605. $core.addClass('ASTPositionTest', $globals.ASTParsingTest, [], 'Compiler-Tests');
  74606. $core.addMethod(
  74607. $core.method({
  74608. selector: "testNodeAtPosition",
  74609. protocol: 'tests',
  74610. fn: function (){
  74611. var self=this;
  74612. var node;
  74613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74614. return $core.withContext(function($ctx1) {
  74615. //>>excludeEnd("ctx");
  74616. var $3,$4,$2,$1,$7,$8,$6,$5;
  74617. node=self._parse_("yourself\x0a\x09^ self");
  74618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74619. $ctx1.sendIdx["parse:"]=1;
  74620. //>>excludeEnd("ctx");
  74621. $3=node;
  74622. $4=(2).__at((4));
  74623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74624. $ctx1.sendIdx["@"]=1;
  74625. //>>excludeEnd("ctx");
  74626. $2=$recv($3)._navigationNodeAt_ifAbsent_($4,(function(){
  74627. return nil;
  74628. }));
  74629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74630. $ctx1.sendIdx["navigationNodeAt:ifAbsent:"]=1;
  74631. //>>excludeEnd("ctx");
  74632. $1=$recv($2)._source();
  74633. self._assert_equals_($1,"self");
  74634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74635. $ctx1.sendIdx["assert:equals:"]=1;
  74636. //>>excludeEnd("ctx");
  74637. node=self._parse_("foo\x0a\x09true ifTrue: [ 1 ]");
  74638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74639. $ctx1.sendIdx["parse:"]=2;
  74640. //>>excludeEnd("ctx");
  74641. $7=node;
  74642. $8=(2).__at((7));
  74643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74644. $ctx1.sendIdx["@"]=2;
  74645. //>>excludeEnd("ctx");
  74646. $6=$recv($7)._navigationNodeAt_ifAbsent_($8,(function(){
  74647. return nil;
  74648. }));
  74649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74650. $ctx1.sendIdx["navigationNodeAt:ifAbsent:"]=2;
  74651. //>>excludeEnd("ctx");
  74652. $5=$recv($6)._selector();
  74653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74654. $ctx1.sendIdx["selector"]=1;
  74655. //>>excludeEnd("ctx");
  74656. self._assert_equals_($5,"ifTrue:");
  74657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74658. $ctx1.sendIdx["assert:equals:"]=2;
  74659. //>>excludeEnd("ctx");
  74660. node=self._parse_("foo\x0a\x09self foo; bar; baz");
  74661. self._assert_equals_($recv($recv(node)._navigationNodeAt_ifAbsent_((2).__at((8)),(function(){
  74662. return nil;
  74663. })))._selector(),"foo");
  74664. return self;
  74665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74666. }, function($ctx1) {$ctx1.fill(self,"testNodeAtPosition",{node:node},$globals.ASTPositionTest)});
  74667. //>>excludeEnd("ctx");
  74668. },
  74669. //>>excludeStart("ide", pragmas.excludeIdeData);
  74670. args: [],
  74671. 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'",
  74672. referencedClasses: [],
  74673. //>>excludeEnd("ide");
  74674. messageSends: ["parse:", "assert:equals:", "source", "navigationNodeAt:ifAbsent:", "@", "selector"]
  74675. }),
  74676. $globals.ASTPositionTest);
  74677. $core.addClass('CodeGeneratorTest', $globals.ASTParsingTest, ['receiver'], 'Compiler-Tests');
  74678. $core.addMethod(
  74679. $core.method({
  74680. selector: "codeGeneratorClass",
  74681. protocol: 'accessing',
  74682. fn: function (){
  74683. var self=this;
  74684. function $CodeGenerator(){return $globals.CodeGenerator||(typeof CodeGenerator=="undefined"?nil:CodeGenerator)}
  74685. return $CodeGenerator();
  74686. },
  74687. //>>excludeStart("ide", pragmas.excludeIdeData);
  74688. args: [],
  74689. source: "codeGeneratorClass\x0a\x09^ CodeGenerator",
  74690. referencedClasses: ["CodeGenerator"],
  74691. //>>excludeEnd("ide");
  74692. messageSends: []
  74693. }),
  74694. $globals.CodeGeneratorTest);
  74695. $core.addMethod(
  74696. $core.method({
  74697. selector: "compiler",
  74698. protocol: 'factory',
  74699. fn: function (){
  74700. var self=this;
  74701. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  74702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74703. return $core.withContext(function($ctx1) {
  74704. //>>excludeEnd("ctx");
  74705. var $2,$3,$1;
  74706. $2=$recv($Compiler())._new();
  74707. $recv($2)._codeGeneratorClass_(self._codeGeneratorClass());
  74708. $3=$recv($2)._yourself();
  74709. $1=$3;
  74710. return $1;
  74711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74712. }, function($ctx1) {$ctx1.fill(self,"compiler",{},$globals.CodeGeneratorTest)});
  74713. //>>excludeEnd("ctx");
  74714. },
  74715. //>>excludeStart("ide", pragmas.excludeIdeData);
  74716. args: [],
  74717. source: "compiler\x0a\x09^ Compiler new\x0a\x09\x09codeGeneratorClass: self codeGeneratorClass;\x0a\x09\x09yourself",
  74718. referencedClasses: ["Compiler"],
  74719. //>>excludeEnd("ide");
  74720. messageSends: ["codeGeneratorClass:", "new", "codeGeneratorClass", "yourself"]
  74721. }),
  74722. $globals.CodeGeneratorTest);
  74723. $core.addMethod(
  74724. $core.method({
  74725. selector: "setUp",
  74726. protocol: 'initialization',
  74727. fn: function (){
  74728. var self=this;
  74729. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  74730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74731. return $core.withContext(function($ctx1) {
  74732. //>>excludeEnd("ctx");
  74733. self["@receiver"]=$recv($DoIt())._new();
  74734. return self;
  74735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74736. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.CodeGeneratorTest)});
  74737. //>>excludeEnd("ctx");
  74738. },
  74739. //>>excludeStart("ide", pragmas.excludeIdeData);
  74740. args: [],
  74741. source: "setUp\x0a\x09receiver := DoIt new",
  74742. referencedClasses: ["DoIt"],
  74743. //>>excludeEnd("ide");
  74744. messageSends: ["new"]
  74745. }),
  74746. $globals.CodeGeneratorTest);
  74747. $core.addMethod(
  74748. $core.method({
  74749. selector: "should:receiver:return:",
  74750. protocol: 'testing',
  74751. fn: function (aString,anObject,aResult){
  74752. var self=this;
  74753. var method,result;
  74754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74755. return $core.withContext(function($ctx1) {
  74756. //>>excludeEnd("ctx");
  74757. var $1,$2;
  74758. self["@receiver"]=anObject;
  74759. $1=self._compiler();
  74760. $2=$recv(anObject)._class();
  74761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74762. $ctx1.sendIdx["class"]=1;
  74763. //>>excludeEnd("ctx");
  74764. method=$recv($1)._install_forClass_protocol_(aString,$2,"tests");
  74765. result=$recv(self["@receiver"])._perform_($recv(method)._selector());
  74766. $recv($recv(anObject)._class())._removeCompiledMethod_(method);
  74767. self._assert_equals_(aResult,result);
  74768. return self;
  74769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74770. }, function($ctx1) {$ctx1.fill(self,"should:receiver:return:",{aString:aString,anObject:anObject,aResult:aResult,method:method,result:result},$globals.CodeGeneratorTest)});
  74771. //>>excludeEnd("ctx");
  74772. },
  74773. //>>excludeStart("ide", pragmas.excludeIdeData);
  74774. args: ["aString", "anObject", "aResult"],
  74775. 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",
  74776. referencedClasses: [],
  74777. //>>excludeEnd("ide");
  74778. messageSends: ["install:forClass:protocol:", "compiler", "class", "perform:", "selector", "removeCompiledMethod:", "assert:equals:"]
  74779. }),
  74780. $globals.CodeGeneratorTest);
  74781. $core.addMethod(
  74782. $core.method({
  74783. selector: "should:return:",
  74784. protocol: 'testing',
  74785. fn: function (aString,anObject){
  74786. var self=this;
  74787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74788. return $core.withContext(function($ctx1) {
  74789. //>>excludeEnd("ctx");
  74790. var $1;
  74791. $1=self._should_receiver_return_(aString,self["@receiver"],anObject);
  74792. return $1;
  74793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74794. }, function($ctx1) {$ctx1.fill(self,"should:return:",{aString:aString,anObject:anObject},$globals.CodeGeneratorTest)});
  74795. //>>excludeEnd("ctx");
  74796. },
  74797. //>>excludeStart("ide", pragmas.excludeIdeData);
  74798. args: ["aString", "anObject"],
  74799. source: "should: aString return: anObject\x0a\x09^ self \x0a\x09\x09should: aString \x0a\x09\x09receiver: receiver \x0a\x09\x09return: anObject",
  74800. referencedClasses: [],
  74801. //>>excludeEnd("ide");
  74802. messageSends: ["should:receiver:return:"]
  74803. }),
  74804. $globals.CodeGeneratorTest);
  74805. $core.addMethod(
  74806. $core.method({
  74807. selector: "tearDown",
  74808. protocol: 'initialization',
  74809. fn: function (){
  74810. var self=this;
  74811. return self;
  74812. },
  74813. //>>excludeStart("ide", pragmas.excludeIdeData);
  74814. args: [],
  74815. source: "tearDown\x0a\x09\x22receiver := nil\x22",
  74816. referencedClasses: [],
  74817. //>>excludeEnd("ide");
  74818. messageSends: []
  74819. }),
  74820. $globals.CodeGeneratorTest);
  74821. $core.addMethod(
  74822. $core.method({
  74823. selector: "testAssignment",
  74824. protocol: 'tests',
  74825. fn: function (){
  74826. var self=this;
  74827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74828. return $core.withContext(function($ctx1) {
  74829. //>>excludeEnd("ctx");
  74830. self._should_return_("foo | a | a := true ifTrue: [ 1 ]. ^ a",(1));
  74831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74832. $ctx1.sendIdx["should:return:"]=1;
  74833. //>>excludeEnd("ctx");
  74834. self._should_return_("foo | a | a := false ifTrue: [ 1 ]. ^ a",nil);
  74835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74836. $ctx1.sendIdx["should:return:"]=2;
  74837. //>>excludeEnd("ctx");
  74838. self._should_return_("foo | a | ^ a := true ifTrue: [ 1 ]",(1));
  74839. return self;
  74840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74841. }, function($ctx1) {$ctx1.fill(self,"testAssignment",{},$globals.CodeGeneratorTest)});
  74842. //>>excludeEnd("ctx");
  74843. },
  74844. //>>excludeStart("ide", pragmas.excludeIdeData);
  74845. args: [],
  74846. 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",
  74847. referencedClasses: [],
  74848. //>>excludeEnd("ide");
  74849. messageSends: ["should:return:"]
  74850. }),
  74851. $globals.CodeGeneratorTest);
  74852. $core.addMethod(
  74853. $core.method({
  74854. selector: "testBackslashSelectors",
  74855. protocol: 'tests',
  74856. fn: function (){
  74857. var self=this;
  74858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74859. return $core.withContext(function($ctx1) {
  74860. //>>excludeEnd("ctx");
  74861. self._should_return_("\x5c arg ^ 4",(4));
  74862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74863. $ctx1.sendIdx["should:return:"]=1;
  74864. //>>excludeEnd("ctx");
  74865. self._should_return_("\x5c\x5c arg ^ 42",(42));
  74866. return self;
  74867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74868. }, function($ctx1) {$ctx1.fill(self,"testBackslashSelectors",{},$globals.CodeGeneratorTest)});
  74869. //>>excludeEnd("ctx");
  74870. },
  74871. //>>excludeStart("ide", pragmas.excludeIdeData);
  74872. args: [],
  74873. source: "testBackslashSelectors\x0a\x09\x0a\x09self should: '\x5c arg ^ 4' return: 4.\x0a\x09self should: '\x5c\x5c arg ^ 42' return: 42",
  74874. referencedClasses: [],
  74875. //>>excludeEnd("ide");
  74876. messageSends: ["should:return:"]
  74877. }),
  74878. $globals.CodeGeneratorTest);
  74879. $core.addMethod(
  74880. $core.method({
  74881. selector: "testBlockReturn",
  74882. protocol: 'tests',
  74883. fn: function (){
  74884. var self=this;
  74885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74886. return $core.withContext(function($ctx1) {
  74887. //>>excludeEnd("ctx");
  74888. self._should_return_("foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]",[(2), (3), (4)]);
  74889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74890. $ctx1.sendIdx["should:return:"]=1;
  74891. //>>excludeEnd("ctx");
  74892. self._should_return_("foo ^ #(1 2 3) collect: [ :each | false ifFalse: [ each + 1 ] ]",[(2), (3), (4)]);
  74893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74894. $ctx1.sendIdx["should:return:"]=2;
  74895. //>>excludeEnd("ctx");
  74896. self._should_return_("foo ^ #(1 2 3) collect: [ :each | each odd ifTrue: [ each + 1 ] ifFalse: [ each - 1 ] ]",[(2), (1), (4)]);
  74897. return self;
  74898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74899. }, function($ctx1) {$ctx1.fill(self,"testBlockReturn",{},$globals.CodeGeneratorTest)});
  74900. //>>excludeEnd("ctx");
  74901. },
  74902. //>>excludeStart("ide", pragmas.excludeIdeData);
  74903. args: [],
  74904. 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).",
  74905. referencedClasses: [],
  74906. //>>excludeEnd("ide");
  74907. messageSends: ["should:return:"]
  74908. }),
  74909. $globals.CodeGeneratorTest);
  74910. $core.addMethod(
  74911. $core.method({
  74912. selector: "testCascades",
  74913. protocol: 'tests',
  74914. fn: function (){
  74915. var self=this;
  74916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74917. return $core.withContext(function($ctx1) {
  74918. //>>excludeEnd("ctx");
  74919. self._should_return_("foo ^ Array new add: 3; add: 4; yourself",[(3), (4)]);
  74920. return self;
  74921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74922. }, function($ctx1) {$ctx1.fill(self,"testCascades",{},$globals.CodeGeneratorTest)});
  74923. //>>excludeEnd("ctx");
  74924. },
  74925. //>>excludeStart("ide", pragmas.excludeIdeData);
  74926. args: [],
  74927. source: "testCascades\x0a\x09\x0a\x09self should: 'foo ^ Array new add: 3; add: 4; yourself' return: #(3 4)",
  74928. referencedClasses: [],
  74929. //>>excludeEnd("ide");
  74930. messageSends: ["should:return:"]
  74931. }),
  74932. $globals.CodeGeneratorTest);
  74933. $core.addMethod(
  74934. $core.method({
  74935. selector: "testCascadesWithInlining",
  74936. protocol: 'tests',
  74937. fn: function (){
  74938. var self=this;
  74939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74940. return $core.withContext(function($ctx1) {
  74941. //>>excludeEnd("ctx");
  74942. self._should_return_("foo ^ true ifTrue: [ 1 ] ifFalse: [ 2 ]",(1));
  74943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74944. $ctx1.sendIdx["should:return:"]=1;
  74945. //>>excludeEnd("ctx");
  74946. self._should_return_("foo ^ false ifTrue: [ 1 ] ifFalse: [ 2 ]",(2));
  74947. return self;
  74948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74949. }, function($ctx1) {$ctx1.fill(self,"testCascadesWithInlining",{},$globals.CodeGeneratorTest)});
  74950. //>>excludeEnd("ctx");
  74951. },
  74952. //>>excludeStart("ide", pragmas.excludeIdeData);
  74953. args: [],
  74954. 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",
  74955. referencedClasses: [],
  74956. //>>excludeEnd("ide");
  74957. messageSends: ["should:return:"]
  74958. }),
  74959. $globals.CodeGeneratorTest);
  74960. $core.addMethod(
  74961. $core.method({
  74962. selector: "testDynamicArrayElementsOrdered",
  74963. protocol: 'tests',
  74964. fn: function (){
  74965. var self=this;
  74966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74967. return $core.withContext(function($ctx1) {
  74968. //>>excludeEnd("ctx");
  74969. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { x. x := 2 }\x0a",[(1), (2)]);
  74970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74971. $ctx1.sendIdx["should:return:"]=1;
  74972. //>>excludeEnd("ctx");
  74973. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { x. true ifTrue: [ x := 2 ] }\x0a",[(1), (2)]);
  74974. return self;
  74975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74976. }, function($ctx1) {$ctx1.fill(self,"testDynamicArrayElementsOrdered",{},$globals.CodeGeneratorTest)});
  74977. //>>excludeEnd("ctx");
  74978. },
  74979. //>>excludeStart("ide", pragmas.excludeIdeData);
  74980. args: [],
  74981. 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).",
  74982. referencedClasses: [],
  74983. //>>excludeEnd("ide");
  74984. messageSends: ["should:return:"]
  74985. }),
  74986. $globals.CodeGeneratorTest);
  74987. $core.addMethod(
  74988. $core.method({
  74989. selector: "testDynamicDictionaryElementsOrdered",
  74990. protocol: 'tests',
  74991. fn: function (){
  74992. var self=this;
  74993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74994. return $core.withContext(function($ctx1) {
  74995. //>>excludeEnd("ctx");
  74996. 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)]));
  74997. return self;
  74998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74999. }, function($ctx1) {$ctx1.fill(self,"testDynamicDictionaryElementsOrdered",{},$globals.CodeGeneratorTest)});
  75000. //>>excludeEnd("ctx");
  75001. },
  75002. //>>excludeStart("ide", pragmas.excludeIdeData);
  75003. args: [],
  75004. 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}.",
  75005. referencedClasses: [],
  75006. //>>excludeEnd("ide");
  75007. messageSends: ["should:return:"]
  75008. }),
  75009. $globals.CodeGeneratorTest);
  75010. $core.addMethod(
  75011. $core.method({
  75012. selector: "testDynamicDictionaryWithMoreArrows",
  75013. protocol: 'tests',
  75014. fn: function (){
  75015. var self=this;
  75016. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  75017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75018. return $core.withContext(function($ctx1) {
  75019. //>>excludeEnd("ctx");
  75020. var $2,$1;
  75021. $2=$recv((1).__minus_gt((2))).__minus_gt((3));
  75022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75023. $ctx1.sendIdx["->"]=1;
  75024. //>>excludeEnd("ctx");
  75025. $1=$recv($HashedCollection())._with_($2);
  75026. self._should_return_("foo ^ #{1->2->3}",$1);
  75027. return self;
  75028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75029. }, function($ctx1) {$ctx1.fill(self,"testDynamicDictionaryWithMoreArrows",{},$globals.CodeGeneratorTest)});
  75030. //>>excludeEnd("ctx");
  75031. },
  75032. //>>excludeStart("ide", pragmas.excludeIdeData);
  75033. args: [],
  75034. source: "testDynamicDictionaryWithMoreArrows\x0a\x09self should: 'foo ^ #{1->2->3}' return: (HashedCollection with: 1->2->3)",
  75035. referencedClasses: ["HashedCollection"],
  75036. //>>excludeEnd("ide");
  75037. messageSends: ["should:return:", "with:", "->"]
  75038. }),
  75039. $globals.CodeGeneratorTest);
  75040. $core.addMethod(
  75041. $core.method({
  75042. selector: "testGlobalVar",
  75043. protocol: 'tests',
  75044. fn: function (){
  75045. var self=this;
  75046. function $BlockClosure(){return $globals.BlockClosure||(typeof BlockClosure=="undefined"?nil:BlockClosure)}
  75047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75048. return $core.withContext(function($ctx1) {
  75049. //>>excludeEnd("ctx");
  75050. self._should_return_("foo ^ eval class",$BlockClosure());
  75051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75052. $ctx1.sendIdx["should:return:"]=1;
  75053. //>>excludeEnd("ctx");
  75054. self._should_return_("foo ^ Math cos: 0",(1));
  75055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75056. $ctx1.sendIdx["should:return:"]=2;
  75057. //>>excludeEnd("ctx");
  75058. self._should_return_("foo ^ NonExistingVar",nil);
  75059. return self;
  75060. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75061. }, function($ctx1) {$ctx1.fill(self,"testGlobalVar",{},$globals.CodeGeneratorTest)});
  75062. //>>excludeEnd("ctx");
  75063. },
  75064. //>>excludeStart("ide", pragmas.excludeIdeData);
  75065. args: [],
  75066. 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",
  75067. referencedClasses: ["BlockClosure"],
  75068. //>>excludeEnd("ide");
  75069. messageSends: ["should:return:"]
  75070. }),
  75071. $globals.CodeGeneratorTest);
  75072. $core.addMethod(
  75073. $core.method({
  75074. selector: "testInnerTemporalDependentElementsOrdered",
  75075. protocol: 'tests',
  75076. fn: function (){
  75077. var self=this;
  75078. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  75079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75080. return $core.withContext(function($ctx1) {
  75081. //>>excludeEnd("ctx");
  75082. var $2,$3,$1,$5,$6,$4,$8,$9,$7,$11,$10;
  75083. $2="foo".__minus_gt($Array());
  75084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75085. $ctx1.sendIdx["->"]=1;
  75086. //>>excludeEnd("ctx");
  75087. $3="bar".__minus_gt((2));
  75088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75089. $ctx1.sendIdx["->"]=2;
  75090. //>>excludeEnd("ctx");
  75091. $1=[$2,$3];
  75092. self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: 'foo'->x with: 'bar'->(x := 2)\x0a",$1);
  75093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75094. $ctx1.sendIdx["should:return:"]=1;
  75095. //>>excludeEnd("ctx");
  75096. $5="foo".__minus_gt($Array());
  75097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75098. $ctx1.sendIdx["->"]=3;
  75099. //>>excludeEnd("ctx");
  75100. $6="bar".__minus_gt((2));
  75101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75102. $ctx1.sendIdx["->"]=4;
  75103. //>>excludeEnd("ctx");
  75104. $4=[$5,$6];
  75105. self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: 'foo'->x with: 'bar'->(true ifTrue: [ x := 2 ])\x0a",$4);
  75106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75107. $ctx1.sendIdx["should:return:"]=2;
  75108. //>>excludeEnd("ctx");
  75109. $8="foo".__minus_gt((1));
  75110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75111. $ctx1.sendIdx["->"]=5;
  75112. //>>excludeEnd("ctx");
  75113. $9="bar".__minus_gt((2));
  75114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75115. $ctx1.sendIdx["->"]=6;
  75116. //>>excludeEnd("ctx");
  75117. $7=[$8,$9];
  75118. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: 'foo'->x with: 'bar'->(true ifTrue: [ x := 2 ])\x0a",$7);
  75119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75120. $ctx1.sendIdx["should:return:"]=3;
  75121. //>>excludeEnd("ctx");
  75122. $11="foo".__minus_gt((1));
  75123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75124. $ctx1.sendIdx["->"]=7;
  75125. //>>excludeEnd("ctx");
  75126. $10=[$11,"bar".__minus_gt((2))];
  75127. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { 'foo'->x. 'bar'->(true ifTrue: [ x := 2 ]) }\x0a",$10);
  75128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75129. $ctx1.sendIdx["should:return:"]=4;
  75130. //>>excludeEnd("ctx");
  75131. 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)]));
  75132. return self;
  75133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75134. }, function($ctx1) {$ctx1.fill(self,"testInnerTemporalDependentElementsOrdered",{},$globals.CodeGeneratorTest)});
  75135. //>>excludeEnd("ctx");
  75136. },
  75137. //>>excludeStart("ide", pragmas.excludeIdeData);
  75138. args: [],
  75139. 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}.",
  75140. referencedClasses: ["Array"],
  75141. //>>excludeEnd("ide");
  75142. messageSends: ["should:return:", "->"]
  75143. }),
  75144. $globals.CodeGeneratorTest);
  75145. $core.addMethod(
  75146. $core.method({
  75147. selector: "testJSStatement",
  75148. protocol: 'tests',
  75149. fn: function (){
  75150. var self=this;
  75151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75152. return $core.withContext(function($ctx1) {
  75153. //>>excludeEnd("ctx");
  75154. self._should_return_("foo <return 2+3>",(5));
  75155. return self;
  75156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75157. }, function($ctx1) {$ctx1.fill(self,"testJSStatement",{},$globals.CodeGeneratorTest)});
  75158. //>>excludeEnd("ctx");
  75159. },
  75160. //>>excludeStart("ide", pragmas.excludeIdeData);
  75161. args: [],
  75162. source: "testJSStatement\x0a\x09self should: 'foo <return 2+3>' return: 5",
  75163. referencedClasses: [],
  75164. //>>excludeEnd("ide");
  75165. messageSends: ["should:return:"]
  75166. }),
  75167. $globals.CodeGeneratorTest);
  75168. $core.addMethod(
  75169. $core.method({
  75170. selector: "testLexicalScope",
  75171. protocol: 'tests',
  75172. fn: function (){
  75173. var self=this;
  75174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75175. return $core.withContext(function($ctx1) {
  75176. //>>excludeEnd("ctx");
  75177. self._should_return_("foo | a | a := 1. [ a := 2 ] value. ^ a",(2));
  75178. return self;
  75179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75180. }, function($ctx1) {$ctx1.fill(self,"testLexicalScope",{},$globals.CodeGeneratorTest)});
  75181. //>>excludeEnd("ctx");
  75182. },
  75183. //>>excludeStart("ide", pragmas.excludeIdeData);
  75184. args: [],
  75185. source: "testLexicalScope\x0a\x09self should: 'foo | a | a := 1. [ a := 2 ] value. ^ a' return: 2",
  75186. referencedClasses: [],
  75187. //>>excludeEnd("ide");
  75188. messageSends: ["should:return:"]
  75189. }),
  75190. $globals.CodeGeneratorTest);
  75191. $core.addMethod(
  75192. $core.method({
  75193. selector: "testLiterals",
  75194. protocol: 'tests',
  75195. fn: function (){
  75196. var self=this;
  75197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75198. return $core.withContext(function($ctx1) {
  75199. //>>excludeEnd("ctx");
  75200. self._should_return_("foo ^ 1",(1));
  75201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75202. $ctx1.sendIdx["should:return:"]=1;
  75203. //>>excludeEnd("ctx");
  75204. self._should_return_("foo ^ 'hello'","hello");
  75205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75206. $ctx1.sendIdx["should:return:"]=2;
  75207. //>>excludeEnd("ctx");
  75208. self._should_return_("foo ^ #(1 2 3 4)",[(1), (2), (3), (4)]);
  75209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75210. $ctx1.sendIdx["should:return:"]=3;
  75211. //>>excludeEnd("ctx");
  75212. self._should_return_("foo ^ {1. [:x | x ] value: 2. 3. [4] value}",[(1), (2), (3), (4)]);
  75213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75214. $ctx1.sendIdx["should:return:"]=4;
  75215. //>>excludeEnd("ctx");
  75216. self._should_return_("foo ^ true",true);
  75217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75218. $ctx1.sendIdx["should:return:"]=5;
  75219. //>>excludeEnd("ctx");
  75220. self._should_return_("foo ^ false",false);
  75221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75222. $ctx1.sendIdx["should:return:"]=6;
  75223. //>>excludeEnd("ctx");
  75224. self._should_return_("foo ^ #{1->2. 3->4}",$globals.HashedCollection._newFromPairs_([(1),(2),(3),(4)]));
  75225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75226. $ctx1.sendIdx["should:return:"]=7;
  75227. //>>excludeEnd("ctx");
  75228. self._should_return_("foo ^ #hello","hello");
  75229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75230. $ctx1.sendIdx["should:return:"]=8;
  75231. //>>excludeEnd("ctx");
  75232. self._should_return_("foo ^ $h","h");
  75233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75234. $ctx1.sendIdx["should:return:"]=9;
  75235. //>>excludeEnd("ctx");
  75236. self._should_return_("foo ^ -123.456",(-123.456));
  75237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75238. $ctx1.sendIdx["should:return:"]=10;
  75239. //>>excludeEnd("ctx");
  75240. self._should_return_("foo ^ -2.5e4",(-25000));
  75241. return self;
  75242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75243. }, function($ctx1) {$ctx1.fill(self,"testLiterals",{},$globals.CodeGeneratorTest)});
  75244. //>>excludeEnd("ctx");
  75245. },
  75246. //>>excludeStart("ide", pragmas.excludeIdeData);
  75247. args: [],
  75248. 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.",
  75249. referencedClasses: [],
  75250. //>>excludeEnd("ide");
  75251. messageSends: ["should:return:"]
  75252. }),
  75253. $globals.CodeGeneratorTest);
  75254. $core.addMethod(
  75255. $core.method({
  75256. selector: "testLocalReturn",
  75257. protocol: 'tests',
  75258. fn: function (){
  75259. var self=this;
  75260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75261. return $core.withContext(function($ctx1) {
  75262. //>>excludeEnd("ctx");
  75263. self._should_return_("foo ^ 1",(1));
  75264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75265. $ctx1.sendIdx["should:return:"]=1;
  75266. //>>excludeEnd("ctx");
  75267. self._should_return_("foo ^ 1 + 1",(2));
  75268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75269. $ctx1.sendIdx["should:return:"]=2;
  75270. //>>excludeEnd("ctx");
  75271. self._should_return_("foo ",self["@receiver"]);
  75272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75273. $ctx1.sendIdx["should:return:"]=3;
  75274. //>>excludeEnd("ctx");
  75275. self._should_return_("foo self asString",self["@receiver"]);
  75276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75277. $ctx1.sendIdx["should:return:"]=4;
  75278. //>>excludeEnd("ctx");
  75279. self._should_return_("foo | a b | a := 1. b := 2. ^ a + b",(3));
  75280. return self;
  75281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75282. }, function($ctx1) {$ctx1.fill(self,"testLocalReturn",{},$globals.CodeGeneratorTest)});
  75283. //>>excludeEnd("ctx");
  75284. },
  75285. //>>excludeStart("ide", pragmas.excludeIdeData);
  75286. args: [],
  75287. 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",
  75288. referencedClasses: [],
  75289. //>>excludeEnd("ide");
  75290. messageSends: ["should:return:"]
  75291. }),
  75292. $globals.CodeGeneratorTest);
  75293. $core.addMethod(
  75294. $core.method({
  75295. selector: "testMessageSends",
  75296. protocol: 'tests',
  75297. fn: function (){
  75298. var self=this;
  75299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75300. return $core.withContext(function($ctx1) {
  75301. //>>excludeEnd("ctx");
  75302. self._should_return_("foo ^ 1 asString","1");
  75303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75304. $ctx1.sendIdx["should:return:"]=1;
  75305. //>>excludeEnd("ctx");
  75306. self._should_return_("foo ^ 1 + 1",(2));
  75307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75308. $ctx1.sendIdx["should:return:"]=2;
  75309. //>>excludeEnd("ctx");
  75310. self._should_return_("foo ^ 1 + 2 * 3",(9));
  75311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75312. $ctx1.sendIdx["should:return:"]=3;
  75313. //>>excludeEnd("ctx");
  75314. self._should_return_("foo ^ 1 to: 3",[(1), (2), (3)]);
  75315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75316. $ctx1.sendIdx["should:return:"]=4;
  75317. //>>excludeEnd("ctx");
  75318. self._should_return_("foo ^ 1 to: 5 by: 2",[(1), (3), (5)]);
  75319. return self;
  75320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75321. }, function($ctx1) {$ctx1.fill(self,"testMessageSends",{},$globals.CodeGeneratorTest)});
  75322. //>>excludeEnd("ctx");
  75323. },
  75324. //>>excludeStart("ide", pragmas.excludeIdeData);
  75325. args: [],
  75326. 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)",
  75327. referencedClasses: [],
  75328. //>>excludeEnd("ide");
  75329. messageSends: ["should:return:"]
  75330. }),
  75331. $globals.CodeGeneratorTest);
  75332. $core.addMethod(
  75333. $core.method({
  75334. selector: "testMultipleSequences",
  75335. protocol: 'tests',
  75336. fn: function (){
  75337. var self=this;
  75338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75339. return $core.withContext(function($ctx1) {
  75340. //>>excludeEnd("ctx");
  75341. self._should_return_("foo | a b c | a := 2. b := 3. c := a + b. ^ c * 6",(30));
  75342. return self;
  75343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75344. }, function($ctx1) {$ctx1.fill(self,"testMultipleSequences",{},$globals.CodeGeneratorTest)});
  75345. //>>excludeEnd("ctx");
  75346. },
  75347. //>>excludeStart("ide", pragmas.excludeIdeData);
  75348. args: [],
  75349. source: "testMultipleSequences\x0a\x09self should: 'foo | a b c | a := 2. b := 3. c := a + b. ^ c * 6' return: 30",
  75350. referencedClasses: [],
  75351. //>>excludeEnd("ide");
  75352. messageSends: ["should:return:"]
  75353. }),
  75354. $globals.CodeGeneratorTest);
  75355. $core.addMethod(
  75356. $core.method({
  75357. selector: "testMutableLiterals",
  75358. protocol: 'tests',
  75359. fn: function (){
  75360. var self=this;
  75361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75362. return $core.withContext(function($ctx1) {
  75363. //>>excludeEnd("ctx");
  75364. self._should_return_("foo ^ #( 1 2 ) at: 1 put: 3; yourself",[(3), (2)]);
  75365. return self;
  75366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75367. }, function($ctx1) {$ctx1.fill(self,"testMutableLiterals",{},$globals.CodeGeneratorTest)});
  75368. //>>excludeEnd("ctx");
  75369. },
  75370. //>>excludeStart("ide", pragmas.excludeIdeData);
  75371. args: [],
  75372. 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)",
  75373. referencedClasses: [],
  75374. //>>excludeEnd("ide");
  75375. messageSends: ["should:return:"]
  75376. }),
  75377. $globals.CodeGeneratorTest);
  75378. $core.addMethod(
  75379. $core.method({
  75380. selector: "testNestedIfTrue",
  75381. protocol: 'tests',
  75382. fn: function (){
  75383. var self=this;
  75384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75385. return $core.withContext(function($ctx1) {
  75386. //>>excludeEnd("ctx");
  75387. self._should_return_("foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]",(1));
  75388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75389. $ctx1.sendIdx["should:return:"]=1;
  75390. //>>excludeEnd("ctx");
  75391. self._should_return_("foo ^ true ifTrue: [ false ifTrue: [ 1 ] ]",nil);
  75392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75393. $ctx1.sendIdx["should:return:"]=2;
  75394. //>>excludeEnd("ctx");
  75395. self._should_return_("foo true ifTrue: [ false ifFalse: [ ^ 1 ] ]",(1));
  75396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75397. $ctx1.sendIdx["should:return:"]=3;
  75398. //>>excludeEnd("ctx");
  75399. self._should_return_("foo true ifTrue: [ false ifTrue: [ ^ 1 ] ]",self["@receiver"]);
  75400. return self;
  75401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75402. }, function($ctx1) {$ctx1.fill(self,"testNestedIfTrue",{},$globals.CodeGeneratorTest)});
  75403. //>>excludeEnd("ctx");
  75404. },
  75405. //>>excludeStart("ide", pragmas.excludeIdeData);
  75406. args: [],
  75407. 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.",
  75408. referencedClasses: [],
  75409. //>>excludeEnd("ide");
  75410. messageSends: ["should:return:"]
  75411. }),
  75412. $globals.CodeGeneratorTest);
  75413. $core.addMethod(
  75414. $core.method({
  75415. selector: "testNestedSends",
  75416. protocol: 'tests',
  75417. fn: function (){
  75418. var self=this;
  75419. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  75420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75421. return $core.withContext(function($ctx1) {
  75422. //>>excludeEnd("ctx");
  75423. self._should_return_("foo ^ (Point x: (Point x: 2 y: 3) y: 4) asString",$recv($recv($Point())._x_y_((2).__at((3)),(4)))._asString());
  75424. return self;
  75425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75426. }, function($ctx1) {$ctx1.fill(self,"testNestedSends",{},$globals.CodeGeneratorTest)});
  75427. //>>excludeEnd("ctx");
  75428. },
  75429. //>>excludeStart("ide", pragmas.excludeIdeData);
  75430. args: [],
  75431. source: "testNestedSends\x0a\x09self should: 'foo ^ (Point x: (Point x: 2 y: 3) y: 4) asString' return: (Point x: (2@3) y: 4) asString",
  75432. referencedClasses: ["Point"],
  75433. //>>excludeEnd("ide");
  75434. messageSends: ["should:return:", "asString", "x:y:", "@"]
  75435. }),
  75436. $globals.CodeGeneratorTest);
  75437. $core.addMethod(
  75438. $core.method({
  75439. selector: "testNonLocalReturn",
  75440. protocol: 'tests',
  75441. fn: function (){
  75442. var self=this;
  75443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75444. return $core.withContext(function($ctx1) {
  75445. //>>excludeEnd("ctx");
  75446. self._should_return_("foo [ ^ 1 ] value",(1));
  75447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75448. $ctx1.sendIdx["should:return:"]=1;
  75449. //>>excludeEnd("ctx");
  75450. self._should_return_("foo [ ^ 1 + 1 ] value",(2));
  75451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75452. $ctx1.sendIdx["should:return:"]=2;
  75453. //>>excludeEnd("ctx");
  75454. self._should_return_("foo | a b | a := 1. b := 2. [ ^ a + b ] value. self halt",(3));
  75455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75456. $ctx1.sendIdx["should:return:"]=3;
  75457. //>>excludeEnd("ctx");
  75458. self._should_return_("foo [ :x | ^ x + x ] value: 4. ^ 2",(8));
  75459. return self;
  75460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75461. }, function($ctx1) {$ctx1.fill(self,"testNonLocalReturn",{},$globals.CodeGeneratorTest)});
  75462. //>>excludeEnd("ctx");
  75463. },
  75464. //>>excludeStart("ide", pragmas.excludeIdeData);
  75465. args: [],
  75466. 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",
  75467. referencedClasses: [],
  75468. //>>excludeEnd("ide");
  75469. messageSends: ["should:return:"]
  75470. }),
  75471. $globals.CodeGeneratorTest);
  75472. $core.addMethod(
  75473. $core.method({
  75474. selector: "testPascalCaseGlobal",
  75475. protocol: 'tests',
  75476. fn: function (){
  75477. var self=this;
  75478. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75480. return $core.withContext(function($ctx1) {
  75481. //>>excludeEnd("ctx");
  75482. self._should_return_("foo ^Object",$recv($recv($Smalltalk())._globals())._at_("Object"));
  75483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75484. $ctx1.sendIdx["should:return:"]=1;
  75485. //>>excludeEnd("ctx");
  75486. self._should_return_("foo ^NonExistent",nil);
  75487. return self;
  75488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75489. }, function($ctx1) {$ctx1.fill(self,"testPascalCaseGlobal",{},$globals.CodeGeneratorTest)});
  75490. //>>excludeEnd("ctx");
  75491. },
  75492. //>>excludeStart("ide", pragmas.excludeIdeData);
  75493. args: [],
  75494. source: "testPascalCaseGlobal\x0a\x09self should: 'foo ^Object' return: (Smalltalk globals at: 'Object').\x0a\x09self should: 'foo ^NonExistent' return: nil",
  75495. referencedClasses: ["Smalltalk"],
  75496. //>>excludeEnd("ide");
  75497. messageSends: ["should:return:", "at:", "globals"]
  75498. }),
  75499. $globals.CodeGeneratorTest);
  75500. $core.addMethod(
  75501. $core.method({
  75502. selector: "testSendReceiverAndArgumentsOrdered",
  75503. protocol: 'tests',
  75504. fn: function (){
  75505. var self=this;
  75506. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  75507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75508. return $core.withContext(function($ctx1) {
  75509. //>>excludeEnd("ctx");
  75510. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: x with: (true ifTrue: [ x := 2 ])\x0a",[(1), (2)]);
  75511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75512. $ctx1.sendIdx["should:return:"]=1;
  75513. //>>excludeEnd("ctx");
  75514. self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: x with: (true ifTrue: [ x := 2 ])\x0a",[$Array(),(2)]);
  75515. return self;
  75516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75517. }, function($ctx1) {$ctx1.fill(self,"testSendReceiverAndArgumentsOrdered",{},$globals.CodeGeneratorTest)});
  75518. //>>excludeEnd("ctx");
  75519. },
  75520. //>>excludeStart("ide", pragmas.excludeIdeData);
  75521. args: [],
  75522. 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}.",
  75523. referencedClasses: ["Array"],
  75524. //>>excludeEnd("ide");
  75525. messageSends: ["should:return:"]
  75526. }),
  75527. $globals.CodeGeneratorTest);
  75528. $core.addMethod(
  75529. $core.method({
  75530. selector: "testSuperSend",
  75531. protocol: 'tests',
  75532. fn: function (){
  75533. var self=this;
  75534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75535. return $core.withContext(function($ctx1) {
  75536. //>>excludeEnd("ctx");
  75537. self._should_receiver_return_("foo ^ super isBoolean",true,false);
  75538. return self;
  75539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75540. }, function($ctx1) {$ctx1.fill(self,"testSuperSend",{},$globals.CodeGeneratorTest)});
  75541. //>>excludeEnd("ctx");
  75542. },
  75543. //>>excludeStart("ide", pragmas.excludeIdeData);
  75544. args: [],
  75545. source: "testSuperSend\x0a\x09self \x0a\x09\x09should: 'foo ^ super isBoolean' \x0a\x09\x09receiver: true\x0a\x09\x09return: false",
  75546. referencedClasses: [],
  75547. //>>excludeEnd("ide");
  75548. messageSends: ["should:receiver:return:"]
  75549. }),
  75550. $globals.CodeGeneratorTest);
  75551. $core.addMethod(
  75552. $core.method({
  75553. selector: "testTempVariables",
  75554. protocol: 'tests',
  75555. fn: function (){
  75556. var self=this;
  75557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75558. return $core.withContext(function($ctx1) {
  75559. //>>excludeEnd("ctx");
  75560. self._should_return_("foo | a | ^ a",nil);
  75561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75562. $ctx1.sendIdx["should:return:"]=1;
  75563. //>>excludeEnd("ctx");
  75564. self._should_return_("foo | AVariable | ^ AVariable",nil);
  75565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75566. $ctx1.sendIdx["should:return:"]=2;
  75567. //>>excludeEnd("ctx");
  75568. self._should_return_("foo | a b c | ^ c",nil);
  75569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75570. $ctx1.sendIdx["should:return:"]=3;
  75571. //>>excludeEnd("ctx");
  75572. self._should_return_("foo | a | [ | d | ^ d ] value",nil);
  75573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75574. $ctx1.sendIdx["should:return:"]=4;
  75575. //>>excludeEnd("ctx");
  75576. self._should_return_("foo | a | a:= 1. ^ a",(1));
  75577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75578. $ctx1.sendIdx["should:return:"]=5;
  75579. //>>excludeEnd("ctx");
  75580. self._should_return_("foo | AVariable | AVariable := 1. ^ AVariable",(1));
  75581. return self;
  75582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75583. }, function($ctx1) {$ctx1.fill(self,"testTempVariables",{},$globals.CodeGeneratorTest)});
  75584. //>>excludeEnd("ctx");
  75585. },
  75586. //>>excludeStart("ide", pragmas.excludeIdeData);
  75587. args: [],
  75588. 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.",
  75589. referencedClasses: [],
  75590. //>>excludeEnd("ide");
  75591. messageSends: ["should:return:"]
  75592. }),
  75593. $globals.CodeGeneratorTest);
  75594. $core.addMethod(
  75595. $core.method({
  75596. selector: "testThisContext",
  75597. protocol: 'tests',
  75598. fn: function (){
  75599. var self=this;
  75600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75601. return $core.withContext(function($ctx1) {
  75602. //>>excludeEnd("ctx");
  75603. self._should_return_("foo ^ [ thisContext ] value outerContext == thisContext",true);
  75604. return self;
  75605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75606. }, function($ctx1) {$ctx1.fill(self,"testThisContext",{},$globals.CodeGeneratorTest)});
  75607. //>>excludeEnd("ctx");
  75608. },
  75609. //>>excludeStart("ide", pragmas.excludeIdeData);
  75610. args: [],
  75611. source: "testThisContext\x0a\x09self should: 'foo ^ [ thisContext ] value outerContext == thisContext' return: true",
  75612. referencedClasses: [],
  75613. //>>excludeEnd("ide");
  75614. messageSends: ["should:return:"]
  75615. }),
  75616. $globals.CodeGeneratorTest);
  75617. $core.addMethod(
  75618. $core.method({
  75619. selector: "testifFalse",
  75620. protocol: 'tests',
  75621. fn: function (){
  75622. var self=this;
  75623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75624. return $core.withContext(function($ctx1) {
  75625. //>>excludeEnd("ctx");
  75626. self._should_return_("foo true ifFalse: [ ^ 1 ]",self["@receiver"]);
  75627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75628. $ctx1.sendIdx["should:return:"]=1;
  75629. //>>excludeEnd("ctx");
  75630. self._should_return_("foo false ifFalse: [ ^ 2 ]",(2));
  75631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75632. $ctx1.sendIdx["should:return:"]=2;
  75633. //>>excludeEnd("ctx");
  75634. self._should_return_("foo ^ true ifFalse: [ 1 ]",nil);
  75635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75636. $ctx1.sendIdx["should:return:"]=3;
  75637. //>>excludeEnd("ctx");
  75638. self._should_return_("foo ^ false ifFalse: [ 2 ]",(2));
  75639. return self;
  75640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75641. }, function($ctx1) {$ctx1.fill(self,"testifFalse",{},$globals.CodeGeneratorTest)});
  75642. //>>excludeEnd("ctx");
  75643. },
  75644. //>>excludeStart("ide", pragmas.excludeIdeData);
  75645. args: [],
  75646. 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.",
  75647. referencedClasses: [],
  75648. //>>excludeEnd("ide");
  75649. messageSends: ["should:return:"]
  75650. }),
  75651. $globals.CodeGeneratorTest);
  75652. $core.addMethod(
  75653. $core.method({
  75654. selector: "testifFalseIfTrue",
  75655. protocol: 'tests',
  75656. fn: function (){
  75657. var self=this;
  75658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75659. return $core.withContext(function($ctx1) {
  75660. //>>excludeEnd("ctx");
  75661. self._should_return_("foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]",(2));
  75662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75663. $ctx1.sendIdx["should:return:"]=1;
  75664. //>>excludeEnd("ctx");
  75665. self._should_return_("foo false ifFalse: [ ^ 2 ] ifTrue: [ ^1 ]",(2));
  75666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75667. $ctx1.sendIdx["should:return:"]=2;
  75668. //>>excludeEnd("ctx");
  75669. self._should_return_("foo ^ true ifFalse: [ 1 ] ifTrue: [ 2 ]",(2));
  75670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75671. $ctx1.sendIdx["should:return:"]=3;
  75672. //>>excludeEnd("ctx");
  75673. self._should_return_("foo ^ false ifFalse: [ 2 ] ifTrue: [ 1 ]",(2));
  75674. return self;
  75675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75676. }, function($ctx1) {$ctx1.fill(self,"testifFalseIfTrue",{},$globals.CodeGeneratorTest)});
  75677. //>>excludeEnd("ctx");
  75678. },
  75679. //>>excludeStart("ide", pragmas.excludeIdeData);
  75680. args: [],
  75681. 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.",
  75682. referencedClasses: [],
  75683. //>>excludeEnd("ide");
  75684. messageSends: ["should:return:"]
  75685. }),
  75686. $globals.CodeGeneratorTest);
  75687. $core.addMethod(
  75688. $core.method({
  75689. selector: "testifNil",
  75690. protocol: 'tests',
  75691. fn: function (){
  75692. var self=this;
  75693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75694. return $core.withContext(function($ctx1) {
  75695. //>>excludeEnd("ctx");
  75696. self._should_return_("foo ^ 1 ifNil: [ 2 ]",(1));
  75697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75698. $ctx1.sendIdx["should:return:"]=1;
  75699. //>>excludeEnd("ctx");
  75700. self._should_return_("foo ^ nil ifNil: [ 2 ]",(2));
  75701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75702. $ctx1.sendIdx["should:return:"]=2;
  75703. //>>excludeEnd("ctx");
  75704. self._should_return_("foo 1 ifNil: [ ^ 2 ]",self["@receiver"]);
  75705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75706. $ctx1.sendIdx["should:return:"]=3;
  75707. //>>excludeEnd("ctx");
  75708. self._should_return_("foo nil ifNil: [ ^ 2 ]",(2));
  75709. return self;
  75710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75711. }, function($ctx1) {$ctx1.fill(self,"testifNil",{},$globals.CodeGeneratorTest)});
  75712. //>>excludeEnd("ctx");
  75713. },
  75714. //>>excludeStart("ide", pragmas.excludeIdeData);
  75715. args: [],
  75716. 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.",
  75717. referencedClasses: [],
  75718. //>>excludeEnd("ide");
  75719. messageSends: ["should:return:"]
  75720. }),
  75721. $globals.CodeGeneratorTest);
  75722. $core.addMethod(
  75723. $core.method({
  75724. selector: "testifNilIfNotNil",
  75725. protocol: 'tests',
  75726. fn: function (){
  75727. var self=this;
  75728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75729. return $core.withContext(function($ctx1) {
  75730. //>>excludeEnd("ctx");
  75731. self._should_return_("foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]",(3));
  75732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75733. $ctx1.sendIdx["should:return:"]=1;
  75734. //>>excludeEnd("ctx");
  75735. self._should_return_("foo ^ nil ifNil: [ 2 ] ifNotNil: [ 3 ]",(2));
  75736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75737. $ctx1.sendIdx["should:return:"]=2;
  75738. //>>excludeEnd("ctx");
  75739. self._should_return_("foo 1 ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(3));
  75740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75741. $ctx1.sendIdx["should:return:"]=3;
  75742. //>>excludeEnd("ctx");
  75743. self._should_return_("foo nil ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(2));
  75744. return self;
  75745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75746. }, function($ctx1) {$ctx1.fill(self,"testifNilIfNotNil",{},$globals.CodeGeneratorTest)});
  75747. //>>excludeEnd("ctx");
  75748. },
  75749. //>>excludeStart("ide", pragmas.excludeIdeData);
  75750. args: [],
  75751. 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.",
  75752. referencedClasses: [],
  75753. //>>excludeEnd("ide");
  75754. messageSends: ["should:return:"]
  75755. }),
  75756. $globals.CodeGeneratorTest);
  75757. $core.addMethod(
  75758. $core.method({
  75759. selector: "testifNotNil",
  75760. protocol: 'tests',
  75761. fn: function (){
  75762. var self=this;
  75763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75764. return $core.withContext(function($ctx1) {
  75765. //>>excludeEnd("ctx");
  75766. self._should_return_("foo ^ 1 ifNotNil: [ 2 ]",(2));
  75767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75768. $ctx1.sendIdx["should:return:"]=1;
  75769. //>>excludeEnd("ctx");
  75770. self._should_return_("foo ^ nil ifNotNil: [ 2 ]",nil);
  75771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75772. $ctx1.sendIdx["should:return:"]=2;
  75773. //>>excludeEnd("ctx");
  75774. self._should_return_("foo 1 ifNotNil: [ ^ 2 ]",(2));
  75775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75776. $ctx1.sendIdx["should:return:"]=3;
  75777. //>>excludeEnd("ctx");
  75778. self._should_return_("foo nil ifNotNil: [ ^ 2 ]",self["@receiver"]);
  75779. return self;
  75780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75781. }, function($ctx1) {$ctx1.fill(self,"testifNotNil",{},$globals.CodeGeneratorTest)});
  75782. //>>excludeEnd("ctx");
  75783. },
  75784. //>>excludeStart("ide", pragmas.excludeIdeData);
  75785. args: [],
  75786. 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.",
  75787. referencedClasses: [],
  75788. //>>excludeEnd("ide");
  75789. messageSends: ["should:return:"]
  75790. }),
  75791. $globals.CodeGeneratorTest);
  75792. $core.addMethod(
  75793. $core.method({
  75794. selector: "testifNotNilWithArgument",
  75795. protocol: 'tests',
  75796. fn: function (){
  75797. var self=this;
  75798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75799. return $core.withContext(function($ctx1) {
  75800. //>>excludeEnd("ctx");
  75801. self._should_return_("foo ^ 1 ifNotNil: [ :val | val + 2 ]",(3));
  75802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75803. $ctx1.sendIdx["should:return:"]=1;
  75804. //>>excludeEnd("ctx");
  75805. self._should_return_("foo ^ nil ifNotNil: [ :val | val + 2 ]",nil);
  75806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75807. $ctx1.sendIdx["should:return:"]=2;
  75808. //>>excludeEnd("ctx");
  75809. self._should_return_("foo ^ 1 ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]",(3));
  75810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75811. $ctx1.sendIdx["should:return:"]=3;
  75812. //>>excludeEnd("ctx");
  75813. self._should_return_("foo ^ nil ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]",(5));
  75814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75815. $ctx1.sendIdx["should:return:"]=4;
  75816. //>>excludeEnd("ctx");
  75817. self._should_return_("foo ^ 1 ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]",(3));
  75818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75819. $ctx1.sendIdx["should:return:"]=5;
  75820. //>>excludeEnd("ctx");
  75821. self._should_return_("foo ^ nil ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]",(5));
  75822. return self;
  75823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75824. }, function($ctx1) {$ctx1.fill(self,"testifNotNilWithArgument",{},$globals.CodeGeneratorTest)});
  75825. //>>excludeEnd("ctx");
  75826. },
  75827. //>>excludeStart("ide", pragmas.excludeIdeData);
  75828. args: [],
  75829. 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",
  75830. referencedClasses: [],
  75831. //>>excludeEnd("ide");
  75832. messageSends: ["should:return:"]
  75833. }),
  75834. $globals.CodeGeneratorTest);
  75835. $core.addMethod(
  75836. $core.method({
  75837. selector: "testifTrue",
  75838. protocol: 'tests',
  75839. fn: function (){
  75840. var self=this;
  75841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75842. return $core.withContext(function($ctx1) {
  75843. //>>excludeEnd("ctx");
  75844. self._should_return_("foo false ifTrue: [ ^ 1 ]",self["@receiver"]);
  75845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75846. $ctx1.sendIdx["should:return:"]=1;
  75847. //>>excludeEnd("ctx");
  75848. self._should_return_("foo true ifTrue: [ ^ 2 ]",(2));
  75849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75850. $ctx1.sendIdx["should:return:"]=2;
  75851. //>>excludeEnd("ctx");
  75852. self._should_return_("foo ^ false ifTrue: [ 1 ]",nil);
  75853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75854. $ctx1.sendIdx["should:return:"]=3;
  75855. //>>excludeEnd("ctx");
  75856. self._should_return_("foo ^ true ifTrue: [ 2 ]",(2));
  75857. return self;
  75858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75859. }, function($ctx1) {$ctx1.fill(self,"testifTrue",{},$globals.CodeGeneratorTest)});
  75860. //>>excludeEnd("ctx");
  75861. },
  75862. //>>excludeStart("ide", pragmas.excludeIdeData);
  75863. args: [],
  75864. 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.",
  75865. referencedClasses: [],
  75866. //>>excludeEnd("ide");
  75867. messageSends: ["should:return:"]
  75868. }),
  75869. $globals.CodeGeneratorTest);
  75870. $core.addMethod(
  75871. $core.method({
  75872. selector: "testifTrueIfFalse",
  75873. protocol: 'tests',
  75874. fn: function (){
  75875. var self=this;
  75876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75877. return $core.withContext(function($ctx1) {
  75878. //>>excludeEnd("ctx");
  75879. self._should_return_("foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]",(2));
  75880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75881. $ctx1.sendIdx["should:return:"]=1;
  75882. //>>excludeEnd("ctx");
  75883. self._should_return_("foo true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]",(1));
  75884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75885. $ctx1.sendIdx["should:return:"]=2;
  75886. //>>excludeEnd("ctx");
  75887. self._should_return_("foo ^ false ifTrue: [ 2 ] ifFalse: [ 1 ]",(1));
  75888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75889. $ctx1.sendIdx["should:return:"]=3;
  75890. //>>excludeEnd("ctx");
  75891. self._should_return_("foo ^ true ifTrue: [ 2 ] ifFalse: [ 1 ]",(2));
  75892. return self;
  75893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75894. }, function($ctx1) {$ctx1.fill(self,"testifTrueIfFalse",{},$globals.CodeGeneratorTest)});
  75895. //>>excludeEnd("ctx");
  75896. },
  75897. //>>excludeStart("ide", pragmas.excludeIdeData);
  75898. args: [],
  75899. 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.",
  75900. referencedClasses: [],
  75901. //>>excludeEnd("ide");
  75902. messageSends: ["should:return:"]
  75903. }),
  75904. $globals.CodeGeneratorTest);
  75905. $core.addClass('ASTInterpreterTest', $globals.CodeGeneratorTest, [], 'Compiler-Tests');
  75906. $core.addMethod(
  75907. $core.method({
  75908. selector: "analyze:forClass:",
  75909. protocol: 'parsing',
  75910. fn: function (aNode,aClass){
  75911. var self=this;
  75912. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  75913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75914. return $core.withContext(function($ctx1) {
  75915. //>>excludeEnd("ctx");
  75916. $recv($recv($SemanticAnalyzer())._on_(aClass))._visit_(aNode);
  75917. return aNode;
  75918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75919. }, function($ctx1) {$ctx1.fill(self,"analyze:forClass:",{aNode:aNode,aClass:aClass},$globals.ASTInterpreterTest)});
  75920. //>>excludeEnd("ctx");
  75921. },
  75922. //>>excludeStart("ide", pragmas.excludeIdeData);
  75923. args: ["aNode", "aClass"],
  75924. source: "analyze: aNode forClass: aClass\x0a\x09(SemanticAnalyzer on: aClass) visit: aNode.\x0a\x09^ aNode",
  75925. referencedClasses: ["SemanticAnalyzer"],
  75926. //>>excludeEnd("ide");
  75927. messageSends: ["visit:", "on:"]
  75928. }),
  75929. $globals.ASTInterpreterTest);
  75930. $core.addMethod(
  75931. $core.method({
  75932. selector: "interpret:receiver:withArguments:",
  75933. protocol: 'private',
  75934. fn: function (aString,anObject,aDictionary){
  75935. var self=this;
  75936. var ctx,ast,interpreter;
  75937. function $ASTInterpreter(){return $globals.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
  75938. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  75939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75940. return $core.withContext(function($ctx1) {
  75941. //>>excludeEnd("ctx");
  75942. var $1,$2,$3,$5,$6,$4,$receiver;
  75943. interpreter=$recv($ASTInterpreter())._new();
  75944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75945. $ctx1.sendIdx["new"]=1;
  75946. //>>excludeEnd("ctx");
  75947. ast=self._parse_forClass_(aString,$recv(anObject)._class());
  75948. $1=$recv($AIContext())._new();
  75949. $recv($1)._receiver_(anObject);
  75950. $recv($1)._interpreter_(interpreter);
  75951. $2=$recv($1)._yourself();
  75952. ctx=$2;
  75953. $3=$recv(ast)._sequenceNode();
  75954. if(($receiver = $3) == null || $receiver.isNil){
  75955. $3;
  75956. } else {
  75957. var sequence;
  75958. sequence=$receiver;
  75959. $recv($recv(sequence)._temps())._do_((function(each){
  75960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75961. return $core.withContext(function($ctx2) {
  75962. //>>excludeEnd("ctx");
  75963. return $recv(ctx)._defineLocal_(each);
  75964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75965. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  75966. //>>excludeEnd("ctx");
  75967. }));
  75968. };
  75969. $recv(aDictionary)._keysAndValuesDo_((function(key,value){
  75970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75971. return $core.withContext(function($ctx2) {
  75972. //>>excludeEnd("ctx");
  75973. return $recv(ctx)._localAt_put_(key,value);
  75974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75975. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,3)});
  75976. //>>excludeEnd("ctx");
  75977. }));
  75978. $5=interpreter;
  75979. $recv($5)._context_(ctx);
  75980. $recv($5)._interpret_($recv(ast)._nextChild());
  75981. $recv($5)._proceed();
  75982. $6=$recv($5)._result();
  75983. $4=$6;
  75984. return $4;
  75985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75986. }, function($ctx1) {$ctx1.fill(self,"interpret:receiver:withArguments:",{aString:aString,anObject:anObject,aDictionary:aDictionary,ctx:ctx,ast:ast,interpreter:interpreter},$globals.ASTInterpreterTest)});
  75987. //>>excludeEnd("ctx");
  75988. },
  75989. //>>excludeStart("ide", pragmas.excludeIdeData);
  75990. args: ["aString", "anObject", "aDictionary"],
  75991. 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",
  75992. referencedClasses: ["ASTInterpreter", "AIContext"],
  75993. //>>excludeEnd("ide");
  75994. messageSends: ["new", "parse:forClass:", "class", "receiver:", "interpreter:", "yourself", "ifNotNil:", "sequenceNode", "do:", "temps", "defineLocal:", "keysAndValuesDo:", "localAt:put:", "context:", "interpret:", "nextChild", "proceed", "result"]
  75995. }),
  75996. $globals.ASTInterpreterTest);
  75997. $core.addMethod(
  75998. $core.method({
  75999. selector: "parse:",
  76000. protocol: 'parsing',
  76001. fn: function (aString){
  76002. var self=this;
  76003. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76005. return $core.withContext(function($ctx1) {
  76006. //>>excludeEnd("ctx");
  76007. var $1;
  76008. $1=$recv($Smalltalk())._parse_(aString);
  76009. return $1;
  76010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76011. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString},$globals.ASTInterpreterTest)});
  76012. //>>excludeEnd("ctx");
  76013. },
  76014. //>>excludeStart("ide", pragmas.excludeIdeData);
  76015. args: ["aString"],
  76016. source: "parse: aString\x0a\x09^ Smalltalk parse: aString",
  76017. referencedClasses: ["Smalltalk"],
  76018. //>>excludeEnd("ide");
  76019. messageSends: ["parse:"]
  76020. }),
  76021. $globals.ASTInterpreterTest);
  76022. $core.addMethod(
  76023. $core.method({
  76024. selector: "parse:forClass:",
  76025. protocol: 'parsing',
  76026. fn: function (aString,aClass){
  76027. var self=this;
  76028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76029. return $core.withContext(function($ctx1) {
  76030. //>>excludeEnd("ctx");
  76031. var $1;
  76032. $1=self._analyze_forClass_(self._parse_(aString),aClass);
  76033. return $1;
  76034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76035. }, function($ctx1) {$ctx1.fill(self,"parse:forClass:",{aString:aString,aClass:aClass},$globals.ASTInterpreterTest)});
  76036. //>>excludeEnd("ctx");
  76037. },
  76038. //>>excludeStart("ide", pragmas.excludeIdeData);
  76039. args: ["aString", "aClass"],
  76040. source: "parse: aString forClass: aClass\x0a\x09^ self analyze: (self parse: aString) forClass: aClass",
  76041. referencedClasses: [],
  76042. //>>excludeEnd("ide");
  76043. messageSends: ["analyze:forClass:", "parse:"]
  76044. }),
  76045. $globals.ASTInterpreterTest);
  76046. $core.addMethod(
  76047. $core.method({
  76048. selector: "should:receiver:return:",
  76049. protocol: 'testing',
  76050. fn: function (aString,anObject,aResult){
  76051. var self=this;
  76052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76053. return $core.withContext(function($ctx1) {
  76054. //>>excludeEnd("ctx");
  76055. var $1;
  76056. self["@receiver"]=anObject;
  76057. $1=self._assert_equals_(self._interpret_receiver_withArguments_(aString,self["@receiver"],$globals.HashedCollection._newFromPairs_([])),aResult);
  76058. return $1;
  76059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76060. }, function($ctx1) {$ctx1.fill(self,"should:receiver:return:",{aString:aString,anObject:anObject,aResult:aResult},$globals.ASTInterpreterTest)});
  76061. //>>excludeEnd("ctx");
  76062. },
  76063. //>>excludeStart("ide", pragmas.excludeIdeData);
  76064. args: ["aString", "anObject", "aResult"],
  76065. 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",
  76066. referencedClasses: [],
  76067. //>>excludeEnd("ide");
  76068. messageSends: ["assert:equals:", "interpret:receiver:withArguments:"]
  76069. }),
  76070. $globals.ASTInterpreterTest);
  76071. $core.addMethod(
  76072. $core.method({
  76073. selector: "should:return:",
  76074. protocol: 'testing',
  76075. fn: function (aString,anObject){
  76076. var self=this;
  76077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76078. return $core.withContext(function($ctx1) {
  76079. //>>excludeEnd("ctx");
  76080. var $1;
  76081. $1=self._should_receiver_return_(aString,self["@receiver"],anObject);
  76082. return $1;
  76083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76084. }, function($ctx1) {$ctx1.fill(self,"should:return:",{aString:aString,anObject:anObject},$globals.ASTInterpreterTest)});
  76085. //>>excludeEnd("ctx");
  76086. },
  76087. //>>excludeStart("ide", pragmas.excludeIdeData);
  76088. args: ["aString", "anObject"],
  76089. source: "should: aString return: anObject\x0a\x09^ self \x0a\x09\x09should: aString\x0a\x09\x09receiver: receiver\x0a\x09\x09return: anObject",
  76090. referencedClasses: [],
  76091. //>>excludeEnd("ide");
  76092. messageSends: ["should:receiver:return:"]
  76093. }),
  76094. $globals.ASTInterpreterTest);
  76095. $core.addClass('ASTDebuggerTest', $globals.ASTInterpreterTest, [], 'Compiler-Tests');
  76096. $core.addMethod(
  76097. $core.method({
  76098. selector: "interpret:receiver:withArguments:",
  76099. protocol: 'private',
  76100. fn: function (aString,anObject,aDictionary){
  76101. var self=this;
  76102. var ctx,ast,debugger_;
  76103. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  76104. function $ASTInterpreter(){return $globals.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
  76105. function $ASTDebugger(){return $globals.ASTDebugger||(typeof ASTDebugger=="undefined"?nil:ASTDebugger)}
  76106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76107. return $core.withContext(function($ctx1) {
  76108. //>>excludeEnd("ctx");
  76109. var $1,$2,$3,$4,$6,$7,$5,$receiver;
  76110. $1=$recv($AIContext())._new();
  76111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76112. $ctx1.sendIdx["new"]=1;
  76113. //>>excludeEnd("ctx");
  76114. $recv($1)._receiver_(anObject);
  76115. $recv($1)._interpreter_($recv($ASTInterpreter())._new());
  76116. $2=$recv($1)._yourself();
  76117. ctx=$2;
  76118. ast=self._parse_forClass_(aString,$recv(anObject)._class());
  76119. $3=$recv(ast)._sequenceNode();
  76120. if(($receiver = $3) == null || $receiver.isNil){
  76121. $3;
  76122. } else {
  76123. var sequence;
  76124. sequence=$receiver;
  76125. $recv($recv(sequence)._temps())._do_((function(each){
  76126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76127. return $core.withContext(function($ctx2) {
  76128. //>>excludeEnd("ctx");
  76129. return $recv(ctx)._defineLocal_(each);
  76130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76131. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  76132. //>>excludeEnd("ctx");
  76133. }));
  76134. };
  76135. $recv(aDictionary)._keysAndValuesDo_((function(key,value){
  76136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76137. return $core.withContext(function($ctx2) {
  76138. //>>excludeEnd("ctx");
  76139. return $recv(ctx)._localAt_put_(key,value);
  76140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76141. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,3)});
  76142. //>>excludeEnd("ctx");
  76143. }));
  76144. $4=$recv(ctx)._interpreter();
  76145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76146. $ctx1.sendIdx["interpreter"]=1;
  76147. //>>excludeEnd("ctx");
  76148. $recv($4)._context_(ctx);
  76149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76150. $ctx1.sendIdx["context:"]=1;
  76151. //>>excludeEnd("ctx");
  76152. $recv($recv(ctx)._interpreter())._node_($recv(ast)._nextChild());
  76153. debugger_=$recv($ASTDebugger())._context_(ctx);
  76154. $6=debugger_;
  76155. $recv($6)._proceed();
  76156. $7=$recv($6)._result();
  76157. $5=$7;
  76158. return $5;
  76159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76160. }, function($ctx1) {$ctx1.fill(self,"interpret:receiver:withArguments:",{aString:aString,anObject:anObject,aDictionary:aDictionary,ctx:ctx,ast:ast,debugger_:debugger_},$globals.ASTDebuggerTest)});
  76161. //>>excludeEnd("ctx");
  76162. },
  76163. //>>excludeStart("ide", pragmas.excludeIdeData);
  76164. args: ["aString", "anObject", "aDictionary"],
  76165. 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",
  76166. referencedClasses: ["AIContext", "ASTInterpreter", "ASTDebugger"],
  76167. //>>excludeEnd("ide");
  76168. messageSends: ["receiver:", "new", "interpreter:", "yourself", "parse:forClass:", "class", "ifNotNil:", "sequenceNode", "do:", "temps", "defineLocal:", "keysAndValuesDo:", "localAt:put:", "context:", "interpreter", "node:", "nextChild", "proceed", "result"]
  76169. }),
  76170. $globals.ASTDebuggerTest);
  76171. $core.addClass('InliningCodeGeneratorTest', $globals.CodeGeneratorTest, [], 'Compiler-Tests');
  76172. $core.addMethod(
  76173. $core.method({
  76174. selector: "codeGeneratorClass",
  76175. protocol: 'accessing',
  76176. fn: function (){
  76177. var self=this;
  76178. function $InliningCodeGenerator(){return $globals.InliningCodeGenerator||(typeof InliningCodeGenerator=="undefined"?nil:InliningCodeGenerator)}
  76179. return $InliningCodeGenerator();
  76180. },
  76181. //>>excludeStart("ide", pragmas.excludeIdeData);
  76182. args: [],
  76183. source: "codeGeneratorClass\x0a\x09^ InliningCodeGenerator",
  76184. referencedClasses: ["InliningCodeGenerator"],
  76185. //>>excludeEnd("ide");
  76186. messageSends: []
  76187. }),
  76188. $globals.InliningCodeGeneratorTest);
  76189. $core.addClass('ScopeVarTest', $globals.TestCase, [], 'Compiler-Tests');
  76190. $core.addMethod(
  76191. $core.method({
  76192. selector: "testClassRefVar",
  76193. protocol: 'tests',
  76194. fn: function (){
  76195. var self=this;
  76196. var node;
  76197. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  76198. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  76199. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  76200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76201. return $core.withContext(function($ctx1) {
  76202. //>>excludeEnd("ctx");
  76203. var $1,$2,$3,$4;
  76204. $1=$recv($VariableNode())._new();
  76205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76206. $ctx1.sendIdx["new"]=1;
  76207. //>>excludeEnd("ctx");
  76208. $recv($1)._value_("Object");
  76209. $2=$recv($1)._yourself();
  76210. node=$2;
  76211. $3=$recv($SemanticAnalyzer())._new();
  76212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76213. $ctx1.sendIdx["new"]=2;
  76214. //>>excludeEnd("ctx");
  76215. $recv($3)._pushScope_($recv($MethodLexicalScope())._new());
  76216. $4=$recv($3)._visit_(node);
  76217. self._assert_($recv($recv(node)._binding())._isClassRefVar());
  76218. return self;
  76219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76220. }, function($ctx1) {$ctx1.fill(self,"testClassRefVar",{node:node},$globals.ScopeVarTest)});
  76221. //>>excludeEnd("ctx");
  76222. },
  76223. //>>excludeStart("ide", pragmas.excludeIdeData);
  76224. args: [],
  76225. 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",
  76226. referencedClasses: ["VariableNode", "SemanticAnalyzer", "MethodLexicalScope"],
  76227. //>>excludeEnd("ide");
  76228. messageSends: ["value:", "new", "yourself", "pushScope:", "visit:", "assert:", "isClassRefVar", "binding"]
  76229. }),
  76230. $globals.ScopeVarTest);
  76231. $core.addMethod(
  76232. $core.method({
  76233. selector: "testInstanceVar",
  76234. protocol: 'tests',
  76235. fn: function (){
  76236. var self=this;
  76237. var node,scope;
  76238. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  76239. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  76240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76241. return $core.withContext(function($ctx1) {
  76242. //>>excludeEnd("ctx");
  76243. var $1,$2;
  76244. $1=$recv($VariableNode())._new();
  76245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76246. $ctx1.sendIdx["new"]=1;
  76247. //>>excludeEnd("ctx");
  76248. $recv($1)._value_("bzzz");
  76249. $2=$recv($1)._yourself();
  76250. node=$2;
  76251. scope=$recv($MethodLexicalScope())._new();
  76252. $recv(scope)._addIVar_("bzzz");
  76253. self._assert_($recv($recv(scope)._bindingFor_(node))._isInstanceVar());
  76254. return self;
  76255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76256. }, function($ctx1) {$ctx1.fill(self,"testInstanceVar",{node:node,scope:scope},$globals.ScopeVarTest)});
  76257. //>>excludeEnd("ctx");
  76258. },
  76259. //>>excludeStart("ide", pragmas.excludeIdeData);
  76260. args: [],
  76261. 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",
  76262. referencedClasses: ["VariableNode", "MethodLexicalScope"],
  76263. //>>excludeEnd("ide");
  76264. messageSends: ["value:", "new", "yourself", "addIVar:", "assert:", "isInstanceVar", "bindingFor:"]
  76265. }),
  76266. $globals.ScopeVarTest);
  76267. $core.addMethod(
  76268. $core.method({
  76269. selector: "testPseudoVar",
  76270. protocol: 'tests',
  76271. fn: function (){
  76272. var self=this;
  76273. var node,pseudoVars;
  76274. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  76275. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  76276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76277. return $core.withContext(function($ctx1) {
  76278. //>>excludeEnd("ctx");
  76279. var $1,$2;
  76280. pseudoVars=["self", "super", "true", "false", "nil"];
  76281. $recv(pseudoVars)._do_((function(each){
  76282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76283. return $core.withContext(function($ctx2) {
  76284. //>>excludeEnd("ctx");
  76285. $1=$recv($VariableNode())._new();
  76286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76287. $ctx2.sendIdx["new"]=1;
  76288. //>>excludeEnd("ctx");
  76289. $recv($1)._value_(each);
  76290. $2=$recv($1)._yourself();
  76291. node=$2;
  76292. node;
  76293. return self._assert_($recv($recv($recv($MethodLexicalScope())._new())._bindingFor_(node))._isPseudoVar());
  76294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76295. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  76296. //>>excludeEnd("ctx");
  76297. }));
  76298. return self;
  76299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76300. }, function($ctx1) {$ctx1.fill(self,"testPseudoVar",{node:node,pseudoVars:pseudoVars},$globals.ScopeVarTest)});
  76301. //>>excludeEnd("ctx");
  76302. },
  76303. //>>excludeStart("ide", pragmas.excludeIdeData);
  76304. args: [],
  76305. 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]",
  76306. referencedClasses: ["VariableNode", "MethodLexicalScope"],
  76307. //>>excludeEnd("ide");
  76308. messageSends: ["do:", "value:", "new", "yourself", "assert:", "isPseudoVar", "bindingFor:"]
  76309. }),
  76310. $globals.ScopeVarTest);
  76311. $core.addMethod(
  76312. $core.method({
  76313. selector: "testTempVar",
  76314. protocol: 'tests',
  76315. fn: function (){
  76316. var self=this;
  76317. var node,scope;
  76318. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  76319. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  76320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76321. return $core.withContext(function($ctx1) {
  76322. //>>excludeEnd("ctx");
  76323. var $1,$2;
  76324. $1=$recv($VariableNode())._new();
  76325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76326. $ctx1.sendIdx["new"]=1;
  76327. //>>excludeEnd("ctx");
  76328. $recv($1)._value_("bzzz");
  76329. $2=$recv($1)._yourself();
  76330. node=$2;
  76331. scope=$recv($MethodLexicalScope())._new();
  76332. $recv(scope)._addTemp_("bzzz");
  76333. self._assert_($recv($recv(scope)._bindingFor_(node))._isTempVar());
  76334. return self;
  76335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76336. }, function($ctx1) {$ctx1.fill(self,"testTempVar",{node:node,scope:scope},$globals.ScopeVarTest)});
  76337. //>>excludeEnd("ctx");
  76338. },
  76339. //>>excludeStart("ide", pragmas.excludeIdeData);
  76340. args: [],
  76341. 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",
  76342. referencedClasses: ["VariableNode", "MethodLexicalScope"],
  76343. //>>excludeEnd("ide");
  76344. messageSends: ["value:", "new", "yourself", "addTemp:", "assert:", "isTempVar", "bindingFor:"]
  76345. }),
  76346. $globals.ScopeVarTest);
  76347. $core.addMethod(
  76348. $core.method({
  76349. selector: "testUnknownVar",
  76350. protocol: 'tests',
  76351. fn: function (){
  76352. var self=this;
  76353. var node;
  76354. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  76355. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  76356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76357. return $core.withContext(function($ctx1) {
  76358. //>>excludeEnd("ctx");
  76359. var $1,$2;
  76360. $1=$recv($VariableNode())._new();
  76361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76362. $ctx1.sendIdx["new"]=1;
  76363. //>>excludeEnd("ctx");
  76364. $recv($1)._value_("bzzz");
  76365. $2=$recv($1)._yourself();
  76366. node=$2;
  76367. self._assert_($recv($recv($recv($MethodLexicalScope())._new())._bindingFor_(node))._isNil());
  76368. return self;
  76369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76370. }, function($ctx1) {$ctx1.fill(self,"testUnknownVar",{node:node},$globals.ScopeVarTest)});
  76371. //>>excludeEnd("ctx");
  76372. },
  76373. //>>excludeStart("ide", pragmas.excludeIdeData);
  76374. args: [],
  76375. source: "testUnknownVar\x0a\x09| node |\x0a\x09node := VariableNode new\x0a\x09\x09value: 'bzzz';\x0a\x09\x09yourself.\x0a\x09self assert: (MethodLexicalScope new bindingFor: node) isNil",
  76376. referencedClasses: ["VariableNode", "MethodLexicalScope"],
  76377. //>>excludeEnd("ide");
  76378. messageSends: ["value:", "new", "yourself", "assert:", "isNil", "bindingFor:"]
  76379. }),
  76380. $globals.ScopeVarTest);
  76381. $core.addClass('SemanticAnalyzerTest', $globals.TestCase, ['analyzer'], 'Compiler-Tests');
  76382. $core.addMethod(
  76383. $core.method({
  76384. selector: "setUp",
  76385. protocol: 'running',
  76386. fn: function (){
  76387. var self=this;
  76388. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  76389. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  76390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76391. return $core.withContext(function($ctx1) {
  76392. //>>excludeEnd("ctx");
  76393. self["@analyzer"]=$recv($SemanticAnalyzer())._on_($Object());
  76394. return self;
  76395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76396. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.SemanticAnalyzerTest)});
  76397. //>>excludeEnd("ctx");
  76398. },
  76399. //>>excludeStart("ide", pragmas.excludeIdeData);
  76400. args: [],
  76401. source: "setUp\x0a\x09analyzer := SemanticAnalyzer on: Object",
  76402. referencedClasses: ["SemanticAnalyzer", "Object"],
  76403. //>>excludeEnd("ide");
  76404. messageSends: ["on:"]
  76405. }),
  76406. $globals.SemanticAnalyzerTest);
  76407. $core.addMethod(
  76408. $core.method({
  76409. selector: "testAssignment",
  76410. protocol: 'tests',
  76411. fn: function (){
  76412. var self=this;
  76413. var src,ast;
  76414. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76415. function $InvalidAssignmentError(){return $globals.InvalidAssignmentError||(typeof InvalidAssignmentError=="undefined"?nil:InvalidAssignmentError)}
  76416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76417. return $core.withContext(function($ctx1) {
  76418. //>>excludeEnd("ctx");
  76419. src="foo self := 1";
  76420. ast=$recv($Smalltalk())._parse_(src);
  76421. self._should_raise_((function(){
  76422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76423. return $core.withContext(function($ctx2) {
  76424. //>>excludeEnd("ctx");
  76425. return $recv(self["@analyzer"])._visit_(ast);
  76426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76427. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76428. //>>excludeEnd("ctx");
  76429. }),$InvalidAssignmentError());
  76430. return self;
  76431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76432. }, function($ctx1) {$ctx1.fill(self,"testAssignment",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76433. //>>excludeEnd("ctx");
  76434. },
  76435. //>>excludeStart("ide", pragmas.excludeIdeData);
  76436. args: [],
  76437. 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",
  76438. referencedClasses: ["Smalltalk", "InvalidAssignmentError"],
  76439. //>>excludeEnd("ide");
  76440. messageSends: ["parse:", "should:raise:", "visit:"]
  76441. }),
  76442. $globals.SemanticAnalyzerTest);
  76443. $core.addMethod(
  76444. $core.method({
  76445. selector: "testNonLocalReturn",
  76446. protocol: 'tests',
  76447. fn: function (){
  76448. var self=this;
  76449. var src,ast;
  76450. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76452. return $core.withContext(function($ctx1) {
  76453. //>>excludeEnd("ctx");
  76454. src="foo | a | a + 1. ^ a";
  76455. ast=$recv($Smalltalk())._parse_(src);
  76456. $recv(self["@analyzer"])._visit_(ast);
  76457. self._deny_($recv($recv(ast)._scope())._hasNonLocalReturn());
  76458. return self;
  76459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76460. }, function($ctx1) {$ctx1.fill(self,"testNonLocalReturn",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76461. //>>excludeEnd("ctx");
  76462. },
  76463. //>>excludeStart("ide", pragmas.excludeIdeData);
  76464. args: [],
  76465. 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",
  76466. referencedClasses: ["Smalltalk"],
  76467. //>>excludeEnd("ide");
  76468. messageSends: ["parse:", "visit:", "deny:", "hasNonLocalReturn", "scope"]
  76469. }),
  76470. $globals.SemanticAnalyzerTest);
  76471. $core.addMethod(
  76472. $core.method({
  76473. selector: "testNonLocalReturn2",
  76474. protocol: 'tests',
  76475. fn: function (){
  76476. var self=this;
  76477. var src,ast;
  76478. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76480. return $core.withContext(function($ctx1) {
  76481. //>>excludeEnd("ctx");
  76482. src="foo | a | a + 1. [ [ ^ a] ]";
  76483. ast=$recv($Smalltalk())._parse_(src);
  76484. $recv(self["@analyzer"])._visit_(ast);
  76485. self._assert_($recv($recv(ast)._scope())._hasNonLocalReturn());
  76486. return self;
  76487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76488. }, function($ctx1) {$ctx1.fill(self,"testNonLocalReturn2",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76489. //>>excludeEnd("ctx");
  76490. },
  76491. //>>excludeStart("ide", pragmas.excludeIdeData);
  76492. args: [],
  76493. 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",
  76494. referencedClasses: ["Smalltalk"],
  76495. //>>excludeEnd("ide");
  76496. messageSends: ["parse:", "visit:", "assert:", "hasNonLocalReturn", "scope"]
  76497. }),
  76498. $globals.SemanticAnalyzerTest);
  76499. $core.addMethod(
  76500. $core.method({
  76501. selector: "testScope",
  76502. protocol: 'tests',
  76503. fn: function (){
  76504. var self=this;
  76505. var src,ast;
  76506. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76508. return $core.withContext(function($ctx1) {
  76509. //>>excludeEnd("ctx");
  76510. var $4,$3,$2,$1;
  76511. src="foo | a | a + 1. [ | b | b := a ]";
  76512. ast=$recv($Smalltalk())._parse_(src);
  76513. $recv(self["@analyzer"])._visit_(ast);
  76514. $4=$recv($recv($recv(ast)._nodes())._first())._nodes();
  76515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76516. $ctx1.sendIdx["nodes"]=1;
  76517. //>>excludeEnd("ctx");
  76518. $3=$recv($4)._last();
  76519. $2=$recv($3)._scope();
  76520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76521. $ctx1.sendIdx["scope"]=1;
  76522. //>>excludeEnd("ctx");
  76523. $1=$recv($2).__eq_eq($recv(ast)._scope());
  76524. self._deny_($1);
  76525. return self;
  76526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76527. }, function($ctx1) {$ctx1.fill(self,"testScope",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76528. //>>excludeEnd("ctx");
  76529. },
  76530. //>>excludeStart("ide", pragmas.excludeIdeData);
  76531. args: [],
  76532. 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.",
  76533. referencedClasses: ["Smalltalk"],
  76534. //>>excludeEnd("ide");
  76535. messageSends: ["parse:", "visit:", "deny:", "==", "scope", "last", "nodes", "first"]
  76536. }),
  76537. $globals.SemanticAnalyzerTest);
  76538. $core.addMethod(
  76539. $core.method({
  76540. selector: "testScope2",
  76541. protocol: 'tests',
  76542. fn: function (){
  76543. var self=this;
  76544. var src,ast;
  76545. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76547. return $core.withContext(function($ctx1) {
  76548. //>>excludeEnd("ctx");
  76549. var $8,$7,$6,$5,$4,$3,$2,$1;
  76550. src="foo | a | a + 1. [ [ | b | b := a ] ]";
  76551. ast=$recv($Smalltalk())._parse_(src);
  76552. $recv(self["@analyzer"])._visit_(ast);
  76553. $8=$recv($recv($recv(ast)._nodes())._first())._nodes();
  76554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76555. $ctx1.sendIdx["nodes"]=3;
  76556. //>>excludeEnd("ctx");
  76557. $7=$recv($8)._last();
  76558. $6=$recv($7)._nodes();
  76559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76560. $ctx1.sendIdx["nodes"]=2;
  76561. //>>excludeEnd("ctx");
  76562. $5=$recv($6)._first();
  76563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76564. $ctx1.sendIdx["first"]=2;
  76565. //>>excludeEnd("ctx");
  76566. $4=$recv($5)._nodes();
  76567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76568. $ctx1.sendIdx["nodes"]=1;
  76569. //>>excludeEnd("ctx");
  76570. $3=$recv($4)._first();
  76571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76572. $ctx1.sendIdx["first"]=1;
  76573. //>>excludeEnd("ctx");
  76574. $2=$recv($3)._scope();
  76575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76576. $ctx1.sendIdx["scope"]=1;
  76577. //>>excludeEnd("ctx");
  76578. $1=$recv($2).__eq_eq($recv(ast)._scope());
  76579. self._deny_($1);
  76580. return self;
  76581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76582. }, function($ctx1) {$ctx1.fill(self,"testScope2",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76583. //>>excludeEnd("ctx");
  76584. },
  76585. //>>excludeStart("ide", pragmas.excludeIdeData);
  76586. args: [],
  76587. 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.",
  76588. referencedClasses: ["Smalltalk"],
  76589. //>>excludeEnd("ide");
  76590. messageSends: ["parse:", "visit:", "deny:", "==", "scope", "first", "nodes", "last"]
  76591. }),
  76592. $globals.SemanticAnalyzerTest);
  76593. $core.addMethod(
  76594. $core.method({
  76595. selector: "testScopeLevel",
  76596. protocol: 'tests',
  76597. fn: function (){
  76598. var self=this;
  76599. var src,ast;
  76600. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76602. return $core.withContext(function($ctx1) {
  76603. //>>excludeEnd("ctx");
  76604. var $2,$1,$10,$9,$8,$7,$6,$5,$4,$3;
  76605. src="foo | a | a + 1. [ [ | b | b := a ] ]";
  76606. ast=$recv($Smalltalk())._parse_(src);
  76607. $recv(self["@analyzer"])._visit_(ast);
  76608. $2=$recv(ast)._scope();
  76609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76610. $ctx1.sendIdx["scope"]=1;
  76611. //>>excludeEnd("ctx");
  76612. $1=$recv($2)._scopeLevel();
  76613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76614. $ctx1.sendIdx["scopeLevel"]=1;
  76615. //>>excludeEnd("ctx");
  76616. self._assert_equals_($1,(1));
  76617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76618. $ctx1.sendIdx["assert:equals:"]=1;
  76619. //>>excludeEnd("ctx");
  76620. $10=$recv($recv($recv(ast)._nodes())._first())._nodes();
  76621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76622. $ctx1.sendIdx["nodes"]=3;
  76623. //>>excludeEnd("ctx");
  76624. $9=$recv($10)._last();
  76625. $8=$recv($9)._nodes();
  76626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76627. $ctx1.sendIdx["nodes"]=2;
  76628. //>>excludeEnd("ctx");
  76629. $7=$recv($8)._first();
  76630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76631. $ctx1.sendIdx["first"]=2;
  76632. //>>excludeEnd("ctx");
  76633. $6=$recv($7)._nodes();
  76634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76635. $ctx1.sendIdx["nodes"]=1;
  76636. //>>excludeEnd("ctx");
  76637. $5=$recv($6)._first();
  76638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76639. $ctx1.sendIdx["first"]=1;
  76640. //>>excludeEnd("ctx");
  76641. $4=$recv($5)._scope();
  76642. $3=$recv($4)._scopeLevel();
  76643. self._assert_equals_($3,(3));
  76644. return self;
  76645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76646. }, function($ctx1) {$ctx1.fill(self,"testScopeLevel",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76647. //>>excludeEnd("ctx");
  76648. },
  76649. //>>excludeStart("ide", pragmas.excludeIdeData);
  76650. args: [],
  76651. 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",
  76652. referencedClasses: ["Smalltalk"],
  76653. //>>excludeEnd("ide");
  76654. messageSends: ["parse:", "visit:", "assert:equals:", "scopeLevel", "scope", "first", "nodes", "last"]
  76655. }),
  76656. $globals.SemanticAnalyzerTest);
  76657. $core.addMethod(
  76658. $core.method({
  76659. selector: "testUnknownVariables",
  76660. protocol: 'tests',
  76661. fn: function (){
  76662. var self=this;
  76663. var src,ast;
  76664. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76665. function $UnknownVariableError(){return $globals.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
  76666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76667. return $core.withContext(function($ctx1) {
  76668. //>>excludeEnd("ctx");
  76669. src="foo | a | b + a";
  76670. ast=$recv($Smalltalk())._parse_(src);
  76671. self._should_raise_((function(){
  76672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76673. return $core.withContext(function($ctx2) {
  76674. //>>excludeEnd("ctx");
  76675. return $recv(self["@analyzer"])._visit_(ast);
  76676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76677. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76678. //>>excludeEnd("ctx");
  76679. }),$UnknownVariableError());
  76680. return self;
  76681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76682. }, function($ctx1) {$ctx1.fill(self,"testUnknownVariables",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76683. //>>excludeEnd("ctx");
  76684. },
  76685. //>>excludeStart("ide", pragmas.excludeIdeData);
  76686. args: [],
  76687. 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",
  76688. referencedClasses: ["Smalltalk", "UnknownVariableError"],
  76689. //>>excludeEnd("ide");
  76690. messageSends: ["parse:", "should:raise:", "visit:"]
  76691. }),
  76692. $globals.SemanticAnalyzerTest);
  76693. $core.addMethod(
  76694. $core.method({
  76695. selector: "testUnknownVariablesWithScope",
  76696. protocol: 'tests',
  76697. fn: function (){
  76698. var self=this;
  76699. var src,ast;
  76700. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76701. function $UnknownVariableError(){return $globals.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
  76702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76703. return $core.withContext(function($ctx1) {
  76704. //>>excludeEnd("ctx");
  76705. src="foo | a b | [ c + 1. [ a + 1. d + 1 ]]";
  76706. ast=$recv($Smalltalk())._parse_(src);
  76707. self._should_raise_((function(){
  76708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76709. return $core.withContext(function($ctx2) {
  76710. //>>excludeEnd("ctx");
  76711. return $recv(self["@analyzer"])._visit_(ast);
  76712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76713. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76714. //>>excludeEnd("ctx");
  76715. }),$UnknownVariableError());
  76716. return self;
  76717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76718. }, function($ctx1) {$ctx1.fill(self,"testUnknownVariablesWithScope",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76719. //>>excludeEnd("ctx");
  76720. },
  76721. //>>excludeStart("ide", pragmas.excludeIdeData);
  76722. args: [],
  76723. 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",
  76724. referencedClasses: ["Smalltalk", "UnknownVariableError"],
  76725. //>>excludeEnd("ide");
  76726. messageSends: ["parse:", "should:raise:", "visit:"]
  76727. }),
  76728. $globals.SemanticAnalyzerTest);
  76729. $core.addMethod(
  76730. $core.method({
  76731. selector: "testVariableShadowing",
  76732. protocol: 'tests',
  76733. fn: function (){
  76734. var self=this;
  76735. var src,ast;
  76736. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76738. return $core.withContext(function($ctx1) {
  76739. //>>excludeEnd("ctx");
  76740. src="foo | a | a + 1";
  76741. ast=$recv($Smalltalk())._parse_(src);
  76742. $recv(self["@analyzer"])._visit_(ast);
  76743. return self;
  76744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76745. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76746. //>>excludeEnd("ctx");
  76747. },
  76748. //>>excludeStart("ide", pragmas.excludeIdeData);
  76749. args: [],
  76750. source: "testVariableShadowing\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast",
  76751. referencedClasses: ["Smalltalk"],
  76752. //>>excludeEnd("ide");
  76753. messageSends: ["parse:", "visit:"]
  76754. }),
  76755. $globals.SemanticAnalyzerTest);
  76756. $core.addMethod(
  76757. $core.method({
  76758. selector: "testVariableShadowing2",
  76759. protocol: 'tests',
  76760. fn: function (){
  76761. var self=this;
  76762. var src,ast;
  76763. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76764. function $ShadowingVariableError(){return $globals.ShadowingVariableError||(typeof ShadowingVariableError=="undefined"?nil:ShadowingVariableError)}
  76765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76766. return $core.withContext(function($ctx1) {
  76767. //>>excludeEnd("ctx");
  76768. src="foo | a | a + 1. [ | a | a := 2 ]";
  76769. ast=$recv($Smalltalk())._parse_(src);
  76770. self._should_raise_((function(){
  76771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76772. return $core.withContext(function($ctx2) {
  76773. //>>excludeEnd("ctx");
  76774. return $recv(self["@analyzer"])._visit_(ast);
  76775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76776. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76777. //>>excludeEnd("ctx");
  76778. }),$ShadowingVariableError());
  76779. return self;
  76780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76781. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing2",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76782. //>>excludeEnd("ctx");
  76783. },
  76784. //>>excludeStart("ide", pragmas.excludeIdeData);
  76785. args: [],
  76786. 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",
  76787. referencedClasses: ["Smalltalk", "ShadowingVariableError"],
  76788. //>>excludeEnd("ide");
  76789. messageSends: ["parse:", "should:raise:", "visit:"]
  76790. }),
  76791. $globals.SemanticAnalyzerTest);
  76792. $core.addMethod(
  76793. $core.method({
  76794. selector: "testVariableShadowing3",
  76795. protocol: 'tests',
  76796. fn: function (){
  76797. var self=this;
  76798. var src,ast;
  76799. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76801. return $core.withContext(function($ctx1) {
  76802. //>>excludeEnd("ctx");
  76803. src="foo | a | a + 1. [ | b | b := 2 ]";
  76804. ast=$recv($Smalltalk())._parse_(src);
  76805. $recv(self["@analyzer"])._visit_(ast);
  76806. return self;
  76807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76808. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing3",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76809. //>>excludeEnd("ctx");
  76810. },
  76811. //>>excludeStart("ide", pragmas.excludeIdeData);
  76812. args: [],
  76813. source: "testVariableShadowing3\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ | b | b := 2 ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast",
  76814. referencedClasses: ["Smalltalk"],
  76815. //>>excludeEnd("ide");
  76816. messageSends: ["parse:", "visit:"]
  76817. }),
  76818. $globals.SemanticAnalyzerTest);
  76819. $core.addMethod(
  76820. $core.method({
  76821. selector: "testVariableShadowing4",
  76822. protocol: 'tests',
  76823. fn: function (){
  76824. var self=this;
  76825. var src,ast;
  76826. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76828. return $core.withContext(function($ctx1) {
  76829. //>>excludeEnd("ctx");
  76830. src="foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]";
  76831. ast=$recv($Smalltalk())._parse_(src);
  76832. $recv(self["@analyzer"])._visit_(ast);
  76833. return self;
  76834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76835. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing4",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76836. //>>excludeEnd("ctx");
  76837. },
  76838. //>>excludeStart("ide", pragmas.excludeIdeData);
  76839. args: [],
  76840. source: "testVariableShadowing4\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast",
  76841. referencedClasses: ["Smalltalk"],
  76842. //>>excludeEnd("ide");
  76843. messageSends: ["parse:", "visit:"]
  76844. }),
  76845. $globals.SemanticAnalyzerTest);
  76846. $core.addMethod(
  76847. $core.method({
  76848. selector: "testVariableShadowing5",
  76849. protocol: 'tests',
  76850. fn: function (){
  76851. var self=this;
  76852. var src,ast;
  76853. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76854. function $ShadowingVariableError(){return $globals.ShadowingVariableError||(typeof ShadowingVariableError=="undefined"?nil:ShadowingVariableError)}
  76855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76856. return $core.withContext(function($ctx1) {
  76857. //>>excludeEnd("ctx");
  76858. src="foo | a | a + 1. [ [ [ | a | a := 2 ] ] ]";
  76859. ast=$recv($Smalltalk())._parse_(src);
  76860. self._should_raise_((function(){
  76861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76862. return $core.withContext(function($ctx2) {
  76863. //>>excludeEnd("ctx");
  76864. return $recv(self["@analyzer"])._visit_(ast);
  76865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76866. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76867. //>>excludeEnd("ctx");
  76868. }),$ShadowingVariableError());
  76869. return self;
  76870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76871. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing5",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  76872. //>>excludeEnd("ctx");
  76873. },
  76874. //>>excludeStart("ide", pragmas.excludeIdeData);
  76875. args: [],
  76876. 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",
  76877. referencedClasses: ["Smalltalk", "ShadowingVariableError"],
  76878. //>>excludeEnd("ide");
  76879. messageSends: ["parse:", "should:raise:", "visit:"]
  76880. }),
  76881. $globals.SemanticAnalyzerTest);
  76882. $core.addMethod(
  76883. $core.method({
  76884. selector: "testVariablesLookup",
  76885. protocol: 'tests',
  76886. fn: function (){
  76887. var self=this;
  76888. var src,ast;
  76889. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76891. return $core.withContext(function($ctx1) {
  76892. //>>excludeEnd("ctx");
  76893. 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;
  76894. src="foo | a | a + 1. [ | b | b := a ]";
  76895. ast=$recv($Smalltalk())._parse_(src);
  76896. $recv(self["@analyzer"])._visit_(ast);
  76897. $7=$recv(ast)._nodes();
  76898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76899. $ctx1.sendIdx["nodes"]=2;
  76900. //>>excludeEnd("ctx");
  76901. $6=$recv($7)._first();
  76902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76903. $ctx1.sendIdx["first"]=2;
  76904. //>>excludeEnd("ctx");
  76905. $5=$recv($6)._nodes();
  76906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76907. $ctx1.sendIdx["nodes"]=1;
  76908. //>>excludeEnd("ctx");
  76909. $4=$recv($5)._first();
  76910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76911. $ctx1.sendIdx["first"]=1;
  76912. //>>excludeEnd("ctx");
  76913. $3=$recv($4)._receiver();
  76914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76915. $ctx1.sendIdx["receiver"]=1;
  76916. //>>excludeEnd("ctx");
  76917. $2=$recv($3)._binding();
  76918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76919. $ctx1.sendIdx["binding"]=1;
  76920. //>>excludeEnd("ctx");
  76921. $1=$recv($2)._isTempVar();
  76922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76923. $ctx1.sendIdx["isTempVar"]=1;
  76924. //>>excludeEnd("ctx");
  76925. self._assert_($1);
  76926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76927. $ctx1.sendIdx["assert:"]=1;
  76928. //>>excludeEnd("ctx");
  76929. $15=$recv(ast)._nodes();
  76930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76931. $ctx1.sendIdx["nodes"]=4;
  76932. //>>excludeEnd("ctx");
  76933. $14=$recv($15)._first();
  76934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76935. $ctx1.sendIdx["first"]=4;
  76936. //>>excludeEnd("ctx");
  76937. $13=$recv($14)._nodes();
  76938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76939. $ctx1.sendIdx["nodes"]=3;
  76940. //>>excludeEnd("ctx");
  76941. $12=$recv($13)._first();
  76942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76943. $ctx1.sendIdx["first"]=3;
  76944. //>>excludeEnd("ctx");
  76945. $11=$recv($12)._receiver();
  76946. $10=$recv($11)._binding();
  76947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76948. $ctx1.sendIdx["binding"]=2;
  76949. //>>excludeEnd("ctx");
  76950. $9=$recv($10)._scope();
  76951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76952. $ctx1.sendIdx["scope"]=1;
  76953. //>>excludeEnd("ctx");
  76954. $16=$recv(ast)._scope();
  76955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76956. $ctx1.sendIdx["scope"]=2;
  76957. //>>excludeEnd("ctx");
  76958. $8=$recv($9).__eq_eq($16);
  76959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76960. $ctx1.sendIdx["=="]=1;
  76961. //>>excludeEnd("ctx");
  76962. self._assert_($8);
  76963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76964. $ctx1.sendIdx["assert:"]=2;
  76965. //>>excludeEnd("ctx");
  76966. $27=$recv(ast)._nodes();
  76967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76968. $ctx1.sendIdx["nodes"]=8;
  76969. //>>excludeEnd("ctx");
  76970. $26=$recv($27)._first();
  76971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76972. $ctx1.sendIdx["first"]=7;
  76973. //>>excludeEnd("ctx");
  76974. $25=$recv($26)._nodes();
  76975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76976. $ctx1.sendIdx["nodes"]=7;
  76977. //>>excludeEnd("ctx");
  76978. $24=$recv($25)._last();
  76979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76980. $ctx1.sendIdx["last"]=1;
  76981. //>>excludeEnd("ctx");
  76982. $23=$recv($24)._nodes();
  76983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76984. $ctx1.sendIdx["nodes"]=6;
  76985. //>>excludeEnd("ctx");
  76986. $22=$recv($23)._first();
  76987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76988. $ctx1.sendIdx["first"]=6;
  76989. //>>excludeEnd("ctx");
  76990. $21=$recv($22)._nodes();
  76991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76992. $ctx1.sendIdx["nodes"]=5;
  76993. //>>excludeEnd("ctx");
  76994. $20=$recv($21)._first();
  76995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76996. $ctx1.sendIdx["first"]=5;
  76997. //>>excludeEnd("ctx");
  76998. $19=$recv($20)._left();
  76999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77000. $ctx1.sendIdx["left"]=1;
  77001. //>>excludeEnd("ctx");
  77002. $18=$recv($19)._binding();
  77003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77004. $ctx1.sendIdx["binding"]=3;
  77005. //>>excludeEnd("ctx");
  77006. $17=$recv($18)._isTempVar();
  77007. self._assert_($17);
  77008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77009. $ctx1.sendIdx["assert:"]=3;
  77010. //>>excludeEnd("ctx");
  77011. $39=$recv(ast)._nodes();
  77012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77013. $ctx1.sendIdx["nodes"]=12;
  77014. //>>excludeEnd("ctx");
  77015. $38=$recv($39)._first();
  77016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77017. $ctx1.sendIdx["first"]=10;
  77018. //>>excludeEnd("ctx");
  77019. $37=$recv($38)._nodes();
  77020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77021. $ctx1.sendIdx["nodes"]=11;
  77022. //>>excludeEnd("ctx");
  77023. $36=$recv($37)._last();
  77024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77025. $ctx1.sendIdx["last"]=2;
  77026. //>>excludeEnd("ctx");
  77027. $35=$recv($36)._nodes();
  77028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77029. $ctx1.sendIdx["nodes"]=10;
  77030. //>>excludeEnd("ctx");
  77031. $34=$recv($35)._first();
  77032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77033. $ctx1.sendIdx["first"]=9;
  77034. //>>excludeEnd("ctx");
  77035. $33=$recv($34)._nodes();
  77036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77037. $ctx1.sendIdx["nodes"]=9;
  77038. //>>excludeEnd("ctx");
  77039. $32=$recv($33)._first();
  77040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77041. $ctx1.sendIdx["first"]=8;
  77042. //>>excludeEnd("ctx");
  77043. $31=$recv($32)._left();
  77044. $30=$recv($31)._binding();
  77045. $29=$recv($30)._scope();
  77046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77047. $ctx1.sendIdx["scope"]=3;
  77048. //>>excludeEnd("ctx");
  77049. $42=$recv($recv($recv(ast)._nodes())._first())._nodes();
  77050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77051. $ctx1.sendIdx["nodes"]=13;
  77052. //>>excludeEnd("ctx");
  77053. $41=$recv($42)._last();
  77054. $40=$recv($41)._scope();
  77055. $28=$recv($29).__eq_eq($40);
  77056. self._assert_($28);
  77057. return self;
  77058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77059. }, function($ctx1) {$ctx1.fill(self,"testVariablesLookup",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  77060. //>>excludeEnd("ctx");
  77061. },
  77062. //>>excludeStart("ide", pragmas.excludeIdeData);
  77063. args: [],
  77064. 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.",
  77065. referencedClasses: ["Smalltalk"],
  77066. //>>excludeEnd("ide");
  77067. messageSends: ["parse:", "visit:", "assert:", "isTempVar", "binding", "receiver", "first", "nodes", "==", "scope", "left", "last"]
  77068. }),
  77069. $globals.SemanticAnalyzerTest);
  77070. $core.addClass('AISemanticAnalyzerTest', $globals.SemanticAnalyzerTest, [], 'Compiler-Tests');
  77071. $core.addMethod(
  77072. $core.method({
  77073. selector: "setUp",
  77074. protocol: 'running',
  77075. fn: function (){
  77076. var self=this;
  77077. function $AISemanticAnalyzer(){return $globals.AISemanticAnalyzer||(typeof AISemanticAnalyzer=="undefined"?nil:AISemanticAnalyzer)}
  77078. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  77079. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  77080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77081. return $core.withContext(function($ctx1) {
  77082. //>>excludeEnd("ctx");
  77083. var $1,$2,$4,$5,$3,$6;
  77084. $1=$recv($AISemanticAnalyzer())._on_($Object());
  77085. $2=$1;
  77086. $4=$recv($AIContext())._new();
  77087. $recv($4)._defineLocal_("local");
  77088. $recv($4)._localAt_put_("local",(3));
  77089. $5=$recv($4)._yourself();
  77090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77091. $ctx1.sendIdx["yourself"]=1;
  77092. //>>excludeEnd("ctx");
  77093. $3=$5;
  77094. $recv($2)._context_($3);
  77095. $6=$recv($1)._yourself();
  77096. self["@analyzer"]=$6;
  77097. return self;
  77098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77099. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.AISemanticAnalyzerTest)});
  77100. //>>excludeEnd("ctx");
  77101. },
  77102. //>>excludeStart("ide", pragmas.excludeIdeData);
  77103. args: [],
  77104. 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",
  77105. referencedClasses: ["AISemanticAnalyzer", "Object", "AIContext"],
  77106. //>>excludeEnd("ide");
  77107. messageSends: ["context:", "on:", "defineLocal:", "new", "localAt:put:", "yourself"]
  77108. }),
  77109. $globals.AISemanticAnalyzerTest);
  77110. $core.addMethod(
  77111. $core.method({
  77112. selector: "testContextVariables",
  77113. protocol: 'tests',
  77114. fn: function (){
  77115. var self=this;
  77116. var src,ast;
  77117. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  77118. function $UnknownVariableError(){return $globals.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
  77119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77120. return $core.withContext(function($ctx1) {
  77121. //>>excludeEnd("ctx");
  77122. src="foo | a | local + a";
  77123. ast=$recv($Smalltalk())._parse_(src);
  77124. self._shouldnt_raise_((function(){
  77125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77126. return $core.withContext(function($ctx2) {
  77127. //>>excludeEnd("ctx");
  77128. return $recv(self["@analyzer"])._visit_(ast);
  77129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77130. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77131. //>>excludeEnd("ctx");
  77132. }),$UnknownVariableError());
  77133. return self;
  77134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77135. }, function($ctx1) {$ctx1.fill(self,"testContextVariables",{src:src,ast:ast},$globals.AISemanticAnalyzerTest)});
  77136. //>>excludeEnd("ctx");
  77137. },
  77138. //>>excludeStart("ide", pragmas.excludeIdeData);
  77139. args: [],
  77140. 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",
  77141. referencedClasses: ["Smalltalk", "UnknownVariableError"],
  77142. //>>excludeEnd("ide");
  77143. messageSends: ["parse:", "shouldnt:raise:", "visit:"]
  77144. }),
  77145. $globals.AISemanticAnalyzerTest);
  77146. });
  77147. define("amber_core/SUnit-Tests", ["amber/boot", "amber_core/SUnit"], function($boot){
  77148. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  77149. $core.addPackage('SUnit-Tests');
  77150. $core.packages["SUnit-Tests"].innerEval = function (expr) { return eval(expr); };
  77151. $core.packages["SUnit-Tests"].transport = {"type":"amd","amdNamespace":"amber_core"};
  77152. $core.addClass('ExampleSetTest', $globals.TestCase, ['empty', 'full'], 'SUnit-Tests');
  77153. //>>excludeStart("ide", pragmas.excludeIdeData);
  77154. $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.";
  77155. //>>excludeEnd("ide");
  77156. $core.addMethod(
  77157. $core.method({
  77158. selector: "setUp",
  77159. protocol: 'running',
  77160. fn: function (){
  77161. var self=this;
  77162. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  77163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77164. return $core.withContext(function($ctx1) {
  77165. //>>excludeEnd("ctx");
  77166. self["@empty"]=$recv($Set())._new();
  77167. self["@full"]=$recv($Set())._with_with_((5),"abc");
  77168. return self;
  77169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77170. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.ExampleSetTest)});
  77171. //>>excludeEnd("ctx");
  77172. },
  77173. //>>excludeStart("ide", pragmas.excludeIdeData);
  77174. args: [],
  77175. source: "setUp\x0a\x09empty := Set new.\x0a\x09full := Set with: 5 with: #abc",
  77176. referencedClasses: ["Set"],
  77177. //>>excludeEnd("ide");
  77178. messageSends: ["new", "with:with:"]
  77179. }),
  77180. $globals.ExampleSetTest);
  77181. $core.addMethod(
  77182. $core.method({
  77183. selector: "testAdd",
  77184. protocol: 'tests',
  77185. fn: function (){
  77186. var self=this;
  77187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77188. return $core.withContext(function($ctx1) {
  77189. //>>excludeEnd("ctx");
  77190. $recv(self["@empty"])._add_((5));
  77191. self._assert_($recv(self["@empty"])._includes_((5)));
  77192. return self;
  77193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77194. }, function($ctx1) {$ctx1.fill(self,"testAdd",{},$globals.ExampleSetTest)});
  77195. //>>excludeEnd("ctx");
  77196. },
  77197. //>>excludeStart("ide", pragmas.excludeIdeData);
  77198. args: [],
  77199. source: "testAdd\x0a\x09empty add: 5.\x0a\x09self assert: (empty includes: 5)",
  77200. referencedClasses: [],
  77201. //>>excludeEnd("ide");
  77202. messageSends: ["add:", "assert:", "includes:"]
  77203. }),
  77204. $globals.ExampleSetTest);
  77205. $core.addMethod(
  77206. $core.method({
  77207. selector: "testGrow",
  77208. protocol: 'tests',
  77209. fn: function (){
  77210. var self=this;
  77211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77212. return $core.withContext(function($ctx1) {
  77213. //>>excludeEnd("ctx");
  77214. $recv(self["@empty"])._addAll_((1)._to_((100)));
  77215. self._assert_equals_($recv(self["@empty"])._size(),(100));
  77216. return self;
  77217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77218. }, function($ctx1) {$ctx1.fill(self,"testGrow",{},$globals.ExampleSetTest)});
  77219. //>>excludeEnd("ctx");
  77220. },
  77221. //>>excludeStart("ide", pragmas.excludeIdeData);
  77222. args: [],
  77223. source: "testGrow\x0a\x09empty addAll: (1 to: 100).\x0a\x09self assert: empty size equals: 100",
  77224. referencedClasses: [],
  77225. //>>excludeEnd("ide");
  77226. messageSends: ["addAll:", "to:", "assert:equals:", "size"]
  77227. }),
  77228. $globals.ExampleSetTest);
  77229. $core.addMethod(
  77230. $core.method({
  77231. selector: "testIllegal",
  77232. protocol: 'tests',
  77233. fn: function (){
  77234. var self=this;
  77235. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  77236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77237. return $core.withContext(function($ctx1) {
  77238. //>>excludeEnd("ctx");
  77239. self._should_raise_((function(){
  77240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77241. return $core.withContext(function($ctx2) {
  77242. //>>excludeEnd("ctx");
  77243. return $recv(self["@empty"])._at_((5));
  77244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77245. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77246. //>>excludeEnd("ctx");
  77247. }),$Error());
  77248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77249. $ctx1.sendIdx["should:raise:"]=1;
  77250. //>>excludeEnd("ctx");
  77251. self._should_raise_((function(){
  77252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77253. return $core.withContext(function($ctx2) {
  77254. //>>excludeEnd("ctx");
  77255. return $recv(self["@empty"])._at_put_((5),"abc");
  77256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77257. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  77258. //>>excludeEnd("ctx");
  77259. }),$Error());
  77260. return self;
  77261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77262. }, function($ctx1) {$ctx1.fill(self,"testIllegal",{},$globals.ExampleSetTest)});
  77263. //>>excludeEnd("ctx");
  77264. },
  77265. //>>excludeStart("ide", pragmas.excludeIdeData);
  77266. args: [],
  77267. 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",
  77268. referencedClasses: ["Error"],
  77269. //>>excludeEnd("ide");
  77270. messageSends: ["should:raise:", "at:", "at:put:"]
  77271. }),
  77272. $globals.ExampleSetTest);
  77273. $core.addMethod(
  77274. $core.method({
  77275. selector: "testIncludes",
  77276. protocol: 'tests',
  77277. fn: function (){
  77278. var self=this;
  77279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77280. return $core.withContext(function($ctx1) {
  77281. //>>excludeEnd("ctx");
  77282. var $1;
  77283. $1=$recv(self["@full"])._includes_((5));
  77284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77285. $ctx1.sendIdx["includes:"]=1;
  77286. //>>excludeEnd("ctx");
  77287. self._assert_($1);
  77288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77289. $ctx1.sendIdx["assert:"]=1;
  77290. //>>excludeEnd("ctx");
  77291. self._assert_($recv(self["@full"])._includes_("abc"));
  77292. return self;
  77293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77294. }, function($ctx1) {$ctx1.fill(self,"testIncludes",{},$globals.ExampleSetTest)});
  77295. //>>excludeEnd("ctx");
  77296. },
  77297. //>>excludeStart("ide", pragmas.excludeIdeData);
  77298. args: [],
  77299. source: "testIncludes\x0a\x09self assert: (full includes: 5).\x0a\x09self assert: (full includes: #abc)",
  77300. referencedClasses: [],
  77301. //>>excludeEnd("ide");
  77302. messageSends: ["assert:", "includes:"]
  77303. }),
  77304. $globals.ExampleSetTest);
  77305. $core.addMethod(
  77306. $core.method({
  77307. selector: "testOccurrences",
  77308. protocol: 'tests',
  77309. fn: function (){
  77310. var self=this;
  77311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77312. return $core.withContext(function($ctx1) {
  77313. //>>excludeEnd("ctx");
  77314. var $1,$2;
  77315. $1=$recv(self["@empty"])._occurrencesOf_((0));
  77316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77317. $ctx1.sendIdx["occurrencesOf:"]=1;
  77318. //>>excludeEnd("ctx");
  77319. self._assert_equals_($1,(0));
  77320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77321. $ctx1.sendIdx["assert:equals:"]=1;
  77322. //>>excludeEnd("ctx");
  77323. $2=$recv(self["@full"])._occurrencesOf_((5));
  77324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77325. $ctx1.sendIdx["occurrencesOf:"]=2;
  77326. //>>excludeEnd("ctx");
  77327. self._assert_equals_($2,(1));
  77328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77329. $ctx1.sendIdx["assert:equals:"]=2;
  77330. //>>excludeEnd("ctx");
  77331. $recv(self["@full"])._add_((5));
  77332. self._assert_equals_($recv(self["@full"])._occurrencesOf_((5)),(1));
  77333. return self;
  77334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77335. }, function($ctx1) {$ctx1.fill(self,"testOccurrences",{},$globals.ExampleSetTest)});
  77336. //>>excludeEnd("ctx");
  77337. },
  77338. //>>excludeStart("ide", pragmas.excludeIdeData);
  77339. args: [],
  77340. 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",
  77341. referencedClasses: [],
  77342. //>>excludeEnd("ide");
  77343. messageSends: ["assert:equals:", "occurrencesOf:", "add:"]
  77344. }),
  77345. $globals.ExampleSetTest);
  77346. $core.addMethod(
  77347. $core.method({
  77348. selector: "testRemove",
  77349. protocol: 'tests',
  77350. fn: function (){
  77351. var self=this;
  77352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77353. return $core.withContext(function($ctx1) {
  77354. //>>excludeEnd("ctx");
  77355. var $1;
  77356. $recv(self["@full"])._remove_((5));
  77357. $1=$recv(self["@full"])._includes_("abc");
  77358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77359. $ctx1.sendIdx["includes:"]=1;
  77360. //>>excludeEnd("ctx");
  77361. self._assert_($1);
  77362. self._deny_($recv(self["@full"])._includes_((5)));
  77363. return self;
  77364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77365. }, function($ctx1) {$ctx1.fill(self,"testRemove",{},$globals.ExampleSetTest)});
  77366. //>>excludeEnd("ctx");
  77367. },
  77368. //>>excludeStart("ide", pragmas.excludeIdeData);
  77369. args: [],
  77370. source: "testRemove\x0a\x09full remove: 5.\x0a\x09self assert: (full includes: #abc).\x0a\x09self deny: (full includes: 5)",
  77371. referencedClasses: [],
  77372. //>>excludeEnd("ide");
  77373. messageSends: ["remove:", "assert:", "includes:", "deny:"]
  77374. }),
  77375. $globals.ExampleSetTest);
  77376. $core.addClass('SUnitAsyncTest', $globals.TestCase, ['flag'], 'SUnit-Tests');
  77377. $core.addMethod(
  77378. $core.method({
  77379. selector: "fakeError",
  77380. protocol: 'helpers',
  77381. fn: function (){
  77382. var self=this;
  77383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77384. return $core.withContext(function($ctx1) {
  77385. //>>excludeEnd("ctx");
  77386. self["@flag"]="bad";
  77387. self._timeout_((30));
  77388. self["@flag"]=$recv(self._async_((function(){
  77389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77390. return $core.withContext(function($ctx2) {
  77391. //>>excludeEnd("ctx");
  77392. self["@flag"]="ok";
  77393. self["@flag"];
  77394. return self._error_("Intentional");
  77395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77396. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77397. //>>excludeEnd("ctx");
  77398. })))._valueWithTimeout_((20));
  77399. return self;
  77400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77401. }, function($ctx1) {$ctx1.fill(self,"fakeError",{},$globals.SUnitAsyncTest)});
  77402. //>>excludeEnd("ctx");
  77403. },
  77404. //>>excludeStart("ide", pragmas.excludeIdeData);
  77405. args: [],
  77406. source: "fakeError\x0a\x09flag := 'bad'.\x0a\x09self timeout: 30.\x0a\x09flag := (self async: [ flag := 'ok'. self error: 'Intentional' ]) valueWithTimeout: 20",
  77407. referencedClasses: [],
  77408. //>>excludeEnd("ide");
  77409. messageSends: ["timeout:", "valueWithTimeout:", "async:", "error:"]
  77410. }),
  77411. $globals.SUnitAsyncTest);
  77412. $core.addMethod(
  77413. $core.method({
  77414. selector: "fakeErrorFailingInTearDown",
  77415. protocol: 'helpers',
  77416. fn: function (){
  77417. var self=this;
  77418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77419. return $core.withContext(function($ctx1) {
  77420. //>>excludeEnd("ctx");
  77421. self["@flag"]="bad";
  77422. self._timeout_((30));
  77423. self["@flag"]=$recv(self._async_((function(){
  77424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77425. return $core.withContext(function($ctx2) {
  77426. //>>excludeEnd("ctx");
  77427. return self._error_("Intentional");
  77428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77429. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77430. //>>excludeEnd("ctx");
  77431. })))._valueWithTimeout_((20));
  77432. return self;
  77433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77434. }, function($ctx1) {$ctx1.fill(self,"fakeErrorFailingInTearDown",{},$globals.SUnitAsyncTest)});
  77435. //>>excludeEnd("ctx");
  77436. },
  77437. //>>excludeStart("ide", pragmas.excludeIdeData);
  77438. args: [],
  77439. source: "fakeErrorFailingInTearDown\x0a\x09flag := 'bad'.\x0a\x09self timeout: 30.\x0a\x09flag := (self async: [ self error: 'Intentional' ]) valueWithTimeout: 20",
  77440. referencedClasses: [],
  77441. //>>excludeEnd("ide");
  77442. messageSends: ["timeout:", "valueWithTimeout:", "async:", "error:"]
  77443. }),
  77444. $globals.SUnitAsyncTest);
  77445. $core.addMethod(
  77446. $core.method({
  77447. selector: "fakeFailure",
  77448. protocol: 'helpers',
  77449. fn: function (){
  77450. var self=this;
  77451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77452. return $core.withContext(function($ctx1) {
  77453. //>>excludeEnd("ctx");
  77454. self["@flag"]="bad";
  77455. self._timeout_((30));
  77456. self["@flag"]=$recv(self._async_((function(){
  77457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77458. return $core.withContext(function($ctx2) {
  77459. //>>excludeEnd("ctx");
  77460. self["@flag"]="ok";
  77461. self["@flag"];
  77462. return self._assert_(false);
  77463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77464. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77465. //>>excludeEnd("ctx");
  77466. })))._valueWithTimeout_((20));
  77467. return self;
  77468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77469. }, function($ctx1) {$ctx1.fill(self,"fakeFailure",{},$globals.SUnitAsyncTest)});
  77470. //>>excludeEnd("ctx");
  77471. },
  77472. //>>excludeStart("ide", pragmas.excludeIdeData);
  77473. args: [],
  77474. source: "fakeFailure\x0a\x09flag := 'bad'.\x0a\x09self timeout: 30.\x0a\x09flag := (self async: [ flag := 'ok'. self assert: false ]) valueWithTimeout: 20",
  77475. referencedClasses: [],
  77476. //>>excludeEnd("ide");
  77477. messageSends: ["timeout:", "valueWithTimeout:", "async:", "assert:"]
  77478. }),
  77479. $globals.SUnitAsyncTest);
  77480. $core.addMethod(
  77481. $core.method({
  77482. selector: "fakeMultipleTimeoutFailing",
  77483. protocol: 'helpers',
  77484. fn: function (){
  77485. var self=this;
  77486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77487. return $core.withContext(function($ctx1) {
  77488. //>>excludeEnd("ctx");
  77489. var $1;
  77490. self._timeout_((100));
  77491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77492. $ctx1.sendIdx["timeout:"]=1;
  77493. //>>excludeEnd("ctx");
  77494. $1=self._async_((function(){
  77495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77496. return $core.withContext(function($ctx2) {
  77497. //>>excludeEnd("ctx");
  77498. self._timeout_((20));
  77499. return $recv(self._async_((function(){
  77500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77501. return $core.withContext(function($ctx3) {
  77502. //>>excludeEnd("ctx");
  77503. return self._finished();
  77504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77505. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  77506. //>>excludeEnd("ctx");
  77507. })))._valueWithTimeout_((30));
  77508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77509. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77510. //>>excludeEnd("ctx");
  77511. }));
  77512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77513. $ctx1.sendIdx["async:"]=1;
  77514. //>>excludeEnd("ctx");
  77515. $recv($1)._valueWithTimeout_((20));
  77516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77517. $ctx1.sendIdx["valueWithTimeout:"]=1;
  77518. //>>excludeEnd("ctx");
  77519. return self;
  77520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77521. }, function($ctx1) {$ctx1.fill(self,"fakeMultipleTimeoutFailing",{},$globals.SUnitAsyncTest)});
  77522. //>>excludeEnd("ctx");
  77523. },
  77524. //>>excludeStart("ide", pragmas.excludeIdeData);
  77525. args: [],
  77526. 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",
  77527. referencedClasses: [],
  77528. //>>excludeEnd("ide");
  77529. messageSends: ["timeout:", "valueWithTimeout:", "async:", "finished"]
  77530. }),
  77531. $globals.SUnitAsyncTest);
  77532. $core.addMethod(
  77533. $core.method({
  77534. selector: "fakeMultipleTimeoutPassing",
  77535. protocol: 'helpers',
  77536. fn: function (){
  77537. var self=this;
  77538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77539. return $core.withContext(function($ctx1) {
  77540. //>>excludeEnd("ctx");
  77541. var $1;
  77542. self._timeout_((20));
  77543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77544. $ctx1.sendIdx["timeout:"]=1;
  77545. //>>excludeEnd("ctx");
  77546. $1=self._async_((function(){
  77547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77548. return $core.withContext(function($ctx2) {
  77549. //>>excludeEnd("ctx");
  77550. self._timeout_((40));
  77551. return $recv(self._async_((function(){
  77552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77553. return $core.withContext(function($ctx3) {
  77554. //>>excludeEnd("ctx");
  77555. return self._finished();
  77556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77557. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  77558. //>>excludeEnd("ctx");
  77559. })))._valueWithTimeout_((20));
  77560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77561. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77562. //>>excludeEnd("ctx");
  77563. }));
  77564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77565. $ctx1.sendIdx["async:"]=1;
  77566. //>>excludeEnd("ctx");
  77567. $recv($1)._valueWithTimeout_((10));
  77568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77569. $ctx1.sendIdx["valueWithTimeout:"]=1;
  77570. //>>excludeEnd("ctx");
  77571. return self;
  77572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77573. }, function($ctx1) {$ctx1.fill(self,"fakeMultipleTimeoutPassing",{},$globals.SUnitAsyncTest)});
  77574. //>>excludeEnd("ctx");
  77575. },
  77576. //>>excludeStart("ide", pragmas.excludeIdeData);
  77577. args: [],
  77578. 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",
  77579. referencedClasses: [],
  77580. //>>excludeEnd("ide");
  77581. messageSends: ["timeout:", "valueWithTimeout:", "async:", "finished"]
  77582. }),
  77583. $globals.SUnitAsyncTest);
  77584. $core.addMethod(
  77585. $core.method({
  77586. selector: "fakeTimeout",
  77587. protocol: 'helpers',
  77588. fn: function (){
  77589. var self=this;
  77590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77591. return $core.withContext(function($ctx1) {
  77592. //>>excludeEnd("ctx");
  77593. self._timeout_((10));
  77594. $recv(self._async_((function(){
  77595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77596. return $core.withContext(function($ctx2) {
  77597. //>>excludeEnd("ctx");
  77598. return self._finished();
  77599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77600. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77601. //>>excludeEnd("ctx");
  77602. })))._valueWithTimeout_((20));
  77603. return self;
  77604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77605. }, function($ctx1) {$ctx1.fill(self,"fakeTimeout",{},$globals.SUnitAsyncTest)});
  77606. //>>excludeEnd("ctx");
  77607. },
  77608. //>>excludeStart("ide", pragmas.excludeIdeData);
  77609. args: [],
  77610. source: "fakeTimeout\x0a\x09self timeout: 10.\x0a\x09(self async: [ self finished ]) valueWithTimeout: 20",
  77611. referencedClasses: [],
  77612. //>>excludeEnd("ide");
  77613. messageSends: ["timeout:", "valueWithTimeout:", "async:", "finished"]
  77614. }),
  77615. $globals.SUnitAsyncTest);
  77616. $core.addMethod(
  77617. $core.method({
  77618. selector: "selectorSetOf:",
  77619. protocol: 'private',
  77620. fn: function (aCollection){
  77621. var self=this;
  77622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77623. return $core.withContext(function($ctx1) {
  77624. //>>excludeEnd("ctx");
  77625. var $1;
  77626. $1=$recv($recv(aCollection)._collect_((function(each){
  77627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77628. return $core.withContext(function($ctx2) {
  77629. //>>excludeEnd("ctx");
  77630. return $recv(each)._selector();
  77631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77632. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  77633. //>>excludeEnd("ctx");
  77634. })))._asSet();
  77635. return $1;
  77636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77637. }, function($ctx1) {$ctx1.fill(self,"selectorSetOf:",{aCollection:aCollection},$globals.SUnitAsyncTest)});
  77638. //>>excludeEnd("ctx");
  77639. },
  77640. //>>excludeStart("ide", pragmas.excludeIdeData);
  77641. args: ["aCollection"],
  77642. source: "selectorSetOf: aCollection\x0a\x09^ (aCollection collect: [ :each | each selector ]) asSet",
  77643. referencedClasses: [],
  77644. //>>excludeEnd("ide");
  77645. messageSends: ["asSet", "collect:", "selector"]
  77646. }),
  77647. $globals.SUnitAsyncTest);
  77648. $core.addMethod(
  77649. $core.method({
  77650. selector: "setUp",
  77651. protocol: 'running',
  77652. fn: function (){
  77653. var self=this;
  77654. self["@flag"]="ok";
  77655. return self;
  77656. },
  77657. //>>excludeStart("ide", pragmas.excludeIdeData);
  77658. args: [],
  77659. source: "setUp\x0a\x09flag := 'ok'",
  77660. referencedClasses: [],
  77661. //>>excludeEnd("ide");
  77662. messageSends: []
  77663. }),
  77664. $globals.SUnitAsyncTest);
  77665. $core.addMethod(
  77666. $core.method({
  77667. selector: "tearDown",
  77668. protocol: 'running',
  77669. fn: function (){
  77670. var self=this;
  77671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77672. return $core.withContext(function($ctx1) {
  77673. //>>excludeEnd("ctx");
  77674. self._assert_equals_("ok",self["@flag"]);
  77675. return self;
  77676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77677. }, function($ctx1) {$ctx1.fill(self,"tearDown",{},$globals.SUnitAsyncTest)});
  77678. //>>excludeEnd("ctx");
  77679. },
  77680. //>>excludeStart("ide", pragmas.excludeIdeData);
  77681. args: [],
  77682. source: "tearDown\x0a\x09self assert: 'ok' equals: flag",
  77683. referencedClasses: [],
  77684. //>>excludeEnd("ide");
  77685. messageSends: ["assert:equals:"]
  77686. }),
  77687. $globals.SUnitAsyncTest);
  77688. $core.addMethod(
  77689. $core.method({
  77690. selector: "testAsyncErrorsAndFailures",
  77691. protocol: 'tests',
  77692. fn: function (){
  77693. var self=this;
  77694. var suite,runner,result,assertBlock;
  77695. function $TestSuiteRunner(){return $globals.TestSuiteRunner||(typeof TestSuiteRunner=="undefined"?nil:TestSuiteRunner)}
  77696. function $ResultAnnouncement(){return $globals.ResultAnnouncement||(typeof ResultAnnouncement=="undefined"?nil:ResultAnnouncement)}
  77697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77698. return $core.withContext(function($ctx1) {
  77699. //>>excludeEnd("ctx");
  77700. var $1,$2,$3,$4;
  77701. suite=["fakeError", "fakeErrorFailingInTearDown", "fakeFailure", "testPass"]._collect_((function(each){
  77702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77703. return $core.withContext(function($ctx2) {
  77704. //>>excludeEnd("ctx");
  77705. return $recv(self._class())._selector_(each);
  77706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77707. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  77708. //>>excludeEnd("ctx");
  77709. }));
  77710. runner=$recv($TestSuiteRunner())._on_(suite);
  77711. self._timeout_((200));
  77712. result=$recv(runner)._result();
  77713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77714. $ctx1.sendIdx["result"]=1;
  77715. //>>excludeEnd("ctx");
  77716. assertBlock=self._async_((function(){
  77717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77718. return $core.withContext(function($ctx2) {
  77719. //>>excludeEnd("ctx");
  77720. $1=self._selectorSetOf_($recv(result)._errors());
  77721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77722. $ctx2.sendIdx["selectorSetOf:"]=1;
  77723. //>>excludeEnd("ctx");
  77724. $2=["fakeError"]._asSet();
  77725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77726. $ctx2.sendIdx["asSet"]=1;
  77727. //>>excludeEnd("ctx");
  77728. self._assert_equals_($1,$2);
  77729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77730. $ctx2.sendIdx["assert:equals:"]=1;
  77731. //>>excludeEnd("ctx");
  77732. self._assert_equals_(self._selectorSetOf_($recv(result)._failures()),["fakeErrorFailingInTearDown", "fakeFailure"]._asSet());
  77733. return self._finished();
  77734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77735. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  77736. //>>excludeEnd("ctx");
  77737. }));
  77738. $recv($recv(runner)._announcer())._on_do_($ResultAnnouncement(),(function(ann){
  77739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77740. return $core.withContext(function($ctx2) {
  77741. //>>excludeEnd("ctx");
  77742. $3=$recv($recv(ann)._result()).__eq_eq(result);
  77743. if($core.assert($3)){
  77744. $4=$recv($recv(result)._runs()).__eq($recv(result)._total());
  77745. return $recv($4)._ifTrue_(assertBlock);
  77746. };
  77747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77748. }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,3)});
  77749. //>>excludeEnd("ctx");
  77750. }));
  77751. $recv(runner)._run();
  77752. return self;
  77753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77754. }, function($ctx1) {$ctx1.fill(self,"testAsyncErrorsAndFailures",{suite:suite,runner:runner,result:result,assertBlock:assertBlock},$globals.SUnitAsyncTest)});
  77755. //>>excludeEnd("ctx");
  77756. },
  77757. //>>excludeStart("ide", pragmas.excludeIdeData);
  77758. args: [],
  77759. 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",
  77760. referencedClasses: ["TestSuiteRunner", "ResultAnnouncement"],
  77761. //>>excludeEnd("ide");
  77762. messageSends: ["collect:", "selector:", "class", "on:", "timeout:", "result", "async:", "assert:equals:", "selectorSetOf:", "errors", "asSet", "failures", "finished", "on:do:", "announcer", "ifTrue:", "==", "=", "runs", "total", "run"]
  77763. }),
  77764. $globals.SUnitAsyncTest);
  77765. $core.addMethod(
  77766. $core.method({
  77767. selector: "testAsyncNeedsTimeout",
  77768. protocol: 'tests',
  77769. fn: function (){
  77770. var self=this;
  77771. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  77772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77773. return $core.withContext(function($ctx1) {
  77774. //>>excludeEnd("ctx");
  77775. self._should_raise_((function(){
  77776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77777. return $core.withContext(function($ctx2) {
  77778. //>>excludeEnd("ctx");
  77779. return self._async_((function(){
  77780. }));
  77781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77782. $ctx2.sendIdx["async:"]=1;
  77783. //>>excludeEnd("ctx");
  77784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77785. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77786. //>>excludeEnd("ctx");
  77787. }),$Error());
  77788. self._timeout_((0));
  77789. self._shouldnt_raise_((function(){
  77790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77791. return $core.withContext(function($ctx2) {
  77792. //>>excludeEnd("ctx");
  77793. return self._async_((function(){
  77794. }));
  77795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77796. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  77797. //>>excludeEnd("ctx");
  77798. }),$Error());
  77799. self._finished();
  77800. return self;
  77801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77802. }, function($ctx1) {$ctx1.fill(self,"testAsyncNeedsTimeout",{},$globals.SUnitAsyncTest)});
  77803. //>>excludeEnd("ctx");
  77804. },
  77805. //>>excludeStart("ide", pragmas.excludeIdeData);
  77806. args: [],
  77807. source: "testAsyncNeedsTimeout\x0a\x09self should: [ self async: [ ] ] raise: Error.\x0a\x09self timeout: 0.\x0a\x09self shouldnt: [ self async: [ ] ] raise: Error.\x0a\x09self finished",
  77808. referencedClasses: ["Error"],
  77809. //>>excludeEnd("ide");
  77810. messageSends: ["should:raise:", "async:", "timeout:", "shouldnt:raise:", "finished"]
  77811. }),
  77812. $globals.SUnitAsyncTest);
  77813. $core.addMethod(
  77814. $core.method({
  77815. selector: "testFinishedNeedsTimeout",
  77816. protocol: 'tests',
  77817. fn: function (){
  77818. var self=this;
  77819. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  77820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77821. return $core.withContext(function($ctx1) {
  77822. //>>excludeEnd("ctx");
  77823. self._should_raise_((function(){
  77824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77825. return $core.withContext(function($ctx2) {
  77826. //>>excludeEnd("ctx");
  77827. return self._finished();
  77828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77829. $ctx2.sendIdx["finished"]=1;
  77830. //>>excludeEnd("ctx");
  77831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77832. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77833. //>>excludeEnd("ctx");
  77834. }),$Error());
  77835. self._timeout_((0));
  77836. self._shouldnt_raise_((function(){
  77837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77838. return $core.withContext(function($ctx2) {
  77839. //>>excludeEnd("ctx");
  77840. return self._finished();
  77841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77842. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  77843. //>>excludeEnd("ctx");
  77844. }),$Error());
  77845. return self;
  77846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77847. }, function($ctx1) {$ctx1.fill(self,"testFinishedNeedsTimeout",{},$globals.SUnitAsyncTest)});
  77848. //>>excludeEnd("ctx");
  77849. },
  77850. //>>excludeStart("ide", pragmas.excludeIdeData);
  77851. args: [],
  77852. source: "testFinishedNeedsTimeout\x0a\x09self should: [ self finished ] raise: Error.\x0a\x09self timeout: 0.\x0a\x09self shouldnt: [ self finished ] raise: Error.",
  77853. referencedClasses: ["Error"],
  77854. //>>excludeEnd("ide");
  77855. messageSends: ["should:raise:", "finished", "timeout:", "shouldnt:raise:"]
  77856. }),
  77857. $globals.SUnitAsyncTest);
  77858. $core.addMethod(
  77859. $core.method({
  77860. selector: "testIsAsyncReturnsCorrectValues",
  77861. protocol: 'tests',
  77862. fn: function (){
  77863. var self=this;
  77864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77865. return $core.withContext(function($ctx1) {
  77866. //>>excludeEnd("ctx");
  77867. var $1,$2;
  77868. $1=self._isAsync();
  77869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77870. $ctx1.sendIdx["isAsync"]=1;
  77871. //>>excludeEnd("ctx");
  77872. self._deny_($1);
  77873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77874. $ctx1.sendIdx["deny:"]=1;
  77875. //>>excludeEnd("ctx");
  77876. self._timeout_((0));
  77877. $2=self._isAsync();
  77878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77879. $ctx1.sendIdx["isAsync"]=2;
  77880. //>>excludeEnd("ctx");
  77881. self._assert_($2);
  77882. self._finished();
  77883. self._deny_(self._isAsync());
  77884. return self;
  77885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77886. }, function($ctx1) {$ctx1.fill(self,"testIsAsyncReturnsCorrectValues",{},$globals.SUnitAsyncTest)});
  77887. //>>excludeEnd("ctx");
  77888. },
  77889. //>>excludeStart("ide", pragmas.excludeIdeData);
  77890. args: [],
  77891. source: "testIsAsyncReturnsCorrectValues\x0a\x09self deny: self isAsync.\x0a\x09self timeout: 0.\x0a\x09self assert: self isAsync.\x0a\x09self finished.\x0a\x09self deny: self isAsync",
  77892. referencedClasses: [],
  77893. //>>excludeEnd("ide");
  77894. messageSends: ["deny:", "isAsync", "timeout:", "assert:", "finished"]
  77895. }),
  77896. $globals.SUnitAsyncTest);
  77897. $core.addMethod(
  77898. $core.method({
  77899. selector: "testPass",
  77900. protocol: 'tests',
  77901. fn: function (){
  77902. var self=this;
  77903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77904. return $core.withContext(function($ctx1) {
  77905. //>>excludeEnd("ctx");
  77906. self["@flag"]="bad";
  77907. self._timeout_((10));
  77908. self["@flag"]=$recv(self._async_((function(){
  77909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77910. return $core.withContext(function($ctx2) {
  77911. //>>excludeEnd("ctx");
  77912. self._assert_(true);
  77913. self._finished();
  77914. self["@flag"]="ok";
  77915. return self["@flag"];
  77916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77917. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77918. //>>excludeEnd("ctx");
  77919. })))._valueWithTimeout_((5));
  77920. return self;
  77921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77922. }, function($ctx1) {$ctx1.fill(self,"testPass",{},$globals.SUnitAsyncTest)});
  77923. //>>excludeEnd("ctx");
  77924. },
  77925. //>>excludeStart("ide", pragmas.excludeIdeData);
  77926. args: [],
  77927. source: "testPass\x0a\x09flag := 'bad'.\x0a\x09self timeout: 10.\x0a\x09flag := (self async: [ self assert: true. self finished. flag := 'ok' ]) valueWithTimeout: 5",
  77928. referencedClasses: [],
  77929. //>>excludeEnd("ide");
  77930. messageSends: ["timeout:", "valueWithTimeout:", "async:", "assert:", "finished"]
  77931. }),
  77932. $globals.SUnitAsyncTest);
  77933. $core.addMethod(
  77934. $core.method({
  77935. selector: "testTimeouts",
  77936. protocol: 'tests',
  77937. fn: function (){
  77938. var self=this;
  77939. var suite,runner,result,assertBlock;
  77940. function $TestSuiteRunner(){return $globals.TestSuiteRunner||(typeof TestSuiteRunner=="undefined"?nil:TestSuiteRunner)}
  77941. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  77942. function $ResultAnnouncement(){return $globals.ResultAnnouncement||(typeof ResultAnnouncement=="undefined"?nil:ResultAnnouncement)}
  77943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77944. return $core.withContext(function($ctx1) {
  77945. //>>excludeEnd("ctx");
  77946. var $1,$2,$3;
  77947. suite=["fakeTimeout", "fakeMultipleTimeoutFailing", "fakeMultipleTimeoutPassing", "testPass"]._collect_((function(each){
  77948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77949. return $core.withContext(function($ctx2) {
  77950. //>>excludeEnd("ctx");
  77951. return $recv(self._class())._selector_(each);
  77952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77953. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  77954. //>>excludeEnd("ctx");
  77955. }));
  77956. runner=$recv($TestSuiteRunner())._on_(suite);
  77957. self._timeout_((200));
  77958. result=$recv(runner)._result();
  77959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77960. $ctx1.sendIdx["result"]=1;
  77961. //>>excludeEnd("ctx");
  77962. assertBlock=self._async_((function(){
  77963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77964. return $core.withContext(function($ctx2) {
  77965. //>>excludeEnd("ctx");
  77966. $1=self._selectorSetOf_($recv(result)._errors());
  77967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77968. $ctx2.sendIdx["selectorSetOf:"]=1;
  77969. //>>excludeEnd("ctx");
  77970. self._assert_equals_($1,$recv($Set())._new());
  77971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77972. $ctx2.sendIdx["assert:equals:"]=1;
  77973. //>>excludeEnd("ctx");
  77974. self._assert_equals_(self._selectorSetOf_($recv(result)._failures()),["fakeMultipleTimeoutFailing", "fakeTimeout"]._asSet());
  77975. return self._finished();
  77976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77977. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  77978. //>>excludeEnd("ctx");
  77979. }));
  77980. $recv($recv(runner)._announcer())._on_do_($ResultAnnouncement(),(function(ann){
  77981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77982. return $core.withContext(function($ctx2) {
  77983. //>>excludeEnd("ctx");
  77984. $2=$recv($recv(ann)._result()).__eq_eq(result);
  77985. if($core.assert($2)){
  77986. $3=$recv($recv(result)._runs()).__eq($recv(result)._total());
  77987. return $recv($3)._ifTrue_(assertBlock);
  77988. };
  77989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77990. }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,3)});
  77991. //>>excludeEnd("ctx");
  77992. }));
  77993. $recv(runner)._run();
  77994. return self;
  77995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77996. }, function($ctx1) {$ctx1.fill(self,"testTimeouts",{suite:suite,runner:runner,result:result,assertBlock:assertBlock},$globals.SUnitAsyncTest)});
  77997. //>>excludeEnd("ctx");
  77998. },
  77999. //>>excludeStart("ide", pragmas.excludeIdeData);
  78000. args: [],
  78001. 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",
  78002. referencedClasses: ["TestSuiteRunner", "Set", "ResultAnnouncement"],
  78003. //>>excludeEnd("ide");
  78004. messageSends: ["collect:", "selector:", "class", "on:", "timeout:", "result", "async:", "assert:equals:", "selectorSetOf:", "errors", "new", "failures", "asSet", "finished", "on:do:", "announcer", "ifTrue:", "==", "=", "runs", "total", "run"]
  78005. }),
  78006. $globals.SUnitAsyncTest);
  78007. $core.addMethod(
  78008. $core.method({
  78009. selector: "testTwoAsyncPassesWithFinishedOnlyOneIsRun",
  78010. protocol: 'tests',
  78011. fn: function (){
  78012. var self=this;
  78013. var x;
  78014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78015. return $core.withContext(function($ctx1) {
  78016. //>>excludeEnd("ctx");
  78017. var $1;
  78018. self["@flag"]="bad";
  78019. self._timeout_((10));
  78020. x=(0);
  78021. $1=self._async_((function(){
  78022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78023. return $core.withContext(function($ctx2) {
  78024. //>>excludeEnd("ctx");
  78025. self._finished();
  78026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78027. $ctx2.sendIdx["finished"]=1;
  78028. //>>excludeEnd("ctx");
  78029. self["@flag"]="ok";
  78030. self["@flag"];
  78031. x=$recv(x).__plus((1));
  78032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78033. $ctx2.sendIdx["+"]=1;
  78034. //>>excludeEnd("ctx");
  78035. x;
  78036. return self._assert_equals_(x,(1));
  78037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78038. $ctx2.sendIdx["assert:equals:"]=1;
  78039. //>>excludeEnd("ctx");
  78040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78041. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  78042. //>>excludeEnd("ctx");
  78043. }));
  78044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78045. $ctx1.sendIdx["async:"]=1;
  78046. //>>excludeEnd("ctx");
  78047. self["@flag"]=$recv($1)._valueWithTimeout_((0));
  78048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78049. $ctx1.sendIdx["valueWithTimeout:"]=1;
  78050. //>>excludeEnd("ctx");
  78051. self["@flag"]=$recv(self._async_((function(){
  78052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78053. return $core.withContext(function($ctx2) {
  78054. //>>excludeEnd("ctx");
  78055. self._finished();
  78056. self["@flag"]="ok";
  78057. self["@flag"];
  78058. x=$recv(x).__plus((1));
  78059. x;
  78060. return self._assert_equals_(x,(1));
  78061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78062. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  78063. //>>excludeEnd("ctx");
  78064. })))._valueWithTimeout_((0));
  78065. return self;
  78066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78067. }, function($ctx1) {$ctx1.fill(self,"testTwoAsyncPassesWithFinishedOnlyOneIsRun",{x:x},$globals.SUnitAsyncTest)});
  78068. //>>excludeEnd("ctx");
  78069. },
  78070. //>>excludeStart("ide", pragmas.excludeIdeData);
  78071. args: [],
  78072. 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.",
  78073. referencedClasses: [],
  78074. //>>excludeEnd("ide");
  78075. messageSends: ["timeout:", "valueWithTimeout:", "async:", "finished", "+", "assert:equals:"]
  78076. }),
  78077. $globals.SUnitAsyncTest);
  78078. });
  78079. define("amber_cli/AmberCli", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  78080. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  78081. $core.addPackage('AmberCli');
  78082. $core.packages["AmberCli"].innerEval = function (expr) { return eval(expr); };
  78083. $core.packages["AmberCli"].transport = {"type":"amd","amdNamespace":"amber_cli"};
  78084. $core.addClass('AmberCli', $globals.Object, [], 'AmberCli');
  78085. //>>excludeStart("ide", pragmas.excludeIdeData);
  78086. $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.";
  78087. //>>excludeEnd("ide");
  78088. $core.addMethod(
  78089. $core.method({
  78090. selector: "commandLineSwitches",
  78091. protocol: 'commandline',
  78092. fn: function (){
  78093. var self=this;
  78094. var switches;
  78095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78096. return $core.withContext(function($ctx1) {
  78097. //>>excludeEnd("ctx");
  78098. var $1;
  78099. switches=$recv($recv(self._class())._methodsInProtocol_("commands"))._collect_((function(each){
  78100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78101. return $core.withContext(function($ctx2) {
  78102. //>>excludeEnd("ctx");
  78103. return $recv(each)._selector();
  78104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78105. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  78106. //>>excludeEnd("ctx");
  78107. }));
  78108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78109. $ctx1.sendIdx["collect:"]=1;
  78110. //>>excludeEnd("ctx");
  78111. switches=$recv(switches)._select_((function(each){
  78112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78113. return $core.withContext(function($ctx2) {
  78114. //>>excludeEnd("ctx");
  78115. return $recv(each)._match_("^[^:]*:$");
  78116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78117. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  78118. //>>excludeEnd("ctx");
  78119. }));
  78120. switches=$recv(switches)._collect_((function(each){
  78121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78122. return $core.withContext(function($ctx2) {
  78123. //>>excludeEnd("ctx");
  78124. return $recv($recv($recv(each)._allButLast())._replace_with_("([A-Z])","-$1"))._asLowercase();
  78125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78126. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  78127. //>>excludeEnd("ctx");
  78128. }));
  78129. $1=switches;
  78130. return $1;
  78131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78132. }, function($ctx1) {$ctx1.fill(self,"commandLineSwitches",{switches:switches},$globals.AmberCli.klass)});
  78133. //>>excludeEnd("ctx");
  78134. },
  78135. //>>excludeStart("ide", pragmas.excludeIdeData);
  78136. args: [],
  78137. 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",
  78138. referencedClasses: [],
  78139. //>>excludeEnd("ide");
  78140. messageSends: ["collect:", "methodsInProtocol:", "class", "selector", "select:", "match:", "asLowercase", "replace:with:", "allButLast"]
  78141. }),
  78142. $globals.AmberCli.klass);
  78143. $core.addMethod(
  78144. $core.method({
  78145. selector: "config:",
  78146. protocol: 'commands',
  78147. fn: function (args){
  78148. var self=this;
  78149. function $Configurator(){return $globals.Configurator||(typeof Configurator=="undefined"?nil:Configurator)}
  78150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78151. return $core.withContext(function($ctx1) {
  78152. //>>excludeEnd("ctx");
  78153. $recv($recv($Configurator())._new())._start();
  78154. return self;
  78155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78156. }, function($ctx1) {$ctx1.fill(self,"config:",{args:args},$globals.AmberCli.klass)});
  78157. //>>excludeEnd("ctx");
  78158. },
  78159. //>>excludeStart("ide", pragmas.excludeIdeData);
  78160. args: ["args"],
  78161. source: "config: args\x0a\x09Configurator new start",
  78162. referencedClasses: ["Configurator"],
  78163. //>>excludeEnd("ide");
  78164. messageSends: ["start", "new"]
  78165. }),
  78166. $globals.AmberCli.klass);
  78167. $core.addMethod(
  78168. $core.method({
  78169. selector: "handleArguments:",
  78170. protocol: 'commandline',
  78171. fn: function (args){
  78172. var self=this;
  78173. var selector;
  78174. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  78175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78176. return $core.withContext(function($ctx1) {
  78177. //>>excludeEnd("ctx");
  78178. var $1;
  78179. $1=$recv(args)._first();
  78180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78181. $ctx1.sendIdx["first"]=1;
  78182. //>>excludeEnd("ctx");
  78183. selector=self._selectorForCommandLineSwitch_($1);
  78184. $recv(args)._remove_($recv(args)._first());
  78185. self._perform_withArguments_(selector,$recv($Array())._with_(args));
  78186. return self;
  78187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78188. }, function($ctx1) {$ctx1.fill(self,"handleArguments:",{args:args,selector:selector},$globals.AmberCli.klass)});
  78189. //>>excludeEnd("ctx");
  78190. },
  78191. //>>excludeStart("ide", pragmas.excludeIdeData);
  78192. args: ["args"],
  78193. 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)",
  78194. referencedClasses: ["Array"],
  78195. //>>excludeEnd("ide");
  78196. messageSends: ["selectorForCommandLineSwitch:", "first", "remove:", "perform:withArguments:", "with:"]
  78197. }),
  78198. $globals.AmberCli.klass);
  78199. $core.addMethod(
  78200. $core.method({
  78201. selector: "help:",
  78202. protocol: 'commands',
  78203. fn: function (args){
  78204. var self=this;
  78205. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  78206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78207. return $core.withContext(function($ctx1) {
  78208. //>>excludeEnd("ctx");
  78209. $recv($Transcript())._show_("Available commands");
  78210. $recv(self._commandLineSwitches())._do_((function(each){
  78211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78212. return $core.withContext(function($ctx2) {
  78213. //>>excludeEnd("ctx");
  78214. return $recv(console)._log_(each);
  78215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78216. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  78217. //>>excludeEnd("ctx");
  78218. }));
  78219. return self;
  78220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78221. }, function($ctx1) {$ctx1.fill(self,"help:",{args:args},$globals.AmberCli.klass)});
  78222. //>>excludeEnd("ctx");
  78223. },
  78224. //>>excludeStart("ide", pragmas.excludeIdeData);
  78225. args: ["args"],
  78226. source: "help: args\x0a\x09Transcript show: 'Available commands'.\x0a\x09self commandLineSwitches do: [ :each | console log: each ]",
  78227. referencedClasses: ["Transcript"],
  78228. //>>excludeEnd("ide");
  78229. messageSends: ["show:", "do:", "commandLineSwitches", "log:"]
  78230. }),
  78231. $globals.AmberCli.klass);
  78232. $core.addMethod(
  78233. $core.method({
  78234. selector: "init:",
  78235. protocol: 'commands',
  78236. fn: function (args){
  78237. var self=this;
  78238. function $Initer(){return $globals.Initer||(typeof Initer=="undefined"?nil:Initer)}
  78239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78240. return $core.withContext(function($ctx1) {
  78241. //>>excludeEnd("ctx");
  78242. $recv($recv($Initer())._new())._start();
  78243. return self;
  78244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78245. }, function($ctx1) {$ctx1.fill(self,"init:",{args:args},$globals.AmberCli.klass)});
  78246. //>>excludeEnd("ctx");
  78247. },
  78248. //>>excludeStart("ide", pragmas.excludeIdeData);
  78249. args: ["args"],
  78250. source: "init: args\x0a\x09Initer new start",
  78251. referencedClasses: ["Initer"],
  78252. //>>excludeEnd("ide");
  78253. messageSends: ["start", "new"]
  78254. }),
  78255. $globals.AmberCli.klass);
  78256. $core.addMethod(
  78257. $core.method({
  78258. selector: "main",
  78259. protocol: 'startup',
  78260. fn: function (){
  78261. var self=this;
  78262. var args,nodeMinorVersion;
  78263. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  78264. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  78265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78266. return $core.withContext(function($ctx1) {
  78267. //>>excludeEnd("ctx");
  78268. var $5,$4,$3,$2,$1,$8,$7,$6,$9,$10,$11;
  78269. $5=$recv($Smalltalk())._version();
  78270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78271. $ctx1.sendIdx["version"]=1;
  78272. //>>excludeEnd("ctx");
  78273. $4="Welcome to Amber version ".__comma($5);
  78274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78275. $ctx1.sendIdx[","]=4;
  78276. //>>excludeEnd("ctx");
  78277. $3=$recv($4).__comma(" (NodeJS ");
  78278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78279. $ctx1.sendIdx[","]=3;
  78280. //>>excludeEnd("ctx");
  78281. $2=$recv($3).__comma($recv($recv(process)._versions())._node());
  78282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78283. $ctx1.sendIdx[","]=2;
  78284. //>>excludeEnd("ctx");
  78285. $1=$recv($2).__comma(").");
  78286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78287. $ctx1.sendIdx[","]=1;
  78288. //>>excludeEnd("ctx");
  78289. $recv($Transcript())._show_($1);
  78290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78291. $ctx1.sendIdx["show:"]=1;
  78292. //>>excludeEnd("ctx");
  78293. $8=$recv(process)._version();
  78294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78295. $ctx1.sendIdx["version"]=2;
  78296. //>>excludeEnd("ctx");
  78297. $7=$recv($8)._tokenize_(".");
  78298. $6=$recv($7)._second();
  78299. nodeMinorVersion=$recv($6)._asNumber();
  78300. $9=$recv(nodeMinorVersion).__lt((8));
  78301. if($core.assert($9)){
  78302. $recv($Transcript())._show_("You are currently using Node.js ".__comma($recv(process)._version()));
  78303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78304. $ctx1.sendIdx["show:"]=2;
  78305. //>>excludeEnd("ctx");
  78306. $recv($Transcript())._show_("Required is at least Node.js v0.8.x or greater.");
  78307. return (-1);
  78308. };
  78309. args=$recv(process)._argv();
  78310. $recv(args)._removeFrom_to_((1),(2));
  78311. $10=$recv(args)._isEmpty();
  78312. if($core.assert($10)){
  78313. self._help_(nil);
  78314. } else {
  78315. $11=self._handleArguments_(args);
  78316. return $11;
  78317. };
  78318. return self;
  78319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78320. }, function($ctx1) {$ctx1.fill(self,"main",{args:args,nodeMinorVersion:nodeMinorVersion},$globals.AmberCli.klass)});
  78321. //>>excludeEnd("ctx");
  78322. },
  78323. //>>excludeStart("ide", pragmas.excludeIdeData);
  78324. args: [],
  78325. 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]",
  78326. referencedClasses: ["Transcript", "Smalltalk"],
  78327. //>>excludeEnd("ide");
  78328. messageSends: ["show:", ",", "version", "node", "versions", "asNumber", "second", "tokenize:", "ifTrue:", "<", "argv", "removeFrom:to:", "ifTrue:ifFalse:", "isEmpty", "help:", "handleArguments:"]
  78329. }),
  78330. $globals.AmberCli.klass);
  78331. $core.addMethod(
  78332. $core.method({
  78333. selector: "repl:",
  78334. protocol: 'commands',
  78335. fn: function (args){
  78336. var self=this;
  78337. function $Repl(){return $globals.Repl||(typeof Repl=="undefined"?nil:Repl)}
  78338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78339. return $core.withContext(function($ctx1) {
  78340. //>>excludeEnd("ctx");
  78341. var $1;
  78342. $1=$recv($recv($Repl())._new())._createInterface();
  78343. return $1;
  78344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78345. }, function($ctx1) {$ctx1.fill(self,"repl:",{args:args},$globals.AmberCli.klass)});
  78346. //>>excludeEnd("ctx");
  78347. },
  78348. //>>excludeStart("ide", pragmas.excludeIdeData);
  78349. args: ["args"],
  78350. source: "repl: args\x0a\x09^ Repl new createInterface",
  78351. referencedClasses: ["Repl"],
  78352. //>>excludeEnd("ide");
  78353. messageSends: ["createInterface", "new"]
  78354. }),
  78355. $globals.AmberCli.klass);
  78356. $core.addMethod(
  78357. $core.method({
  78358. selector: "selectorForCommandLineSwitch:",
  78359. protocol: 'commandline',
  78360. fn: function (aSwitch){
  78361. var self=this;
  78362. var command,selector;
  78363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78364. return $core.withContext(function($ctx1) {
  78365. //>>excludeEnd("ctx");
  78366. var $1,$2;
  78367. $1=$recv(self._commandLineSwitches())._includes_(aSwitch);
  78368. if($core.assert($1)){
  78369. selector=$recv($recv(aSwitch)._replace_with_("-[a-z]",(function(each){
  78370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78371. return $core.withContext(function($ctx2) {
  78372. //>>excludeEnd("ctx");
  78373. return $recv($recv(each)._second())._asUppercase();
  78374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78375. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  78376. //>>excludeEnd("ctx");
  78377. }))).__comma(":");
  78378. selector;
  78379. } else {
  78380. selector="help:";
  78381. selector;
  78382. };
  78383. $2=selector;
  78384. return $2;
  78385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78386. }, function($ctx1) {$ctx1.fill(self,"selectorForCommandLineSwitch:",{aSwitch:aSwitch,command:command,selector:selector},$globals.AmberCli.klass)});
  78387. //>>excludeEnd("ctx");
  78388. },
  78389. //>>excludeStart("ide", pragmas.excludeIdeData);
  78390. args: ["aSwitch"],
  78391. 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",
  78392. referencedClasses: [],
  78393. //>>excludeEnd("ide");
  78394. messageSends: ["ifTrue:ifFalse:", "includes:", "commandLineSwitches", ",", "replace:with:", "asUppercase", "second"]
  78395. }),
  78396. $globals.AmberCli.klass);
  78397. $core.addMethod(
  78398. $core.method({
  78399. selector: "serve:",
  78400. protocol: 'commands',
  78401. fn: function (args){
  78402. var self=this;
  78403. function $FileServer(){return $globals.FileServer||(typeof FileServer=="undefined"?nil:FileServer)}
  78404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78405. return $core.withContext(function($ctx1) {
  78406. //>>excludeEnd("ctx");
  78407. var $1;
  78408. $1=$recv($recv($FileServer())._createServerWithArguments_(args))._start();
  78409. return $1;
  78410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78411. }, function($ctx1) {$ctx1.fill(self,"serve:",{args:args},$globals.AmberCli.klass)});
  78412. //>>excludeEnd("ctx");
  78413. },
  78414. //>>excludeStart("ide", pragmas.excludeIdeData);
  78415. args: ["args"],
  78416. source: "serve: args\x0a\x09^ (FileServer createServerWithArguments: args) start",
  78417. referencedClasses: ["FileServer"],
  78418. //>>excludeEnd("ide");
  78419. messageSends: ["start", "createServerWithArguments:"]
  78420. }),
  78421. $globals.AmberCli.klass);
  78422. $core.addMethod(
  78423. $core.method({
  78424. selector: "version:",
  78425. protocol: 'commands',
  78426. fn: function (arguments_){
  78427. var self=this;
  78428. return self;
  78429. },
  78430. //>>excludeStart("ide", pragmas.excludeIdeData);
  78431. args: ["arguments"],
  78432. source: "version: arguments",
  78433. referencedClasses: [],
  78434. //>>excludeEnd("ide");
  78435. messageSends: []
  78436. }),
  78437. $globals.AmberCli.klass);
  78438. $core.addClass('BaseFileManipulator', $globals.Object, ['path', 'fs'], 'AmberCli');
  78439. $core.addMethod(
  78440. $core.method({
  78441. selector: "dirname",
  78442. protocol: 'private',
  78443. fn: function (){
  78444. var self=this;
  78445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78446. return $core.withContext(function($ctx1) {
  78447. //>>excludeEnd("ctx");
  78448. return __dirname;
  78449. return self;
  78450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78451. }, function($ctx1) {$ctx1.fill(self,"dirname",{},$globals.BaseFileManipulator)});
  78452. //>>excludeEnd("ctx");
  78453. },
  78454. //>>excludeStart("ide", pragmas.excludeIdeData);
  78455. args: [],
  78456. source: "dirname\x0a\x09<return __dirname>",
  78457. referencedClasses: [],
  78458. //>>excludeEnd("ide");
  78459. messageSends: []
  78460. }),
  78461. $globals.BaseFileManipulator);
  78462. $core.addMethod(
  78463. $core.method({
  78464. selector: "initialize",
  78465. protocol: 'initialization',
  78466. fn: function (){
  78467. var self=this;
  78468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78469. return $core.withContext(function($ctx1) {
  78470. //>>excludeEnd("ctx");
  78471. (
  78472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78473. $ctx1.supercall = true,
  78474. //>>excludeEnd("ctx");
  78475. $globals.BaseFileManipulator.superclass.fn.prototype._initialize.apply($recv(self), []));
  78476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78477. $ctx1.supercall = false;
  78478. //>>excludeEnd("ctx");;
  78479. self["@path"]=$recv(require)._value_("path");
  78480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78481. $ctx1.sendIdx["value:"]=1;
  78482. //>>excludeEnd("ctx");
  78483. self["@fs"]=$recv(require)._value_("fs");
  78484. return self;
  78485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78486. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.BaseFileManipulator)});
  78487. //>>excludeEnd("ctx");
  78488. },
  78489. //>>excludeStart("ide", pragmas.excludeIdeData);
  78490. args: [],
  78491. source: "initialize\x0a\x09super initialize.\x0a\x09path := require value: 'path'.\x0a\x09fs := require value: 'fs'",
  78492. referencedClasses: [],
  78493. //>>excludeEnd("ide");
  78494. messageSends: ["initialize", "value:"]
  78495. }),
  78496. $globals.BaseFileManipulator);
  78497. $core.addMethod(
  78498. $core.method({
  78499. selector: "rootDirname",
  78500. protocol: 'private',
  78501. fn: function (){
  78502. var self=this;
  78503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78504. return $core.withContext(function($ctx1) {
  78505. //>>excludeEnd("ctx");
  78506. var $1;
  78507. $1=$recv(self["@path"])._join_with_(self._dirname(),"..");
  78508. return $1;
  78509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78510. }, function($ctx1) {$ctx1.fill(self,"rootDirname",{},$globals.BaseFileManipulator)});
  78511. //>>excludeEnd("ctx");
  78512. },
  78513. //>>excludeStart("ide", pragmas.excludeIdeData);
  78514. args: [],
  78515. source: "rootDirname\x0a\x09^ path join: self dirname with: '..'",
  78516. referencedClasses: [],
  78517. //>>excludeEnd("ide");
  78518. messageSends: ["join:with:", "dirname"]
  78519. }),
  78520. $globals.BaseFileManipulator);
  78521. $core.addClass('Configurator', $globals.BaseFileManipulator, [], 'AmberCli');
  78522. $core.addMethod(
  78523. $core.method({
  78524. selector: "initialize",
  78525. protocol: 'initialization',
  78526. fn: function (){
  78527. var self=this;
  78528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78529. return $core.withContext(function($ctx1) {
  78530. //>>excludeEnd("ctx");
  78531. (
  78532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78533. $ctx1.supercall = true,
  78534. //>>excludeEnd("ctx");
  78535. $globals.Configurator.superclass.fn.prototype._initialize.apply($recv(self), []));
  78536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78537. $ctx1.supercall = false;
  78538. //>>excludeEnd("ctx");;
  78539. return self;
  78540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78541. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Configurator)});
  78542. //>>excludeEnd("ctx");
  78543. },
  78544. //>>excludeStart("ide", pragmas.excludeIdeData);
  78545. args: [],
  78546. source: "initialize\x0a\x09super initialize",
  78547. referencedClasses: [],
  78548. //>>excludeEnd("ide");
  78549. messageSends: ["initialize"]
  78550. }),
  78551. $globals.Configurator);
  78552. $core.addMethod(
  78553. $core.method({
  78554. selector: "start",
  78555. protocol: 'action',
  78556. fn: function (){
  78557. var self=this;
  78558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78559. return $core.withContext(function($ctx1) {
  78560. //>>excludeEnd("ctx");
  78561. var $receiver;
  78562. self._writeConfigThenDo_((function(err){
  78563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78564. return $core.withContext(function($ctx2) {
  78565. //>>excludeEnd("ctx");
  78566. if(($receiver = err) == null || $receiver.isNil){
  78567. return $recv(process)._exit();
  78568. } else {
  78569. return $recv(process)._exit_((111));
  78570. };
  78571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78572. }, function($ctx2) {$ctx2.fillBlock({err:err},$ctx1,1)});
  78573. //>>excludeEnd("ctx");
  78574. }));
  78575. return self;
  78576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78577. }, function($ctx1) {$ctx1.fill(self,"start",{},$globals.Configurator)});
  78578. //>>excludeEnd("ctx");
  78579. },
  78580. //>>excludeStart("ide", pragmas.excludeIdeData);
  78581. args: [],
  78582. source: "start\x0a\x09self writeConfigThenDo: [ :err | err\x0a\x09\x09ifNotNil: [ process exit: 111 ]\x0a\x09\x09ifNil: [ process exit ]]",
  78583. referencedClasses: [],
  78584. //>>excludeEnd("ide");
  78585. messageSends: ["writeConfigThenDo:", "ifNotNil:ifNil:", "exit:", "exit"]
  78586. }),
  78587. $globals.Configurator);
  78588. $core.addMethod(
  78589. $core.method({
  78590. selector: "writeConfigThenDo:",
  78591. protocol: 'action',
  78592. fn: function (aBlock){
  78593. var self=this;
  78594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78595. return $core.withContext(function($ctx1) {
  78596. //>>excludeEnd("ctx");
  78597. $recv($recv(require)._value_("amber-dev/lib/config"))._writeConfig_toFile_thenDo_($recv(process)._cwd(),"config.js",aBlock);
  78598. return self;
  78599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78600. }, function($ctx1) {$ctx1.fill(self,"writeConfigThenDo:",{aBlock:aBlock},$globals.Configurator)});
  78601. //>>excludeEnd("ctx");
  78602. },
  78603. //>>excludeStart("ide", pragmas.excludeIdeData);
  78604. args: ["aBlock"],
  78605. 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",
  78606. referencedClasses: [],
  78607. //>>excludeEnd("ide");
  78608. messageSends: ["writeConfig:toFile:thenDo:", "value:", "cwd"]
  78609. }),
  78610. $globals.Configurator);
  78611. $core.addClass('FileServer', $globals.BaseFileManipulator, ['http', 'url', 'host', 'port', 'basePath', 'util', 'username', 'password', 'fallbackPage'], 'AmberCli');
  78612. //>>excludeStart("ide", pragmas.excludeIdeData);
  78613. $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.";
  78614. //>>excludeEnd("ide");
  78615. $core.addMethod(
  78616. $core.method({
  78617. selector: "base64Decode:",
  78618. protocol: 'private',
  78619. fn: function (aString){
  78620. var self=this;
  78621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78622. return $core.withContext(function($ctx1) {
  78623. //>>excludeEnd("ctx");
  78624. return (new Buffer(aString, 'base64').toString());
  78625. return self;
  78626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78627. }, function($ctx1) {$ctx1.fill(self,"base64Decode:",{aString:aString},$globals.FileServer)});
  78628. //>>excludeEnd("ctx");
  78629. },
  78630. //>>excludeStart("ide", pragmas.excludeIdeData);
  78631. args: ["aString"],
  78632. source: "base64Decode: aString\x0a\x09<return (new Buffer(aString, 'base64').toString())>",
  78633. referencedClasses: [],
  78634. //>>excludeEnd("ide");
  78635. messageSends: []
  78636. }),
  78637. $globals.FileServer);
  78638. $core.addMethod(
  78639. $core.method({
  78640. selector: "basePath",
  78641. protocol: 'accessing',
  78642. fn: function (){
  78643. var self=this;
  78644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78645. return $core.withContext(function($ctx1) {
  78646. //>>excludeEnd("ctx");
  78647. var $2,$1,$receiver;
  78648. $2=self["@basePath"];
  78649. if(($receiver = $2) == null || $receiver.isNil){
  78650. $1=$recv(self._class())._defaultBasePath();
  78651. } else {
  78652. $1=$2;
  78653. };
  78654. return $1;
  78655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78656. }, function($ctx1) {$ctx1.fill(self,"basePath",{},$globals.FileServer)});
  78657. //>>excludeEnd("ctx");
  78658. },
  78659. //>>excludeStart("ide", pragmas.excludeIdeData);
  78660. args: [],
  78661. source: "basePath\x0a\x09^ basePath ifNil: [self class defaultBasePath]",
  78662. referencedClasses: [],
  78663. //>>excludeEnd("ide");
  78664. messageSends: ["ifNil:", "defaultBasePath", "class"]
  78665. }),
  78666. $globals.FileServer);
  78667. $core.addMethod(
  78668. $core.method({
  78669. selector: "basePath:",
  78670. protocol: 'accessing',
  78671. fn: function (aString){
  78672. var self=this;
  78673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78674. return $core.withContext(function($ctx1) {
  78675. //>>excludeEnd("ctx");
  78676. self["@basePath"]=aString;
  78677. self._validateBasePath();
  78678. return self;
  78679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78680. }, function($ctx1) {$ctx1.fill(self,"basePath:",{aString:aString},$globals.FileServer)});
  78681. //>>excludeEnd("ctx");
  78682. },
  78683. //>>excludeStart("ide", pragmas.excludeIdeData);
  78684. args: ["aString"],
  78685. source: "basePath: aString\x0a\x09basePath := aString.\x0a\x09self validateBasePath.",
  78686. referencedClasses: [],
  78687. //>>excludeEnd("ide");
  78688. messageSends: ["validateBasePath"]
  78689. }),
  78690. $globals.FileServer);
  78691. $core.addMethod(
  78692. $core.method({
  78693. selector: "checkDirectoryLayout",
  78694. protocol: 'initialization',
  78695. fn: function (){
  78696. var self=this;
  78697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78698. return $core.withContext(function($ctx1) {
  78699. //>>excludeEnd("ctx");
  78700. var $1;
  78701. $1=$recv(self["@fs"])._existsSync_(self._withBasePath_("index.html"));
  78702. if(!$core.assert($1)){
  78703. $recv(console)._warn_("Warning: project directory does not contain index.html.");
  78704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78705. $ctx1.sendIdx["warn:"]=1;
  78706. //>>excludeEnd("ctx");
  78707. $recv(console)._warn_(" You can specify the directory containing index.html with --base-path.");
  78708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78709. $ctx1.sendIdx["warn:"]=2;
  78710. //>>excludeEnd("ctx");
  78711. $recv(console)._warn_(" You can also specify a page to be served by default,");
  78712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78713. $ctx1.sendIdx["warn:"]=3;
  78714. //>>excludeEnd("ctx");
  78715. $recv(console)._warn_(" for all paths that do not map to a file, with --fallback-page.");
  78716. };
  78717. return self;
  78718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78719. }, function($ctx1) {$ctx1.fill(self,"checkDirectoryLayout",{},$globals.FileServer)});
  78720. //>>excludeEnd("ctx");
  78721. },
  78722. //>>excludeStart("ide", pragmas.excludeIdeData);
  78723. args: [],
  78724. 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.'].",
  78725. referencedClasses: [],
  78726. //>>excludeEnd("ide");
  78727. messageSends: ["ifFalse:", "existsSync:", "withBasePath:", "warn:"]
  78728. }),
  78729. $globals.FileServer);
  78730. $core.addMethod(
  78731. $core.method({
  78732. selector: "fallbackPage",
  78733. protocol: 'accessing',
  78734. fn: function (){
  78735. var self=this;
  78736. var $1;
  78737. $1=self["@fallbackPage"];
  78738. return $1;
  78739. },
  78740. //>>excludeStart("ide", pragmas.excludeIdeData);
  78741. args: [],
  78742. source: "fallbackPage\x0a\x09^ fallbackPage",
  78743. referencedClasses: [],
  78744. //>>excludeEnd("ide");
  78745. messageSends: []
  78746. }),
  78747. $globals.FileServer);
  78748. $core.addMethod(
  78749. $core.method({
  78750. selector: "fallbackPage:",
  78751. protocol: 'accessing',
  78752. fn: function (aString){
  78753. var self=this;
  78754. self["@fallbackPage"]=aString;
  78755. return self;
  78756. },
  78757. //>>excludeStart("ide", pragmas.excludeIdeData);
  78758. args: ["aString"],
  78759. source: "fallbackPage: aString\x0a\x09fallbackPage := aString",
  78760. referencedClasses: [],
  78761. //>>excludeEnd("ide");
  78762. messageSends: []
  78763. }),
  78764. $globals.FileServer);
  78765. $core.addMethod(
  78766. $core.method({
  78767. selector: "handleGETRequest:respondTo:",
  78768. protocol: 'request handling',
  78769. fn: function (aRequest,aResponse){
  78770. var self=this;
  78771. var uri,filename;
  78772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78773. return $core.withContext(function($ctx1) {
  78774. //>>excludeEnd("ctx");
  78775. var $1;
  78776. uri=$recv(self["@url"])._parse_($recv(aRequest)._url());
  78777. filename=$recv(self["@path"])._join_with_(self._basePath(),$recv(uri)._pathname());
  78778. $recv(self["@fs"])._exists_do_(filename,(function(aBoolean){
  78779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78780. return $core.withContext(function($ctx2) {
  78781. //>>excludeEnd("ctx");
  78782. if($core.assert(aBoolean)){
  78783. $1=$recv($recv(self["@fs"])._statSync_(filename))._isDirectory();
  78784. if($core.assert($1)){
  78785. return self._respondDirectoryNamed_from_to_(filename,uri,aResponse);
  78786. } else {
  78787. return self._respondFileNamed_to_(filename,aResponse);
  78788. };
  78789. } else {
  78790. return self._respondNotFoundTo_(aResponse);
  78791. };
  78792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78793. }, function($ctx2) {$ctx2.fillBlock({aBoolean:aBoolean},$ctx1,1)});
  78794. //>>excludeEnd("ctx");
  78795. }));
  78796. return self;
  78797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78798. }, function($ctx1) {$ctx1.fill(self,"handleGETRequest:respondTo:",{aRequest:aRequest,aResponse:aResponse,uri:uri,filename:filename},$globals.FileServer)});
  78799. //>>excludeEnd("ctx");
  78800. },
  78801. //>>excludeStart("ide", pragmas.excludeIdeData);
  78802. args: ["aRequest", "aResponse"],
  78803. 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]]]",
  78804. referencedClasses: [],
  78805. //>>excludeEnd("ide");
  78806. messageSends: ["parse:", "url", "join:with:", "basePath", "pathname", "exists:do:", "ifFalse:ifTrue:", "respondNotFoundTo:", "ifTrue:ifFalse:", "isDirectory", "statSync:", "respondDirectoryNamed:from:to:", "respondFileNamed:to:"]
  78807. }),
  78808. $globals.FileServer);
  78809. $core.addMethod(
  78810. $core.method({
  78811. selector: "handleOPTIONSRequest:respondTo:",
  78812. protocol: 'request handling',
  78813. fn: function (aRequest,aResponse){
  78814. var self=this;
  78815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78816. return $core.withContext(function($ctx1) {
  78817. //>>excludeEnd("ctx");
  78818. $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)]));
  78819. $recv(aResponse)._end();
  78820. return self;
  78821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78822. }, function($ctx1) {$ctx1.fill(self,"handleOPTIONSRequest:respondTo:",{aRequest:aRequest,aResponse:aResponse},$globals.FileServer)});
  78823. //>>excludeEnd("ctx");
  78824. },
  78825. //>>excludeStart("ide", pragmas.excludeIdeData);
  78826. args: ["aRequest", "aResponse"],
  78827. 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",
  78828. referencedClasses: [],
  78829. //>>excludeEnd("ide");
  78830. messageSends: ["writeHead:options:", "end"]
  78831. }),
  78832. $globals.FileServer);
  78833. $core.addMethod(
  78834. $core.method({
  78835. selector: "handlePUTRequest:respondTo:",
  78836. protocol: 'request handling',
  78837. fn: function (aRequest,aResponse){
  78838. var self=this;
  78839. var file,stream;
  78840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78841. return $core.withContext(function($ctx1) {
  78842. //>>excludeEnd("ctx");
  78843. var $1,$2,$3,$4;
  78844. $1=self._isAuthenticated_(aRequest);
  78845. if(!$core.assert($1)){
  78846. self._respondAuthenticationRequiredTo_(aResponse);
  78847. return nil;
  78848. };
  78849. file=".".__comma($recv(aRequest)._url());
  78850. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78851. $ctx1.sendIdx[","]=1;
  78852. //>>excludeEnd("ctx");
  78853. stream=$recv(self["@fs"])._createWriteStream_(file);
  78854. $recv(stream)._on_do_("error",(function(error){
  78855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78856. return $core.withContext(function($ctx2) {
  78857. //>>excludeEnd("ctx");
  78858. $2=console;
  78859. $3="Error creating WriteStream for file ".__comma(file);
  78860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78861. $ctx2.sendIdx[","]=2;
  78862. //>>excludeEnd("ctx");
  78863. $recv($2)._warn_($3);
  78864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78865. $ctx2.sendIdx["warn:"]=1;
  78866. //>>excludeEnd("ctx");
  78867. $recv(console)._warn_(" Did you forget to create the necessary directory in your project (often /src)?");
  78868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78869. $ctx2.sendIdx["warn:"]=2;
  78870. //>>excludeEnd("ctx");
  78871. $recv(console)._warn_(" The exact error is: ".__comma(error));
  78872. return self._respondNotCreatedTo_(aResponse);
  78873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78874. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  78875. //>>excludeEnd("ctx");
  78876. }));
  78877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78878. $ctx1.sendIdx["on:do:"]=1;
  78879. //>>excludeEnd("ctx");
  78880. $recv(stream)._on_do_("close",(function(){
  78881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78882. return $core.withContext(function($ctx2) {
  78883. //>>excludeEnd("ctx");
  78884. return self._respondCreatedTo_(aResponse);
  78885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78886. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  78887. //>>excludeEnd("ctx");
  78888. }));
  78889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78890. $ctx1.sendIdx["on:do:"]=2;
  78891. //>>excludeEnd("ctx");
  78892. $recv(aRequest)._setEncoding_("utf8");
  78893. $recv(aRequest)._on_do_("data",(function(data){
  78894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78895. return $core.withContext(function($ctx2) {
  78896. //>>excludeEnd("ctx");
  78897. return $recv(stream)._write_(data);
  78898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78899. }, function($ctx2) {$ctx2.fillBlock({data:data},$ctx1,4)});
  78900. //>>excludeEnd("ctx");
  78901. }));
  78902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78903. $ctx1.sendIdx["on:do:"]=3;
  78904. //>>excludeEnd("ctx");
  78905. $recv(aRequest)._on_do_("end",(function(){
  78906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78907. return $core.withContext(function($ctx2) {
  78908. //>>excludeEnd("ctx");
  78909. $4=$recv(stream)._writable();
  78910. if($core.assert($4)){
  78911. return $recv(stream)._end();
  78912. };
  78913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78914. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  78915. //>>excludeEnd("ctx");
  78916. }));
  78917. return self;
  78918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78919. }, function($ctx1) {$ctx1.fill(self,"handlePUTRequest:respondTo:",{aRequest:aRequest,aResponse:aResponse,file:file,stream:stream},$globals.FileServer)});
  78920. //>>excludeEnd("ctx");
  78921. },
  78922. //>>excludeStart("ide", pragmas.excludeIdeData);
  78923. args: ["aRequest", "aResponse"],
  78924. 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]]",
  78925. referencedClasses: [],
  78926. //>>excludeEnd("ide");
  78927. messageSends: ["ifFalse:", "isAuthenticated:", "respondAuthenticationRequiredTo:", ",", "url", "createWriteStream:", "on:do:", "warn:", "respondNotCreatedTo:", "respondCreatedTo:", "setEncoding:", "write:", "ifTrue:", "writable", "end"]
  78928. }),
  78929. $globals.FileServer);
  78930. $core.addMethod(
  78931. $core.method({
  78932. selector: "handleRequest:respondTo:",
  78933. protocol: 'request handling',
  78934. fn: function (aRequest,aResponse){
  78935. var self=this;
  78936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78937. return $core.withContext(function($ctx1) {
  78938. //>>excludeEnd("ctx");
  78939. var $2,$1,$4,$3,$5;
  78940. $2=$recv(aRequest)._method();
  78941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78942. $ctx1.sendIdx["method"]=1;
  78943. //>>excludeEnd("ctx");
  78944. $1=$recv($2).__eq("PUT");
  78945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78946. $ctx1.sendIdx["="]=1;
  78947. //>>excludeEnd("ctx");
  78948. if($core.assert($1)){
  78949. self._handlePUTRequest_respondTo_(aRequest,aResponse);
  78950. };
  78951. $4=$recv(aRequest)._method();
  78952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78953. $ctx1.sendIdx["method"]=2;
  78954. //>>excludeEnd("ctx");
  78955. $3=$recv($4).__eq("GET");
  78956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78957. $ctx1.sendIdx["="]=2;
  78958. //>>excludeEnd("ctx");
  78959. if($core.assert($3)){
  78960. self._handleGETRequest_respondTo_(aRequest,aResponse);
  78961. };
  78962. $5=$recv($recv(aRequest)._method()).__eq("OPTIONS");
  78963. if($core.assert($5)){
  78964. self._handleOPTIONSRequest_respondTo_(aRequest,aResponse);
  78965. };
  78966. return self;
  78967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78968. }, function($ctx1) {$ctx1.fill(self,"handleRequest:respondTo:",{aRequest:aRequest,aResponse:aResponse},$globals.FileServer)});
  78969. //>>excludeEnd("ctx");
  78970. },
  78971. //>>excludeStart("ide", pragmas.excludeIdeData);
  78972. args: ["aRequest", "aResponse"],
  78973. 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]",
  78974. referencedClasses: [],
  78975. //>>excludeEnd("ide");
  78976. messageSends: ["ifTrue:", "=", "method", "handlePUTRequest:respondTo:", "handleGETRequest:respondTo:", "handleOPTIONSRequest:respondTo:"]
  78977. }),
  78978. $globals.FileServer);
  78979. $core.addMethod(
  78980. $core.method({
  78981. selector: "host",
  78982. protocol: 'accessing',
  78983. fn: function (){
  78984. var self=this;
  78985. var $1;
  78986. $1=self["@host"];
  78987. return $1;
  78988. },
  78989. //>>excludeStart("ide", pragmas.excludeIdeData);
  78990. args: [],
  78991. source: "host\x0a\x09^ host",
  78992. referencedClasses: [],
  78993. //>>excludeEnd("ide");
  78994. messageSends: []
  78995. }),
  78996. $globals.FileServer);
  78997. $core.addMethod(
  78998. $core.method({
  78999. selector: "host:",
  79000. protocol: 'accessing',
  79001. fn: function (hostname){
  79002. var self=this;
  79003. self["@host"]=hostname;
  79004. return self;
  79005. },
  79006. //>>excludeStart("ide", pragmas.excludeIdeData);
  79007. args: ["hostname"],
  79008. source: "host: hostname\x0a\x09host := hostname",
  79009. referencedClasses: [],
  79010. //>>excludeEnd("ide");
  79011. messageSends: []
  79012. }),
  79013. $globals.FileServer);
  79014. $core.addMethod(
  79015. $core.method({
  79016. selector: "initialize",
  79017. protocol: 'initialization',
  79018. fn: function (){
  79019. var self=this;
  79020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79021. return $core.withContext(function($ctx1) {
  79022. //>>excludeEnd("ctx");
  79023. var $1;
  79024. (
  79025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79026. $ctx1.supercall = true,
  79027. //>>excludeEnd("ctx");
  79028. $globals.FileServer.superclass.fn.prototype._initialize.apply($recv(self), []));
  79029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79030. $ctx1.supercall = false;
  79031. //>>excludeEnd("ctx");;
  79032. self["@http"]=self._require_("http");
  79033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79034. $ctx1.sendIdx["require:"]=1;
  79035. //>>excludeEnd("ctx");
  79036. self["@util"]=self._require_("util");
  79037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79038. $ctx1.sendIdx["require:"]=2;
  79039. //>>excludeEnd("ctx");
  79040. self["@url"]=self._require_("url");
  79041. $1=self._class();
  79042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79043. $ctx1.sendIdx["class"]=1;
  79044. //>>excludeEnd("ctx");
  79045. self["@host"]=$recv($1)._defaultHost();
  79046. self["@port"]=$recv(self._class())._defaultPort();
  79047. self["@username"]=nil;
  79048. self["@password"]=nil;
  79049. self["@fallbackPage"]=nil;
  79050. return self;
  79051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79052. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.FileServer)});
  79053. //>>excludeEnd("ctx");
  79054. },
  79055. //>>excludeStart("ide", pragmas.excludeIdeData);
  79056. args: [],
  79057. 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.",
  79058. referencedClasses: [],
  79059. //>>excludeEnd("ide");
  79060. messageSends: ["initialize", "require:", "defaultHost", "class", "defaultPort"]
  79061. }),
  79062. $globals.FileServer);
  79063. $core.addMethod(
  79064. $core.method({
  79065. selector: "isAuthenticated:",
  79066. protocol: 'private',
  79067. fn: function (aRequest){
  79068. var self=this;
  79069. var header,token,auth,parts;
  79070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79071. return $core.withContext(function($ctx1) {
  79072. //>>excludeEnd("ctx");
  79073. var $2,$1,$3,$4,$5,$6,$9,$10,$8,$7,$receiver;
  79074. $2=$recv(self["@username"])._isNil();
  79075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79076. $ctx1.sendIdx["isNil"]=1;
  79077. //>>excludeEnd("ctx");
  79078. $1=$recv($2)._and_((function(){
  79079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79080. return $core.withContext(function($ctx2) {
  79081. //>>excludeEnd("ctx");
  79082. return $recv(self["@password"])._isNil();
  79083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79084. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  79085. //>>excludeEnd("ctx");
  79086. }));
  79087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79088. $ctx1.sendIdx["and:"]=1;
  79089. //>>excludeEnd("ctx");
  79090. if($core.assert($1)){
  79091. return true;
  79092. };
  79093. $3=$recv($recv(aRequest)._headers())._at_("authorization");
  79094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79095. $ctx1.sendIdx["at:"]=1;
  79096. //>>excludeEnd("ctx");
  79097. if(($receiver = $3) == null || $receiver.isNil){
  79098. header="";
  79099. } else {
  79100. header=$3;
  79101. };
  79102. $4=$recv(header)._isEmpty();
  79103. if($core.assert($4)){
  79104. return false;
  79105. } else {
  79106. $5=$recv(header)._tokenize_(" ");
  79107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79108. $ctx1.sendIdx["tokenize:"]=1;
  79109. //>>excludeEnd("ctx");
  79110. if(($receiver = $5) == null || $receiver.isNil){
  79111. token="";
  79112. } else {
  79113. token=$5;
  79114. };
  79115. token;
  79116. $6=$recv(token)._at_((2));
  79117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79118. $ctx1.sendIdx["at:"]=2;
  79119. //>>excludeEnd("ctx");
  79120. auth=self._base64Decode_($6);
  79121. auth;
  79122. parts=$recv(auth)._tokenize_(":");
  79123. parts;
  79124. $9=self["@username"];
  79125. $10=$recv(parts)._at_((1));
  79126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79127. $ctx1.sendIdx["at:"]=3;
  79128. //>>excludeEnd("ctx");
  79129. $8=$recv($9).__eq($10);
  79130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79131. $ctx1.sendIdx["="]=1;
  79132. //>>excludeEnd("ctx");
  79133. $7=$recv($8)._and_((function(){
  79134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79135. return $core.withContext(function($ctx2) {
  79136. //>>excludeEnd("ctx");
  79137. return $recv(self["@password"]).__eq($recv(parts)._at_((2)));
  79138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79139. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  79140. //>>excludeEnd("ctx");
  79141. }));
  79142. if($core.assert($7)){
  79143. return true;
  79144. } else {
  79145. return false;
  79146. };
  79147. };
  79148. return self;
  79149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79150. }, function($ctx1) {$ctx1.fill(self,"isAuthenticated:",{aRequest:aRequest,header:header,token:token,auth:auth,parts:parts},$globals.FileServer)});
  79151. //>>excludeEnd("ctx");
  79152. },
  79153. //>>excludeStart("ide", pragmas.excludeIdeData);
  79154. args: ["aRequest"],
  79155. 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].",
  79156. referencedClasses: [],
  79157. //>>excludeEnd("ide");
  79158. messageSends: ["ifTrue:", "and:", "isNil", "ifNil:", "at:", "headers", "ifTrue:ifFalse:", "isEmpty", "tokenize:", "base64Decode:", "="]
  79159. }),
  79160. $globals.FileServer);
  79161. $core.addMethod(
  79162. $core.method({
  79163. selector: "password:",
  79164. protocol: 'accessing',
  79165. fn: function (aPassword){
  79166. var self=this;
  79167. self["@password"]=aPassword;
  79168. return self;
  79169. },
  79170. //>>excludeStart("ide", pragmas.excludeIdeData);
  79171. args: ["aPassword"],
  79172. source: "password: aPassword\x0a\x09password := aPassword.",
  79173. referencedClasses: [],
  79174. //>>excludeEnd("ide");
  79175. messageSends: []
  79176. }),
  79177. $globals.FileServer);
  79178. $core.addMethod(
  79179. $core.method({
  79180. selector: "port",
  79181. protocol: 'accessing',
  79182. fn: function (){
  79183. var self=this;
  79184. var $1;
  79185. $1=self["@port"];
  79186. return $1;
  79187. },
  79188. //>>excludeStart("ide", pragmas.excludeIdeData);
  79189. args: [],
  79190. source: "port\x0a\x09^ port",
  79191. referencedClasses: [],
  79192. //>>excludeEnd("ide");
  79193. messageSends: []
  79194. }),
  79195. $globals.FileServer);
  79196. $core.addMethod(
  79197. $core.method({
  79198. selector: "port:",
  79199. protocol: 'accessing',
  79200. fn: function (aNumber){
  79201. var self=this;
  79202. self["@port"]=aNumber;
  79203. return self;
  79204. },
  79205. //>>excludeStart("ide", pragmas.excludeIdeData);
  79206. args: ["aNumber"],
  79207. source: "port: aNumber\x0a\x09port := aNumber",
  79208. referencedClasses: [],
  79209. //>>excludeEnd("ide");
  79210. messageSends: []
  79211. }),
  79212. $globals.FileServer);
  79213. $core.addMethod(
  79214. $core.method({
  79215. selector: "require:",
  79216. protocol: 'private',
  79217. fn: function (aModuleString){
  79218. var self=this;
  79219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79220. return $core.withContext(function($ctx1) {
  79221. //>>excludeEnd("ctx");
  79222. var $1;
  79223. $1=$recv(require)._value_(aModuleString);
  79224. return $1;
  79225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79226. }, function($ctx1) {$ctx1.fill(self,"require:",{aModuleString:aModuleString},$globals.FileServer)});
  79227. //>>excludeEnd("ctx");
  79228. },
  79229. //>>excludeStart("ide", pragmas.excludeIdeData);
  79230. args: ["aModuleString"],
  79231. source: "require: aModuleString\x0a\x09\x22call to the require function\x22\x0a\x09^require value: aModuleString",
  79232. referencedClasses: [],
  79233. //>>excludeEnd("ide");
  79234. messageSends: ["value:"]
  79235. }),
  79236. $globals.FileServer);
  79237. $core.addMethod(
  79238. $core.method({
  79239. selector: "respondAuthenticationRequiredTo:",
  79240. protocol: 'request handling',
  79241. fn: function (aResponse){
  79242. var self=this;
  79243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79244. return $core.withContext(function($ctx1) {
  79245. //>>excludeEnd("ctx");
  79246. var $1;
  79247. $recv(aResponse)._writeHead_options_((401),$globals.HashedCollection._newFromPairs_(["WWW-Authenticate","Basic realm=\x22Secured Developer Area\x22"]));
  79248. $recv(aResponse)._write_("<html><body>Authentication needed</body></html>");
  79249. $1=$recv(aResponse)._end();
  79250. return self;
  79251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79252. }, function($ctx1) {$ctx1.fill(self,"respondAuthenticationRequiredTo:",{aResponse:aResponse},$globals.FileServer)});
  79253. //>>excludeEnd("ctx");
  79254. },
  79255. //>>excludeStart("ide", pragmas.excludeIdeData);
  79256. args: ["aResponse"],
  79257. 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.",
  79258. referencedClasses: [],
  79259. //>>excludeEnd("ide");
  79260. messageSends: ["writeHead:options:", "write:", "end"]
  79261. }),
  79262. $globals.FileServer);
  79263. $core.addMethod(
  79264. $core.method({
  79265. selector: "respondCreatedTo:",
  79266. protocol: 'request handling',
  79267. fn: function (aResponse){
  79268. var self=this;
  79269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79270. return $core.withContext(function($ctx1) {
  79271. //>>excludeEnd("ctx");
  79272. var $1;
  79273. $recv(aResponse)._writeHead_options_((201),$globals.HashedCollection._newFromPairs_(["Content-Type","text/plain","Access-Control-Allow-Origin","*"]));
  79274. $1=$recv(aResponse)._end();
  79275. return self;
  79276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79277. }, function($ctx1) {$ctx1.fill(self,"respondCreatedTo:",{aResponse:aResponse},$globals.FileServer)});
  79278. //>>excludeEnd("ctx");
  79279. },
  79280. //>>excludeStart("ide", pragmas.excludeIdeData);
  79281. args: ["aResponse"],
  79282. source: "respondCreatedTo: aResponse\x0a\x09aResponse\x0a\x09\x09writeHead: 201 options: #{'Content-Type' -> 'text/plain'. 'Access-Control-Allow-Origin' -> '*'};\x0a\x09\x09end.",
  79283. referencedClasses: [],
  79284. //>>excludeEnd("ide");
  79285. messageSends: ["writeHead:options:", "end"]
  79286. }),
  79287. $globals.FileServer);
  79288. $core.addMethod(
  79289. $core.method({
  79290. selector: "respondDirectoryNamed:from:to:",
  79291. protocol: 'request handling',
  79292. fn: function (aDirname,aUrl,aResponse){
  79293. var self=this;
  79294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79295. return $core.withContext(function($ctx1) {
  79296. //>>excludeEnd("ctx");
  79297. var $2,$1,$3,$5,$7,$6,$4,$receiver;
  79298. $2=$recv(aUrl)._pathname();
  79299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79300. $ctx1.sendIdx["pathname"]=1;
  79301. //>>excludeEnd("ctx");
  79302. $1=$recv($2)._endsWith_("/");
  79303. if($core.assert($1)){
  79304. $3=$recv(aDirname).__comma("index.html");
  79305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79306. $ctx1.sendIdx[","]=1;
  79307. //>>excludeEnd("ctx");
  79308. self._respondFileNamed_to_($3,aResponse);
  79309. } else {
  79310. $5=$recv($recv(aUrl)._pathname()).__comma("/");
  79311. $7=$recv(aUrl)._search();
  79312. if(($receiver = $7) == null || $receiver.isNil){
  79313. $6="";
  79314. } else {
  79315. $6=$7;
  79316. };
  79317. $4=$recv($5).__comma($6);
  79318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79319. $ctx1.sendIdx[","]=2;
  79320. //>>excludeEnd("ctx");
  79321. self._respondRedirect_to_($4,aResponse);
  79322. };
  79323. return self;
  79324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79325. }, function($ctx1) {$ctx1.fill(self,"respondDirectoryNamed:from:to:",{aDirname:aDirname,aUrl:aUrl,aResponse:aResponse},$globals.FileServer)});
  79326. //>>excludeEnd("ctx");
  79327. },
  79328. //>>excludeStart("ide", pragmas.excludeIdeData);
  79329. args: ["aDirname", "aUrl", "aResponse"],
  79330. 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]",
  79331. referencedClasses: [],
  79332. //>>excludeEnd("ide");
  79333. messageSends: ["ifTrue:ifFalse:", "endsWith:", "pathname", "respondFileNamed:to:", ",", "respondRedirect:to:", "ifNil:", "search"]
  79334. }),
  79335. $globals.FileServer);
  79336. $core.addMethod(
  79337. $core.method({
  79338. selector: "respondFileNamed:to:",
  79339. protocol: 'request handling',
  79340. fn: function (aFilename,aResponse){
  79341. var self=this;
  79342. var type,filename;
  79343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79344. return $core.withContext(function($ctx1) {
  79345. //>>excludeEnd("ctx");
  79346. var $1,$2,$3,$4,$5;
  79347. filename=aFilename;
  79348. $recv(self["@fs"])._readFile_do_(filename,(function(ex,file){
  79349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79350. return $core.withContext(function($ctx2) {
  79351. //>>excludeEnd("ctx");
  79352. $1=$recv(ex)._notNil();
  79353. if($core.assert($1)){
  79354. $2=console;
  79355. $3=$recv(filename).__comma(" does not exist");
  79356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79357. $ctx2.sendIdx[","]=1;
  79358. //>>excludeEnd("ctx");
  79359. $recv($2)._log_($3);
  79360. return self._respondNotFoundTo_(aResponse);
  79361. } else {
  79362. type=$recv(self._class())._mimeTypeFor_(filename);
  79363. type;
  79364. $4=$recv(type).__eq("application/javascript");
  79365. if($core.assert($4)){
  79366. type=$recv(type).__comma(";charset=utf-8");
  79367. type;
  79368. };
  79369. $recv(aResponse)._writeHead_options_((200),$globals.HashedCollection._newFromPairs_(["Content-Type",type]));
  79370. $recv(aResponse)._write_encoding_(file,"binary");
  79371. $5=$recv(aResponse)._end();
  79372. return $5;
  79373. };
  79374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79375. }, function($ctx2) {$ctx2.fillBlock({ex:ex,file:file},$ctx1,1)});
  79376. //>>excludeEnd("ctx");
  79377. }));
  79378. return self;
  79379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79380. }, function($ctx1) {$ctx1.fill(self,"respondFileNamed:to:",{aFilename:aFilename,aResponse:aResponse,type:type,filename:filename},$globals.FileServer)});
  79381. //>>excludeEnd("ctx");
  79382. },
  79383. //>>excludeStart("ide", pragmas.excludeIdeData);
  79384. args: ["aFilename", "aResponse"],
  79385. 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]]",
  79386. referencedClasses: [],
  79387. //>>excludeEnd("ide");
  79388. messageSends: ["readFile:do:", "ifTrue:ifFalse:", "notNil", "log:", ",", "respondNotFoundTo:", "mimeTypeFor:", "class", "ifTrue:", "=", "writeHead:options:", "write:encoding:", "end"]
  79389. }),
  79390. $globals.FileServer);
  79391. $core.addMethod(
  79392. $core.method({
  79393. selector: "respondInternalErrorTo:",
  79394. protocol: 'request handling',
  79395. fn: function (aResponse){
  79396. var self=this;
  79397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79398. return $core.withContext(function($ctx1) {
  79399. //>>excludeEnd("ctx");
  79400. var $1;
  79401. $recv(aResponse)._writeHead_options_((500),$globals.HashedCollection._newFromPairs_(["Content-Type","text/plain"]));
  79402. $recv(aResponse)._write_("500 Internal server error");
  79403. $1=$recv(aResponse)._end();
  79404. return self;
  79405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79406. }, function($ctx1) {$ctx1.fill(self,"respondInternalErrorTo:",{aResponse:aResponse},$globals.FileServer)});
  79407. //>>excludeEnd("ctx");
  79408. },
  79409. //>>excludeStart("ide", pragmas.excludeIdeData);
  79410. args: ["aResponse"],
  79411. source: "respondInternalErrorTo: aResponse\x0a\x09aResponse \x0a\x09\x09writeHead: 500 options: #{'Content-Type' -> 'text/plain'};\x0a\x09\x09write: '500 Internal server error';\x0a\x09\x09end",
  79412. referencedClasses: [],
  79413. //>>excludeEnd("ide");
  79414. messageSends: ["writeHead:options:", "write:", "end"]
  79415. }),
  79416. $globals.FileServer);
  79417. $core.addMethod(
  79418. $core.method({
  79419. selector: "respondNotCreatedTo:",
  79420. protocol: 'request handling',
  79421. fn: function (aResponse){
  79422. var self=this;
  79423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79424. return $core.withContext(function($ctx1) {
  79425. //>>excludeEnd("ctx");
  79426. var $1;
  79427. $recv(aResponse)._writeHead_options_((400),$globals.HashedCollection._newFromPairs_(["Content-Type","text/plain"]));
  79428. $recv(aResponse)._write_("File could not be created. Did you forget to create the src directory on the server?");
  79429. $1=$recv(aResponse)._end();
  79430. return self;
  79431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79432. }, function($ctx1) {$ctx1.fill(self,"respondNotCreatedTo:",{aResponse:aResponse},$globals.FileServer)});
  79433. //>>excludeEnd("ctx");
  79434. },
  79435. //>>excludeStart("ide", pragmas.excludeIdeData);
  79436. args: ["aResponse"],
  79437. 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.",
  79438. referencedClasses: [],
  79439. //>>excludeEnd("ide");
  79440. messageSends: ["writeHead:options:", "write:", "end"]
  79441. }),
  79442. $globals.FileServer);
  79443. $core.addMethod(
  79444. $core.method({
  79445. selector: "respondNotFoundTo:",
  79446. protocol: 'request handling',
  79447. fn: function (aResponse){
  79448. var self=this;
  79449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79450. return $core.withContext(function($ctx1) {
  79451. //>>excludeEnd("ctx");
  79452. var $2,$1,$3,$4;
  79453. $2=self._fallbackPage();
  79454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79455. $ctx1.sendIdx["fallbackPage"]=1;
  79456. //>>excludeEnd("ctx");
  79457. $1=$recv($2)._isNil();
  79458. if(!$core.assert($1)){
  79459. $3=self._respondFileNamed_to_(self._fallbackPage(),aResponse);
  79460. return $3;
  79461. };
  79462. $recv(aResponse)._writeHead_options_((404),$globals.HashedCollection._newFromPairs_(["Content-Type","text/html"]));
  79463. $recv(aResponse)._write_("<html><body><p>404 Not found</p>");
  79464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79465. $ctx1.sendIdx["write:"]=1;
  79466. //>>excludeEnd("ctx");
  79467. $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>");
  79468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79469. $ctx1.sendIdx["write:"]=2;
  79470. //>>excludeEnd("ctx");
  79471. $recv(aResponse)._write_("<li>create an index.html in the served directory.</li>");
  79472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79473. $ctx1.sendIdx["write:"]=3;
  79474. //>>excludeEnd("ctx");
  79475. $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>");
  79476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79477. $ctx1.sendIdx["write:"]=4;
  79478. //>>excludeEnd("ctx");
  79479. $recv(aResponse)._write_("<li>change the directory to be served with the \x22--base-path\x22 option.</li>");
  79480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79481. $ctx1.sendIdx["write:"]=5;
  79482. //>>excludeEnd("ctx");
  79483. $recv(aResponse)._write_("</ul></p></body></html>");
  79484. $4=$recv(aResponse)._end();
  79485. return self;
  79486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79487. }, function($ctx1) {$ctx1.fill(self,"respondNotFoundTo:",{aResponse:aResponse},$globals.FileServer)});
  79488. //>>excludeEnd("ctx");
  79489. },
  79490. //>>excludeStart("ide", pragmas.excludeIdeData);
  79491. args: ["aResponse"],
  79492. 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",
  79493. referencedClasses: [],
  79494. //>>excludeEnd("ide");
  79495. messageSends: ["ifFalse:", "isNil", "fallbackPage", "respondFileNamed:to:", "writeHead:options:", "write:", "end"]
  79496. }),
  79497. $globals.FileServer);
  79498. $core.addMethod(
  79499. $core.method({
  79500. selector: "respondOKTo:",
  79501. protocol: 'request handling',
  79502. fn: function (aResponse){
  79503. var self=this;
  79504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79505. return $core.withContext(function($ctx1) {
  79506. //>>excludeEnd("ctx");
  79507. var $1;
  79508. $recv(aResponse)._writeHead_options_((200),$globals.HashedCollection._newFromPairs_(["Content-Type","text/plain","Access-Control-Allow-Origin","*"]));
  79509. $1=$recv(aResponse)._end();
  79510. return self;
  79511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79512. }, function($ctx1) {$ctx1.fill(self,"respondOKTo:",{aResponse:aResponse},$globals.FileServer)});
  79513. //>>excludeEnd("ctx");
  79514. },
  79515. //>>excludeStart("ide", pragmas.excludeIdeData);
  79516. args: ["aResponse"],
  79517. source: "respondOKTo: aResponse\x0a\x09aResponse\x0a\x09\x09writeHead: 200 options: #{'Content-Type' -> 'text/plain'. 'Access-Control-Allow-Origin' -> '*'};\x0a\x09\x09end.",
  79518. referencedClasses: [],
  79519. //>>excludeEnd("ide");
  79520. messageSends: ["writeHead:options:", "end"]
  79521. }),
  79522. $globals.FileServer);
  79523. $core.addMethod(
  79524. $core.method({
  79525. selector: "respondRedirect:to:",
  79526. protocol: 'request handling',
  79527. fn: function (aString,aResponse){
  79528. var self=this;
  79529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79530. return $core.withContext(function($ctx1) {
  79531. //>>excludeEnd("ctx");
  79532. var $1;
  79533. $recv(aResponse)._writeHead_options_((303),$globals.HashedCollection._newFromPairs_(["Location",aString]));
  79534. $1=$recv(aResponse)._end();
  79535. return self;
  79536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79537. }, function($ctx1) {$ctx1.fill(self,"respondRedirect:to:",{aString:aString,aResponse:aResponse},$globals.FileServer)});
  79538. //>>excludeEnd("ctx");
  79539. },
  79540. //>>excludeStart("ide", pragmas.excludeIdeData);
  79541. args: ["aString", "aResponse"],
  79542. source: "respondRedirect: aString to: aResponse\x0a\x09aResponse\x0a\x09\x09writeHead: 303 options: #{'Location' -> aString};\x0a\x09\x09end.",
  79543. referencedClasses: [],
  79544. //>>excludeEnd("ide");
  79545. messageSends: ["writeHead:options:", "end"]
  79546. }),
  79547. $globals.FileServer);
  79548. $core.addMethod(
  79549. $core.method({
  79550. selector: "start",
  79551. protocol: 'starting',
  79552. fn: function (){
  79553. var self=this;
  79554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79555. return $core.withContext(function($ctx1) {
  79556. //>>excludeEnd("ctx");
  79557. var $1,$2,$3,$4,$8,$7,$6,$10,$9,$5,$11;
  79558. self._checkDirectoryLayout();
  79559. $1=$recv(self["@http"])._createServer_((function(request,response){
  79560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79561. return $core.withContext(function($ctx2) {
  79562. //>>excludeEnd("ctx");
  79563. return self._handleRequest_respondTo_(request,response);
  79564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79565. }, function($ctx2) {$ctx2.fillBlock({request:request,response:response},$ctx1,1)});
  79566. //>>excludeEnd("ctx");
  79567. }));
  79568. $recv($1)._on_do_("error",(function(error){
  79569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79570. return $core.withContext(function($ctx2) {
  79571. //>>excludeEnd("ctx");
  79572. $2=console;
  79573. $3="Error starting server: ".__comma(error);
  79574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79575. $ctx2.sendIdx[","]=1;
  79576. //>>excludeEnd("ctx");
  79577. return $recv($2)._log_($3);
  79578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79579. $ctx2.sendIdx["log:"]=1;
  79580. //>>excludeEnd("ctx");
  79581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79582. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  79583. //>>excludeEnd("ctx");
  79584. }));
  79585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79586. $ctx1.sendIdx["on:do:"]=1;
  79587. //>>excludeEnd("ctx");
  79588. $recv($1)._on_do_("listening",(function(){
  79589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79590. return $core.withContext(function($ctx2) {
  79591. //>>excludeEnd("ctx");
  79592. $4=console;
  79593. $8=self._host();
  79594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79595. $ctx2.sendIdx["host"]=1;
  79596. //>>excludeEnd("ctx");
  79597. $7="Starting file server on http://".__comma($8);
  79598. $6=$recv($7).__comma(":");
  79599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79600. $ctx2.sendIdx[","]=3;
  79601. //>>excludeEnd("ctx");
  79602. $10=self._port();
  79603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79604. $ctx2.sendIdx["port"]=1;
  79605. //>>excludeEnd("ctx");
  79606. $9=$recv($10)._asString();
  79607. $5=$recv($6).__comma($9);
  79608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79609. $ctx2.sendIdx[","]=2;
  79610. //>>excludeEnd("ctx");
  79611. return $recv($4)._log_($5);
  79612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79613. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  79614. //>>excludeEnd("ctx");
  79615. }));
  79616. $11=$recv($1)._listen_host_(self._port(),self._host());
  79617. return self;
  79618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79619. }, function($ctx1) {$ctx1.fill(self,"start",{},$globals.FileServer)});
  79620. //>>excludeEnd("ctx");
  79621. },
  79622. //>>excludeStart("ide", pragmas.excludeIdeData);
  79623. args: [],
  79624. 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.",
  79625. referencedClasses: [],
  79626. //>>excludeEnd("ide");
  79627. messageSends: ["checkDirectoryLayout", "on:do:", "createServer:", "handleRequest:respondTo:", "log:", ",", "host", "asString", "port", "listen:host:"]
  79628. }),
  79629. $globals.FileServer);
  79630. $core.addMethod(
  79631. $core.method({
  79632. selector: "startOn:",
  79633. protocol: 'starting',
  79634. fn: function (aPort){
  79635. var self=this;
  79636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79637. return $core.withContext(function($ctx1) {
  79638. //>>excludeEnd("ctx");
  79639. self._port_(aPort);
  79640. self._start();
  79641. return self;
  79642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79643. }, function($ctx1) {$ctx1.fill(self,"startOn:",{aPort:aPort},$globals.FileServer)});
  79644. //>>excludeEnd("ctx");
  79645. },
  79646. //>>excludeStart("ide", pragmas.excludeIdeData);
  79647. args: ["aPort"],
  79648. source: "startOn: aPort\x0a\x09self port: aPort.\x0a\x09self start",
  79649. referencedClasses: [],
  79650. //>>excludeEnd("ide");
  79651. messageSends: ["port:", "start"]
  79652. }),
  79653. $globals.FileServer);
  79654. $core.addMethod(
  79655. $core.method({
  79656. selector: "username:",
  79657. protocol: 'accessing',
  79658. fn: function (aUsername){
  79659. var self=this;
  79660. self["@username"]=aUsername;
  79661. return self;
  79662. },
  79663. //>>excludeStart("ide", pragmas.excludeIdeData);
  79664. args: ["aUsername"],
  79665. source: "username: aUsername\x0a\x09username := aUsername.",
  79666. referencedClasses: [],
  79667. //>>excludeEnd("ide");
  79668. messageSends: []
  79669. }),
  79670. $globals.FileServer);
  79671. $core.addMethod(
  79672. $core.method({
  79673. selector: "validateBasePath",
  79674. protocol: 'private',
  79675. fn: function (){
  79676. var self=this;
  79677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79678. return $core.withContext(function($ctx1) {
  79679. //>>excludeEnd("ctx");
  79680. var $1,$2,$3,$4,$7,$6,$5,$8,$9,$receiver;
  79681. $1=self["@fs"];
  79682. $2=self._basePath();
  79683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79684. $ctx1.sendIdx["basePath"]=1;
  79685. //>>excludeEnd("ctx");
  79686. $recv($1)._stat_then_($2,(function(err,stat){
  79687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79688. return $core.withContext(function($ctx2) {
  79689. //>>excludeEnd("ctx");
  79690. if(($receiver = err) == null || $receiver.isNil){
  79691. $3=$recv(stat)._isDirectory();
  79692. if(!$core.assert($3)){
  79693. $4=console;
  79694. $7=self._basePath();
  79695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79696. $ctx2.sendIdx["basePath"]=2;
  79697. //>>excludeEnd("ctx");
  79698. $6="Warning: --base-path parameter ".__comma($7);
  79699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79700. $ctx2.sendIdx[","]=2;
  79701. //>>excludeEnd("ctx");
  79702. $5=$recv($6).__comma(" is not a directory.");
  79703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79704. $ctx2.sendIdx[","]=1;
  79705. //>>excludeEnd("ctx");
  79706. return $recv($4)._warn_($5);
  79707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79708. $ctx2.sendIdx["warn:"]=1;
  79709. //>>excludeEnd("ctx");
  79710. };
  79711. } else {
  79712. $8=console;
  79713. $9=$recv("Warning: path at --base-path parameter ".__comma(self._basePath())).__comma(" does not exist.");
  79714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79715. $ctx2.sendIdx[","]=3;
  79716. //>>excludeEnd("ctx");
  79717. return $recv($8)._warn_($9);
  79718. };
  79719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79720. }, function($ctx2) {$ctx2.fillBlock({err:err,stat:stat},$ctx1,1)});
  79721. //>>excludeEnd("ctx");
  79722. }));
  79723. return self;
  79724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79725. }, function($ctx1) {$ctx1.fill(self,"validateBasePath",{},$globals.FileServer)});
  79726. //>>excludeEnd("ctx");
  79727. },
  79728. //>>excludeStart("ide", pragmas.excludeIdeData);
  79729. args: [],
  79730. 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.' ]].",
  79731. referencedClasses: [],
  79732. //>>excludeEnd("ide");
  79733. messageSends: ["stat:then:", "basePath", "ifNil:ifNotNil:", "ifFalse:", "isDirectory", "warn:", ","]
  79734. }),
  79735. $globals.FileServer);
  79736. $core.addMethod(
  79737. $core.method({
  79738. selector: "withBasePath:",
  79739. protocol: 'private',
  79740. fn: function (aBaseRelativePath){
  79741. var self=this;
  79742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79743. return $core.withContext(function($ctx1) {
  79744. //>>excludeEnd("ctx");
  79745. var $1;
  79746. $1=$recv(self["@path"])._join_with_(self._basePath(),aBaseRelativePath);
  79747. return $1;
  79748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79749. }, function($ctx1) {$ctx1.fill(self,"withBasePath:",{aBaseRelativePath:aBaseRelativePath},$globals.FileServer)});
  79750. //>>excludeEnd("ctx");
  79751. },
  79752. //>>excludeStart("ide", pragmas.excludeIdeData);
  79753. args: ["aBaseRelativePath"],
  79754. source: "withBasePath: aBaseRelativePath\x0a\x09\x22return a file path which is relative to the basePath.\x22\x0a\x09^ path join: self basePath with: aBaseRelativePath",
  79755. referencedClasses: [],
  79756. //>>excludeEnd("ide");
  79757. messageSends: ["join:with:", "basePath"]
  79758. }),
  79759. $globals.FileServer);
  79760. $core.addMethod(
  79761. $core.method({
  79762. selector: "writeData:toFileNamed:",
  79763. protocol: 'private',
  79764. fn: function (data,aFilename){
  79765. var self=this;
  79766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79767. return $core.withContext(function($ctx1) {
  79768. //>>excludeEnd("ctx");
  79769. $recv(console)._log_(aFilename);
  79770. return self;
  79771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79772. }, function($ctx1) {$ctx1.fill(self,"writeData:toFileNamed:",{data:data,aFilename:aFilename},$globals.FileServer)});
  79773. //>>excludeEnd("ctx");
  79774. },
  79775. //>>excludeStart("ide", pragmas.excludeIdeData);
  79776. args: ["data", "aFilename"],
  79777. source: "writeData: data toFileNamed: aFilename\x0a\x09console log: aFilename",
  79778. referencedClasses: [],
  79779. //>>excludeEnd("ide");
  79780. messageSends: ["log:"]
  79781. }),
  79782. $globals.FileServer);
  79783. $globals.FileServer.klass.iVarNames = ['mimeTypes'];
  79784. $core.addMethod(
  79785. $core.method({
  79786. selector: "commandLineSwitches",
  79787. protocol: 'accessing',
  79788. fn: function (){
  79789. var self=this;
  79790. var switches;
  79791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79792. return $core.withContext(function($ctx1) {
  79793. //>>excludeEnd("ctx");
  79794. var $1;
  79795. switches=$recv(self._methodsInProtocol_("accessing"))._collect_((function(each){
  79796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79797. return $core.withContext(function($ctx2) {
  79798. //>>excludeEnd("ctx");
  79799. return $recv(each)._selector();
  79800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79801. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  79802. //>>excludeEnd("ctx");
  79803. }));
  79804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79805. $ctx1.sendIdx["collect:"]=1;
  79806. //>>excludeEnd("ctx");
  79807. switches=$recv(switches)._select_((function(each){
  79808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79809. return $core.withContext(function($ctx2) {
  79810. //>>excludeEnd("ctx");
  79811. return $recv(each)._match_("^[^:]*:$");
  79812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79813. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  79814. //>>excludeEnd("ctx");
  79815. }));
  79816. switches=$recv(switches)._collect_((function(each){
  79817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79818. return $core.withContext(function($ctx2) {
  79819. //>>excludeEnd("ctx");
  79820. return $recv($recv($recv($recv(each)._allButLast())._replace_with_("([A-Z])","-$1"))._asLowercase())._replace_with_("^([a-z])","--$1");
  79821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79822. $ctx2.sendIdx["replace:with:"]=1;
  79823. //>>excludeEnd("ctx");
  79824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79825. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  79826. //>>excludeEnd("ctx");
  79827. }));
  79828. $1=switches;
  79829. return $1;
  79830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79831. }, function($ctx1) {$ctx1.fill(self,"commandLineSwitches",{switches:switches},$globals.FileServer.klass)});
  79832. //>>excludeEnd("ctx");
  79833. },
  79834. //>>excludeStart("ide", pragmas.excludeIdeData);
  79835. args: [],
  79836. 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",
  79837. referencedClasses: [],
  79838. //>>excludeEnd("ide");
  79839. messageSends: ["collect:", "methodsInProtocol:", "selector", "select:", "match:", "replace:with:", "asLowercase", "allButLast"]
  79840. }),
  79841. $globals.FileServer.klass);
  79842. $core.addMethod(
  79843. $core.method({
  79844. selector: "createServerWithArguments:",
  79845. protocol: 'initialization',
  79846. fn: function (options){
  79847. var self=this;
  79848. var server,popFront,front,optionName,optionValue,switches;
  79849. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  79850. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79851. return $core.withContext(function($ctx1) {
  79852. //>>excludeEnd("ctx");
  79853. var $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11;
  79854. var $early={};
  79855. try {
  79856. switches=self._commandLineSwitches();
  79857. server=self._new();
  79858. $recv(options)._ifEmpty_((function(){
  79859. $1=server;
  79860. throw $early=[$1];
  79861. }));
  79862. $2=$recv($recv(options)._size())._even();
  79863. if(!$core.assert($2)){
  79864. $recv(console)._log_("Using default parameters.");
  79865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79866. $ctx1.sendIdx["log:"]=1;
  79867. //>>excludeEnd("ctx");
  79868. $3=console;
  79869. $4="Wrong commandline options or not enough arguments for: ".__comma(options);
  79870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79871. $ctx1.sendIdx[","]=1;
  79872. //>>excludeEnd("ctx");
  79873. $recv($3)._log_($4);
  79874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79875. $ctx1.sendIdx["log:"]=2;
  79876. //>>excludeEnd("ctx");
  79877. $5=console;
  79878. $6="Use any of the following ones: ".__comma(switches);
  79879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79880. $ctx1.sendIdx[","]=2;
  79881. //>>excludeEnd("ctx");
  79882. $recv($5)._log_($6);
  79883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79884. $ctx1.sendIdx["log:"]=3;
  79885. //>>excludeEnd("ctx");
  79886. $7=server;
  79887. return $7;
  79888. };
  79889. popFront=(function(args){
  79890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79891. return $core.withContext(function($ctx2) {
  79892. //>>excludeEnd("ctx");
  79893. front=$recv(args)._first();
  79894. front;
  79895. $recv(args)._remove_(front);
  79896. return front;
  79897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79898. }, function($ctx2) {$ctx2.fillBlock({args:args},$ctx1,3)});
  79899. //>>excludeEnd("ctx");
  79900. });
  79901. $recv((function(){
  79902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79903. return $core.withContext(function($ctx2) {
  79904. //>>excludeEnd("ctx");
  79905. return $recv(options)._notEmpty();
  79906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79907. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  79908. //>>excludeEnd("ctx");
  79909. }))._whileTrue_((function(){
  79910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79911. return $core.withContext(function($ctx2) {
  79912. //>>excludeEnd("ctx");
  79913. optionName=$recv(popFront)._value_(options);
  79914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79915. $ctx2.sendIdx["value:"]=1;
  79916. //>>excludeEnd("ctx");
  79917. optionName;
  79918. optionValue=$recv(popFront)._value_(options);
  79919. optionValue;
  79920. $8=$recv(switches)._includes_(optionName);
  79921. if($core.assert($8)){
  79922. optionName=self._selectorForCommandLineSwitch_(optionName);
  79923. optionName;
  79924. return $recv(server)._perform_withArguments_(optionName,$recv($Array())._with_(optionValue));
  79925. } else {
  79926. $9=console;
  79927. $10=$recv(optionName).__comma(" is not a valid commandline option");
  79928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79929. $ctx2.sendIdx[","]=3;
  79930. //>>excludeEnd("ctx");
  79931. $recv($9)._log_($10);
  79932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79933. $ctx2.sendIdx["log:"]=4;
  79934. //>>excludeEnd("ctx");
  79935. return $recv(console)._log_("Use any of the following ones: ".__comma(switches));
  79936. };
  79937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79938. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  79939. //>>excludeEnd("ctx");
  79940. }));
  79941. $11=server;
  79942. return $11;
  79943. }
  79944. catch(e) {if(e===$early)return e[0]; throw e}
  79945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79946. }, function($ctx1) {$ctx1.fill(self,"createServerWithArguments:",{options:options,server:server,popFront:popFront,front:front,optionName:optionName,optionValue:optionValue,switches:switches},$globals.FileServer.klass)});
  79947. //>>excludeEnd("ctx");
  79948. },
  79949. //>>excludeStart("ide", pragmas.excludeIdeData);
  79950. args: ["options"],
  79951. 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.",
  79952. referencedClasses: ["Array"],
  79953. //>>excludeEnd("ide");
  79954. messageSends: ["commandLineSwitches", "new", "ifEmpty:", "ifFalse:", "even", "size", "log:", ",", "first", "remove:", "whileTrue:", "notEmpty", "value:", "ifTrue:ifFalse:", "includes:", "selectorForCommandLineSwitch:", "perform:withArguments:", "with:"]
  79955. }),
  79956. $globals.FileServer.klass);
  79957. $core.addMethod(
  79958. $core.method({
  79959. selector: "defaultBasePath",
  79960. protocol: 'accessing',
  79961. fn: function (){
  79962. var self=this;
  79963. return "./";
  79964. },
  79965. //>>excludeStart("ide", pragmas.excludeIdeData);
  79966. args: [],
  79967. source: "defaultBasePath\x0a\x09^ './'",
  79968. referencedClasses: [],
  79969. //>>excludeEnd("ide");
  79970. messageSends: []
  79971. }),
  79972. $globals.FileServer.klass);
  79973. $core.addMethod(
  79974. $core.method({
  79975. selector: "defaultHost",
  79976. protocol: 'accessing',
  79977. fn: function (){
  79978. var self=this;
  79979. return "127.0.0.1";
  79980. },
  79981. //>>excludeStart("ide", pragmas.excludeIdeData);
  79982. args: [],
  79983. source: "defaultHost\x0a\x09^ '127.0.0.1'",
  79984. referencedClasses: [],
  79985. //>>excludeEnd("ide");
  79986. messageSends: []
  79987. }),
  79988. $globals.FileServer.klass);
  79989. $core.addMethod(
  79990. $core.method({
  79991. selector: "defaultMimeTypes",
  79992. protocol: 'accessing',
  79993. fn: function (){
  79994. var self=this;
  79995. var $1;
  79996. $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"]);
  79997. return $1;
  79998. },
  79999. //>>excludeStart("ide", pragmas.excludeIdeData);
  80000. args: [],
  80001. 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}",
  80002. referencedClasses: [],
  80003. //>>excludeEnd("ide");
  80004. messageSends: []
  80005. }),
  80006. $globals.FileServer.klass);
  80007. $core.addMethod(
  80008. $core.method({
  80009. selector: "defaultPort",
  80010. protocol: 'accessing',
  80011. fn: function (){
  80012. var self=this;
  80013. return (4000);
  80014. },
  80015. //>>excludeStart("ide", pragmas.excludeIdeData);
  80016. args: [],
  80017. source: "defaultPort\x0a\x09^ 4000",
  80018. referencedClasses: [],
  80019. //>>excludeEnd("ide");
  80020. messageSends: []
  80021. }),
  80022. $globals.FileServer.klass);
  80023. $core.addMethod(
  80024. $core.method({
  80025. selector: "main",
  80026. protocol: 'initialization',
  80027. fn: function (){
  80028. var self=this;
  80029. var fileServer,args;
  80030. function $FileServer(){return $globals.FileServer||(typeof FileServer=="undefined"?nil:FileServer)}
  80031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80032. return $core.withContext(function($ctx1) {
  80033. //>>excludeEnd("ctx");
  80034. var $1,$2;
  80035. var $early={};
  80036. try {
  80037. args=$recv(process)._argv();
  80038. $recv(args)._removeFrom_to_((1),(3));
  80039. $recv(args)._detect_ifNone_((function(each){
  80040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80041. return $core.withContext(function($ctx2) {
  80042. //>>excludeEnd("ctx");
  80043. $1=$recv(each).__eq("--help");
  80044. if($core.assert($1)){
  80045. return $recv($FileServer())._printHelp();
  80046. };
  80047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80048. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  80049. //>>excludeEnd("ctx");
  80050. }),(function(){
  80051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80052. return $core.withContext(function($ctx2) {
  80053. //>>excludeEnd("ctx");
  80054. fileServer=$recv($FileServer())._createServerWithArguments_(args);
  80055. fileServer;
  80056. $2=$recv(fileServer)._start();
  80057. throw $early=[$2];
  80058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80059. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  80060. //>>excludeEnd("ctx");
  80061. }));
  80062. return self;
  80063. }
  80064. catch(e) {if(e===$early)return e[0]; throw e}
  80065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80066. }, function($ctx1) {$ctx1.fill(self,"main",{fileServer:fileServer,args:args},$globals.FileServer.klass)});
  80067. //>>excludeEnd("ctx");
  80068. },
  80069. //>>excludeStart("ide", pragmas.excludeIdeData);
  80070. args: [],
  80071. 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]",
  80072. referencedClasses: ["FileServer"],
  80073. //>>excludeEnd("ide");
  80074. messageSends: ["argv", "removeFrom:to:", "detect:ifNone:", "ifTrue:", "=", "printHelp", "createServerWithArguments:", "start"]
  80075. }),
  80076. $globals.FileServer.klass);
  80077. $core.addMethod(
  80078. $core.method({
  80079. selector: "mimeTypeFor:",
  80080. protocol: 'accessing',
  80081. fn: function (aString){
  80082. var self=this;
  80083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80084. return $core.withContext(function($ctx1) {
  80085. //>>excludeEnd("ctx");
  80086. var $1;
  80087. $1=$recv(self._mimeTypes())._at_ifAbsent_($recv(aString)._replace_with_(".*[\x5c.]",""),(function(){
  80088. return "text/plain";
  80089. }));
  80090. return $1;
  80091. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80092. }, function($ctx1) {$ctx1.fill(self,"mimeTypeFor:",{aString:aString},$globals.FileServer.klass)});
  80093. //>>excludeEnd("ctx");
  80094. },
  80095. //>>excludeStart("ide", pragmas.excludeIdeData);
  80096. args: ["aString"],
  80097. source: "mimeTypeFor: aString\x0a\x09^ self mimeTypes at: (aString replace: '.*[\x5c.]' with: '') ifAbsent: ['text/plain']",
  80098. referencedClasses: [],
  80099. //>>excludeEnd("ide");
  80100. messageSends: ["at:ifAbsent:", "mimeTypes", "replace:with:"]
  80101. }),
  80102. $globals.FileServer.klass);
  80103. $core.addMethod(
  80104. $core.method({
  80105. selector: "mimeTypes",
  80106. protocol: 'accessing',
  80107. fn: function (){
  80108. var self=this;
  80109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80110. return $core.withContext(function($ctx1) {
  80111. //>>excludeEnd("ctx");
  80112. var $2,$1,$receiver;
  80113. $2=self["@mimeTypes"];
  80114. if(($receiver = $2) == null || $receiver.isNil){
  80115. self["@mimeTypes"]=self._defaultMimeTypes();
  80116. $1=self["@mimeTypes"];
  80117. } else {
  80118. $1=$2;
  80119. };
  80120. return $1;
  80121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80122. }, function($ctx1) {$ctx1.fill(self,"mimeTypes",{},$globals.FileServer.klass)});
  80123. //>>excludeEnd("ctx");
  80124. },
  80125. //>>excludeStart("ide", pragmas.excludeIdeData);
  80126. args: [],
  80127. source: "mimeTypes\x0a\x09^ mimeTypes ifNil: [mimeTypes := self defaultMimeTypes]",
  80128. referencedClasses: [],
  80129. //>>excludeEnd("ide");
  80130. messageSends: ["ifNil:", "defaultMimeTypes"]
  80131. }),
  80132. $globals.FileServer.klass);
  80133. $core.addMethod(
  80134. $core.method({
  80135. selector: "printHelp",
  80136. protocol: 'accessing',
  80137. fn: function (){
  80138. var self=this;
  80139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80140. return $core.withContext(function($ctx1) {
  80141. //>>excludeEnd("ctx");
  80142. $recv(console)._log_("Available commandline options are:");
  80143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80144. $ctx1.sendIdx["log:"]=1;
  80145. //>>excludeEnd("ctx");
  80146. $recv(console)._log_("--help");
  80147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80148. $ctx1.sendIdx["log:"]=2;
  80149. //>>excludeEnd("ctx");
  80150. $recv(self._commandLineSwitches())._do_((function(each){
  80151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80152. return $core.withContext(function($ctx2) {
  80153. //>>excludeEnd("ctx");
  80154. return $recv(console)._log_($recv(each).__comma(" <parameter>"));
  80155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80156. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  80157. //>>excludeEnd("ctx");
  80158. }));
  80159. return self;
  80160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80161. }, function($ctx1) {$ctx1.fill(self,"printHelp",{},$globals.FileServer.klass)});
  80162. //>>excludeEnd("ctx");
  80163. },
  80164. //>>excludeStart("ide", pragmas.excludeIdeData);
  80165. args: [],
  80166. source: "printHelp\x0a\x09console log: 'Available commandline options are:'.\x0a\x09console log: '--help'.\x0a\x09self commandLineSwitches do: [ :each |\x0a\x09\x09console log: each, ' <parameter>']",
  80167. referencedClasses: [],
  80168. //>>excludeEnd("ide");
  80169. messageSends: ["log:", "do:", "commandLineSwitches", ","]
  80170. }),
  80171. $globals.FileServer.klass);
  80172. $core.addMethod(
  80173. $core.method({
  80174. selector: "selectorForCommandLineSwitch:",
  80175. protocol: 'accessing',
  80176. fn: function (aSwitch){
  80177. var self=this;
  80178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80179. return $core.withContext(function($ctx1) {
  80180. //>>excludeEnd("ctx");
  80181. var $2,$1;
  80182. $2=$recv($recv(aSwitch)._replace_with_("^--",""))._replace_with_("-[a-z]",(function(each){
  80183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80184. return $core.withContext(function($ctx2) {
  80185. //>>excludeEnd("ctx");
  80186. return $recv($recv(each)._second())._asUppercase();
  80187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80188. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  80189. //>>excludeEnd("ctx");
  80190. }));
  80191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80192. $ctx1.sendIdx["replace:with:"]=1;
  80193. //>>excludeEnd("ctx");
  80194. $1=$recv($2).__comma(":");
  80195. return $1;
  80196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80197. }, function($ctx1) {$ctx1.fill(self,"selectorForCommandLineSwitch:",{aSwitch:aSwitch},$globals.FileServer.klass)});
  80198. //>>excludeEnd("ctx");
  80199. },
  80200. //>>excludeStart("ide", pragmas.excludeIdeData);
  80201. args: ["aSwitch"],
  80202. 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 ]), ':'",
  80203. referencedClasses: [],
  80204. //>>excludeEnd("ide");
  80205. messageSends: [",", "replace:with:", "asUppercase", "second"]
  80206. }),
  80207. $globals.FileServer.klass);
  80208. $core.addClass('Initer', $globals.BaseFileManipulator, ['childProcess', 'nmPath'], 'AmberCli');
  80209. $core.addMethod(
  80210. $core.method({
  80211. selector: "bowerInstallThenDo:",
  80212. protocol: 'action',
  80213. fn: function (aBlock){
  80214. var self=this;
  80215. var child;
  80216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80217. return $core.withContext(function($ctx1) {
  80218. //>>excludeEnd("ctx");
  80219. var $1,$4,$3,$2;
  80220. child=$recv(self["@childProcess"])._fork_args_(self._npmScriptForModule_named_("bower","bower"),["install"]);
  80221. $1=child;
  80222. $recv($1)._on_do_("error",aBlock);
  80223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80224. $ctx1.sendIdx["on:do:"]=1;
  80225. //>>excludeEnd("ctx");
  80226. $2=$recv($1)._on_do_("close",(function(code){
  80227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80228. return $core.withContext(function($ctx2) {
  80229. //>>excludeEnd("ctx");
  80230. $4=$recv(code).__eq((0));
  80231. if($core.assert($4)){
  80232. $3=nil;
  80233. } else {
  80234. $3=code;
  80235. };
  80236. return $recv(aBlock)._value_($3);
  80237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80238. }, function($ctx2) {$ctx2.fillBlock({code:code},$ctx1,1)});
  80239. //>>excludeEnd("ctx");
  80240. }));
  80241. return self;
  80242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80243. }, function($ctx1) {$ctx1.fill(self,"bowerInstallThenDo:",{aBlock:aBlock,child:child},$globals.Initer)});
  80244. //>>excludeEnd("ctx");
  80245. },
  80246. //>>excludeStart("ide", pragmas.excludeIdeData);
  80247. args: ["aBlock"],
  80248. 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 ]) ]",
  80249. referencedClasses: [],
  80250. //>>excludeEnd("ide");
  80251. messageSends: ["fork:args:", "npmScriptForModule:named:", "on:do:", "value:", "ifTrue:ifFalse:", "="]
  80252. }),
  80253. $globals.Initer);
  80254. $core.addMethod(
  80255. $core.method({
  80256. selector: "finishMessage",
  80257. protocol: 'action',
  80258. fn: function (){
  80259. var self=this;
  80260. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  80261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80262. return $core.withContext(function($ctx1) {
  80263. //>>excludeEnd("ctx");
  80264. $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()));
  80265. $recv((function(){
  80266. }))._valueWithTimeout_((600));
  80267. return self;
  80268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80269. }, function($ctx1) {$ctx1.fill(self,"finishMessage",{},$globals.Initer)});
  80270. //>>excludeEnd("ctx");
  80271. },
  80272. //>>excludeStart("ide", pragmas.excludeIdeData);
  80273. args: [],
  80274. 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",
  80275. referencedClasses: ["String"],
  80276. //>>excludeEnd("ide");
  80277. messageSends: ["log:", "join:", "lf", "valueWithTimeout:"]
  80278. }),
  80279. $globals.Initer);
  80280. $core.addMethod(
  80281. $core.method({
  80282. selector: "gruntInitThenDo:",
  80283. protocol: 'action',
  80284. fn: function (aBlock){
  80285. var self=this;
  80286. var child,sanitizedTemplatePath;
  80287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80288. return $core.withContext(function($ctx1) {
  80289. //>>excludeEnd("ctx");
  80290. var $1,$4,$3,$2;
  80291. sanitizedTemplatePath=$recv($recv($recv(self["@path"])._join_with_(self["@nmPath"],"grunt-init-amber"))._replace_with_("\x5c\x5c","\x5c\x5c"))._replace_with_(":","\x5c:");
  80292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80293. $ctx1.sendIdx["replace:with:"]=1;
  80294. //>>excludeEnd("ctx");
  80295. child=$recv(self["@childProcess"])._fork_args_(self._npmScriptForModule_named_("grunt-init","grunt-init"),[sanitizedTemplatePath]);
  80296. $1=child;
  80297. $recv($1)._on_do_("error",aBlock);
  80298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80299. $ctx1.sendIdx["on:do:"]=1;
  80300. //>>excludeEnd("ctx");
  80301. $2=$recv($1)._on_do_("close",(function(code){
  80302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80303. return $core.withContext(function($ctx2) {
  80304. //>>excludeEnd("ctx");
  80305. $4=$recv(code).__eq((0));
  80306. if($core.assert($4)){
  80307. $3=nil;
  80308. } else {
  80309. $3=code;
  80310. };
  80311. return $recv(aBlock)._value_($3);
  80312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80313. }, function($ctx2) {$ctx2.fillBlock({code:code},$ctx1,1)});
  80314. //>>excludeEnd("ctx");
  80315. }));
  80316. return self;
  80317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80318. }, function($ctx1) {$ctx1.fill(self,"gruntInitThenDo:",{aBlock:aBlock,child:child,sanitizedTemplatePath:sanitizedTemplatePath},$globals.Initer)});
  80319. //>>excludeEnd("ctx");
  80320. },
  80321. //>>excludeStart("ide", pragmas.excludeIdeData);
  80322. args: ["aBlock"],
  80323. 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 ]) ]",
  80324. referencedClasses: [],
  80325. //>>excludeEnd("ide");
  80326. messageSends: ["replace:with:", "join:with:", "fork:args:", "npmScriptForModule:named:", "on:do:", "value:", "ifTrue:ifFalse:", "="]
  80327. }),
  80328. $globals.Initer);
  80329. $core.addMethod(
  80330. $core.method({
  80331. selector: "gruntThenDo:",
  80332. protocol: 'action',
  80333. fn: function (aBlock){
  80334. var self=this;
  80335. var child;
  80336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80337. return $core.withContext(function($ctx1) {
  80338. //>>excludeEnd("ctx");
  80339. var $1,$4,$3,$2;
  80340. child=$recv(self["@childProcess"])._fork_args_(self._npmScriptForModule_named_("grunt-cli","grunt"),["default", "devel"]);
  80341. $1=child;
  80342. $recv($1)._on_do_("error",aBlock);
  80343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80344. $ctx1.sendIdx["on:do:"]=1;
  80345. //>>excludeEnd("ctx");
  80346. $2=$recv($1)._on_do_("close",(function(code){
  80347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80348. return $core.withContext(function($ctx2) {
  80349. //>>excludeEnd("ctx");
  80350. $4=$recv(code).__eq((0));
  80351. if($core.assert($4)){
  80352. $3=nil;
  80353. } else {
  80354. $3=code;
  80355. };
  80356. return $recv(aBlock)._value_($3);
  80357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80358. }, function($ctx2) {$ctx2.fillBlock({code:code},$ctx1,1)});
  80359. //>>excludeEnd("ctx");
  80360. }));
  80361. return self;
  80362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80363. }, function($ctx1) {$ctx1.fill(self,"gruntThenDo:",{aBlock:aBlock,child:child},$globals.Initer)});
  80364. //>>excludeEnd("ctx");
  80365. },
  80366. //>>excludeStart("ide", pragmas.excludeIdeData);
  80367. args: ["aBlock"],
  80368. 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 ]) ]",
  80369. referencedClasses: [],
  80370. //>>excludeEnd("ide");
  80371. messageSends: ["fork:args:", "npmScriptForModule:named:", "on:do:", "value:", "ifTrue:ifFalse:", "="]
  80372. }),
  80373. $globals.Initer);
  80374. $core.addMethod(
  80375. $core.method({
  80376. selector: "initialize",
  80377. protocol: 'initialization',
  80378. fn: function (){
  80379. var self=this;
  80380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80381. return $core.withContext(function($ctx1) {
  80382. //>>excludeEnd("ctx");
  80383. (
  80384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80385. $ctx1.supercall = true,
  80386. //>>excludeEnd("ctx");
  80387. $globals.Initer.superclass.fn.prototype._initialize.apply($recv(self), []));
  80388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80389. $ctx1.supercall = false;
  80390. //>>excludeEnd("ctx");;
  80391. self["@childProcess"]=$recv(require)._value_("child_process");
  80392. self["@nmPath"]=$recv(self["@path"])._join_with_(self._rootDirname(),"node_modules");
  80393. return self;
  80394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80395. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Initer)});
  80396. //>>excludeEnd("ctx");
  80397. },
  80398. //>>excludeStart("ide", pragmas.excludeIdeData);
  80399. args: [],
  80400. source: "initialize\x0a\x09super initialize.\x0a\x09childProcess := require value: 'child_process'.\x0a\x09nmPath := path join: self rootDirname with: 'node_modules'",
  80401. referencedClasses: [],
  80402. //>>excludeEnd("ide");
  80403. messageSends: ["initialize", "value:", "join:with:", "rootDirname"]
  80404. }),
  80405. $globals.Initer);
  80406. $core.addMethod(
  80407. $core.method({
  80408. selector: "npmInstallThenDo:",
  80409. protocol: 'action',
  80410. fn: function (aBlock){
  80411. var self=this;
  80412. var child;
  80413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80414. return $core.withContext(function($ctx1) {
  80415. //>>excludeEnd("ctx");
  80416. var $1;
  80417. child=$recv(self["@childProcess"])._exec_thenDo_("npm install",aBlock);
  80418. $1=$recv(child)._stdout();
  80419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80420. $ctx1.sendIdx["stdout"]=1;
  80421. //>>excludeEnd("ctx");
  80422. $recv($1)._pipe_options_($recv(process)._stdout(),$globals.HashedCollection._newFromPairs_(["end",false]));
  80423. return self;
  80424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80425. }, function($ctx1) {$ctx1.fill(self,"npmInstallThenDo:",{aBlock:aBlock,child:child},$globals.Initer)});
  80426. //>>excludeEnd("ctx");
  80427. },
  80428. //>>excludeStart("ide", pragmas.excludeIdeData);
  80429. args: ["aBlock"],
  80430. 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 }",
  80431. referencedClasses: [],
  80432. //>>excludeEnd("ide");
  80433. messageSends: ["exec:thenDo:", "pipe:options:", "stdout"]
  80434. }),
  80435. $globals.Initer);
  80436. $core.addMethod(
  80437. $core.method({
  80438. selector: "npmScriptForModule:named:",
  80439. protocol: 'npm',
  80440. fn: function (aString,anotherString){
  80441. var self=this;
  80442. var modulePath,packageJson,binSection,scriptPath;
  80443. function $JSObjectProxy(){return $globals.JSObjectProxy||(typeof JSObjectProxy=="undefined"?nil:JSObjectProxy)}
  80444. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  80445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80446. return $core.withContext(function($ctx1) {
  80447. //>>excludeEnd("ctx");
  80448. var $1,$3,$4,$2,$5,$6;
  80449. $1=self["@path"];
  80450. $3=$recv($JSObjectProxy())._on_(require);
  80451. $4=$recv(aString).__comma("/package.json");
  80452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80453. $ctx1.sendIdx[","]=1;
  80454. //>>excludeEnd("ctx");
  80455. $2=$recv($3)._resolve_($4);
  80456. modulePath=$recv($1)._dirname_($2);
  80457. packageJson=$recv($Smalltalk())._readJSObject_($recv(require)._value_($recv(aString).__comma("/package.json")));
  80458. binSection=$recv(packageJson)._at_("bin");
  80459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80460. $ctx1.sendIdx["at:"]=1;
  80461. //>>excludeEnd("ctx");
  80462. $5=$recv(binSection)._isString();
  80463. if($core.assert($5)){
  80464. scriptPath=binSection;
  80465. } else {
  80466. scriptPath=$recv(binSection)._at_(anotherString);
  80467. };
  80468. $6=$recv(self["@path"])._join_with_(modulePath,scriptPath);
  80469. return $6;
  80470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80471. }, function($ctx1) {$ctx1.fill(self,"npmScriptForModule:named:",{aString:aString,anotherString:anotherString,modulePath:modulePath,packageJson:packageJson,binSection:binSection,scriptPath:scriptPath},$globals.Initer)});
  80472. //>>excludeEnd("ctx");
  80473. },
  80474. //>>excludeStart("ide", pragmas.excludeIdeData);
  80475. args: ["aString", "anotherString"],
  80476. 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",
  80477. referencedClasses: ["JSObjectProxy", "Smalltalk"],
  80478. //>>excludeEnd("ide");
  80479. messageSends: ["dirname:", "resolve:", "on:", ",", "readJSObject:", "value:", "at:", "ifTrue:ifFalse:", "isString", "join:with:"]
  80480. }),
  80481. $globals.Initer);
  80482. $core.addMethod(
  80483. $core.method({
  80484. selector: "start",
  80485. protocol: 'action',
  80486. fn: function (){
  80487. var self=this;
  80488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80489. return $core.withContext(function($ctx1) {
  80490. //>>excludeEnd("ctx");
  80491. var $1,$2,$3,$4,$5,$6,$7,$8,$receiver;
  80492. self._gruntInitThenDo_((function(error){
  80493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80494. return $core.withContext(function($ctx2) {
  80495. //>>excludeEnd("ctx");
  80496. if(($receiver = error) == null || $receiver.isNil){
  80497. return self._bowerInstallThenDo_((function(error2){
  80498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80499. return $core.withContext(function($ctx3) {
  80500. //>>excludeEnd("ctx");
  80501. if(($receiver = error2) == null || $receiver.isNil){
  80502. return self._npmInstallThenDo_((function(error3){
  80503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80504. return $core.withContext(function($ctx4) {
  80505. //>>excludeEnd("ctx");
  80506. if(($receiver = error3) == null || $receiver.isNil){
  80507. return self._gruntThenDo_((function(error4){
  80508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80509. return $core.withContext(function($ctx5) {
  80510. //>>excludeEnd("ctx");
  80511. if(($receiver = error4) == null || $receiver.isNil){
  80512. self._finishMessage();
  80513. return $recv(process)._exit();
  80514. } else {
  80515. $7=console;
  80516. $recv($7)._log_("grunt exec error:");
  80517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80518. $ctx5.sendIdx["log:"]=7;
  80519. //>>excludeEnd("ctx");
  80520. $8=$recv($7)._log_(error4);
  80521. $8;
  80522. return $recv(process)._exit_((104));
  80523. };
  80524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80525. }, function($ctx5) {$ctx5.fillBlock({error4:error4},$ctx4,10)});
  80526. //>>excludeEnd("ctx");
  80527. }));
  80528. } else {
  80529. $5=console;
  80530. $recv($5)._log_("npm install exec error:");
  80531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80532. $ctx4.sendIdx["log:"]=5;
  80533. //>>excludeEnd("ctx");
  80534. $6=$recv($5)._log_(error3);
  80535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80536. $ctx4.sendIdx["log:"]=6;
  80537. //>>excludeEnd("ctx");
  80538. $6;
  80539. return $recv(process)._exit_((103));
  80540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80541. $ctx4.sendIdx["exit:"]=3;
  80542. //>>excludeEnd("ctx");
  80543. };
  80544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80545. }, function($ctx4) {$ctx4.fillBlock({error3:error3},$ctx3,7)});
  80546. //>>excludeEnd("ctx");
  80547. }));
  80548. } else {
  80549. $3=console;
  80550. $recv($3)._log_("bower install exec error:");
  80551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80552. $ctx3.sendIdx["log:"]=3;
  80553. //>>excludeEnd("ctx");
  80554. $4=$recv($3)._log_(error2);
  80555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80556. $ctx3.sendIdx["log:"]=4;
  80557. //>>excludeEnd("ctx");
  80558. $4;
  80559. return $recv(process)._exit_((102));
  80560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80561. $ctx3.sendIdx["exit:"]=2;
  80562. //>>excludeEnd("ctx");
  80563. };
  80564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80565. }, function($ctx3) {$ctx3.fillBlock({error2:error2},$ctx2,4)});
  80566. //>>excludeEnd("ctx");
  80567. }));
  80568. } else {
  80569. $1=console;
  80570. $recv($1)._log_("grunt-init exec error:");
  80571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80572. $ctx2.sendIdx["log:"]=1;
  80573. //>>excludeEnd("ctx");
  80574. $2=$recv($1)._log_(error);
  80575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80576. $ctx2.sendIdx["log:"]=2;
  80577. //>>excludeEnd("ctx");
  80578. $2;
  80579. return $recv(process)._exit_((101));
  80580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80581. $ctx2.sendIdx["exit:"]=1;
  80582. //>>excludeEnd("ctx");
  80583. };
  80584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80585. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,1)});
  80586. //>>excludeEnd("ctx");
  80587. }));
  80588. return self;
  80589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80590. }, function($ctx1) {$ctx1.fill(self,"start",{},$globals.Initer)});
  80591. //>>excludeEnd("ctx");
  80592. },
  80593. //>>excludeStart("ide", pragmas.excludeIdeData);
  80594. args: [],
  80595. 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 ]]]]]]]]",
  80596. referencedClasses: [],
  80597. //>>excludeEnd("ide");
  80598. messageSends: ["gruntInitThenDo:", "ifNotNil:ifNil:", "log:", "exit:", "bowerInstallThenDo:", "npmInstallThenDo:", "gruntThenDo:", "finishMessage", "exit"]
  80599. }),
  80600. $globals.Initer);
  80601. $core.addClass('Repl', $globals.Object, ['readline', 'interface', 'util', 'session', 'resultCount', 'commands'], 'AmberCli');
  80602. //>>excludeStart("ide", pragmas.excludeIdeData);
  80603. $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.";
  80604. //>>excludeEnd("ide");
  80605. $core.addMethod(
  80606. $core.method({
  80607. selector: "addVariableNamed:to:",
  80608. protocol: 'private',
  80609. fn: function (aString,anObject){
  80610. var self=this;
  80611. var newClass,newObject;
  80612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80613. return $core.withContext(function($ctx1) {
  80614. //>>excludeEnd("ctx");
  80615. var $1;
  80616. newClass=self._subclass_withVariable_($recv(anObject)._class(),aString);
  80617. self._encapsulateVariable_withValue_in_(aString,anObject,newClass);
  80618. newObject=$recv(newClass)._new();
  80619. self._setPreviousVariablesFor_from_(newObject,anObject);
  80620. $1=newObject;
  80621. return $1;
  80622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80623. }, function($ctx1) {$ctx1.fill(self,"addVariableNamed:to:",{aString:aString,anObject:anObject,newClass:newClass,newObject:newObject},$globals.Repl)});
  80624. //>>excludeEnd("ctx");
  80625. },
  80626. //>>excludeStart("ide", pragmas.excludeIdeData);
  80627. args: ["aString", "anObject"],
  80628. 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",
  80629. referencedClasses: [],
  80630. //>>excludeEnd("ide");
  80631. messageSends: ["subclass:withVariable:", "class", "encapsulateVariable:withValue:in:", "new", "setPreviousVariablesFor:from:"]
  80632. }),
  80633. $globals.Repl);
  80634. $core.addMethod(
  80635. $core.method({
  80636. selector: "assignNewVariable:do:",
  80637. protocol: 'private',
  80638. fn: function (buffer,aBlock){
  80639. var self=this;
  80640. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  80641. function $ConsoleErrorHandler(){return $globals.ConsoleErrorHandler||(typeof ConsoleErrorHandler=="undefined"?nil:ConsoleErrorHandler)}
  80642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80643. return $core.withContext(function($ctx1) {
  80644. //>>excludeEnd("ctx");
  80645. var $3,$4,$2,$1,$receiver;
  80646. $1=self._parseAssignment_do_(buffer,(function(name,expr){
  80647. var varName,value;
  80648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80649. return $core.withContext(function($ctx2) {
  80650. //>>excludeEnd("ctx");
  80651. if(($receiver = name) == null || $receiver.isNil){
  80652. varName=self._nextResultName();
  80653. } else {
  80654. varName=name;
  80655. };
  80656. varName;
  80657. self["@session"]=self._addVariableNamed_to_(varName,self["@session"]);
  80658. self["@session"];
  80659. $recv((function(){
  80660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80661. return $core.withContext(function($ctx3) {
  80662. //>>excludeEnd("ctx");
  80663. $3=$recv(varName).__comma(" := ");
  80664. if(($receiver = expr) == null || $receiver.isNil){
  80665. $4=buffer;
  80666. } else {
  80667. $4=expr;
  80668. };
  80669. $2=$recv($3).__comma($4);
  80670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80671. $ctx3.sendIdx[","]=1;
  80672. //>>excludeEnd("ctx");
  80673. value=self._eval_on_($2,self["@session"]);
  80674. return value;
  80675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80676. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  80677. //>>excludeEnd("ctx");
  80678. }))._on_do_($Error(),(function(e){
  80679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80680. return $core.withContext(function($ctx3) {
  80681. //>>excludeEnd("ctx");
  80682. $recv($recv($ConsoleErrorHandler())._new())._logError_(e);
  80683. value=nil;
  80684. return value;
  80685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80686. }, function($ctx3) {$ctx3.fillBlock({e:e},$ctx2,5)});
  80687. //>>excludeEnd("ctx");
  80688. }));
  80689. return $recv(aBlock)._value_value_(varName,value);
  80690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80691. }, function($ctx2) {$ctx2.fillBlock({name:name,expr:expr,varName:varName,value:value},$ctx1,1)});
  80692. //>>excludeEnd("ctx");
  80693. }));
  80694. return $1;
  80695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80696. }, function($ctx1) {$ctx1.fill(self,"assignNewVariable:do:",{buffer:buffer,aBlock:aBlock},$globals.Repl)});
  80697. //>>excludeEnd("ctx");
  80698. },
  80699. //>>excludeStart("ide", pragmas.excludeIdeData);
  80700. args: ["buffer", "aBlock"],
  80701. 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]",
  80702. referencedClasses: ["Error", "ConsoleErrorHandler"],
  80703. //>>excludeEnd("ide");
  80704. messageSends: ["parseAssignment:do:", "ifNil:", "nextResultName", "addVariableNamed:to:", "on:do:", "eval:on:", ",", "logError:", "new", "value:value:"]
  80705. }),
  80706. $globals.Repl);
  80707. $core.addMethod(
  80708. $core.method({
  80709. selector: "clearScreen",
  80710. protocol: 'actions',
  80711. fn: function (){
  80712. var self=this;
  80713. var esc,cls;
  80714. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  80715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80716. return $core.withContext(function($ctx1) {
  80717. //>>excludeEnd("ctx");
  80718. var $1;
  80719. esc=$recv($String())._fromCharCode_((27));
  80720. $1=$recv($recv(esc).__comma("[2J")).__comma(esc);
  80721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80722. $ctx1.sendIdx[","]=2;
  80723. //>>excludeEnd("ctx");
  80724. cls=$recv($1).__comma("[0;0f");
  80725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80726. $ctx1.sendIdx[","]=1;
  80727. //>>excludeEnd("ctx");
  80728. $recv($recv(process)._stdout())._write_(cls);
  80729. $recv(self["@interface"])._prompt();
  80730. return self;
  80731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80732. }, function($ctx1) {$ctx1.fill(self,"clearScreen",{esc:esc,cls:cls},$globals.Repl)});
  80733. //>>excludeEnd("ctx");
  80734. },
  80735. //>>excludeStart("ide", pragmas.excludeIdeData);
  80736. args: [],
  80737. 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",
  80738. referencedClasses: ["String"],
  80739. //>>excludeEnd("ide");
  80740. messageSends: ["fromCharCode:", ",", "write:", "stdout", "prompt"]
  80741. }),
  80742. $globals.Repl);
  80743. $core.addMethod(
  80744. $core.method({
  80745. selector: "close",
  80746. protocol: 'actions',
  80747. fn: function (){
  80748. var self=this;
  80749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80750. return $core.withContext(function($ctx1) {
  80751. //>>excludeEnd("ctx");
  80752. $recv($recv(process)._stdin())._destroy();
  80753. return self;
  80754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80755. }, function($ctx1) {$ctx1.fill(self,"close",{},$globals.Repl)});
  80756. //>>excludeEnd("ctx");
  80757. },
  80758. //>>excludeStart("ide", pragmas.excludeIdeData);
  80759. args: [],
  80760. source: "close\x0a\x09process stdin destroy",
  80761. referencedClasses: [],
  80762. //>>excludeEnd("ide");
  80763. messageSends: ["destroy", "stdin"]
  80764. }),
  80765. $globals.Repl);
  80766. $core.addMethod(
  80767. $core.method({
  80768. selector: "commands",
  80769. protocol: 'accessing',
  80770. fn: function (){
  80771. var self=this;
  80772. var $1;
  80773. $1=self["@commands"];
  80774. return $1;
  80775. },
  80776. //>>excludeStart("ide", pragmas.excludeIdeData);
  80777. args: [],
  80778. source: "commands\x0a\x09^ commands",
  80779. referencedClasses: [],
  80780. //>>excludeEnd("ide");
  80781. messageSends: []
  80782. }),
  80783. $globals.Repl);
  80784. $core.addMethod(
  80785. $core.method({
  80786. selector: "createInterface",
  80787. protocol: 'actions',
  80788. fn: function (){
  80789. var self=this;
  80790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80791. return $core.withContext(function($ctx1) {
  80792. //>>excludeEnd("ctx");
  80793. var $1;
  80794. self["@interface"]=$recv(self["@readline"])._createInterface_stdout_($recv(process)._stdin(),$recv(process)._stdout());
  80795. $recv(self["@interface"])._on_do_("line",(function(buffer){
  80796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80797. return $core.withContext(function($ctx2) {
  80798. //>>excludeEnd("ctx");
  80799. return self._processLine_(buffer);
  80800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80801. }, function($ctx2) {$ctx2.fillBlock({buffer:buffer},$ctx1,1)});
  80802. //>>excludeEnd("ctx");
  80803. }));
  80804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80805. $ctx1.sendIdx["on:do:"]=1;
  80806. //>>excludeEnd("ctx");
  80807. $recv(self["@interface"])._on_do_("close",(function(){
  80808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80809. return $core.withContext(function($ctx2) {
  80810. //>>excludeEnd("ctx");
  80811. return self._close();
  80812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80813. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  80814. //>>excludeEnd("ctx");
  80815. }));
  80816. self._printWelcome();
  80817. self._setupHotkeys();
  80818. $1=self._setPrompt();
  80819. $recv(self["@interface"])._prompt();
  80820. return self;
  80821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80822. }, function($ctx1) {$ctx1.fill(self,"createInterface",{},$globals.Repl)});
  80823. //>>excludeEnd("ctx");
  80824. },
  80825. //>>excludeStart("ide", pragmas.excludeIdeData);
  80826. args: [],
  80827. 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",
  80828. referencedClasses: [],
  80829. //>>excludeEnd("ide");
  80830. messageSends: ["createInterface:stdout:", "stdin", "stdout", "on:do:", "processLine:", "close", "printWelcome", "setupHotkeys", "setPrompt", "prompt"]
  80831. }),
  80832. $globals.Repl);
  80833. $core.addMethod(
  80834. $core.method({
  80835. selector: "encapsulateVariable:withValue:in:",
  80836. protocol: 'private',
  80837. fn: function (aString,anObject,aClass){
  80838. var self=this;
  80839. var compiler;
  80840. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  80841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80842. return $core.withContext(function($ctx1) {
  80843. //>>excludeEnd("ctx");
  80844. var $1,$4,$3,$2,$5,$6;
  80845. compiler=$recv($Compiler())._new();
  80846. $1=compiler;
  80847. $4=$recv(aString).__comma(": anObject ^ ");
  80848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80849. $ctx1.sendIdx[","]=3;
  80850. //>>excludeEnd("ctx");
  80851. $3=$recv($4).__comma(aString);
  80852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80853. $ctx1.sendIdx[","]=2;
  80854. //>>excludeEnd("ctx");
  80855. $2=$recv($3).__comma(" := anObject");
  80856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80857. $ctx1.sendIdx[","]=1;
  80858. //>>excludeEnd("ctx");
  80859. $recv($1)._install_forClass_protocol_($2,aClass,"session");
  80860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80861. $ctx1.sendIdx["install:forClass:protocol:"]=1;
  80862. //>>excludeEnd("ctx");
  80863. $5=compiler;
  80864. $6=$recv($recv(aString).__comma(" ^ ")).__comma(aString);
  80865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80866. $ctx1.sendIdx[","]=4;
  80867. //>>excludeEnd("ctx");
  80868. $recv($5)._install_forClass_protocol_($6,aClass,"session");
  80869. return self;
  80870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80871. }, function($ctx1) {$ctx1.fill(self,"encapsulateVariable:withValue:in:",{aString:aString,anObject:anObject,aClass:aClass,compiler:compiler},$globals.Repl)});
  80872. //>>excludeEnd("ctx");
  80873. },
  80874. //>>excludeStart("ide", pragmas.excludeIdeData);
  80875. args: ["aString", "anObject", "aClass"],
  80876. 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'.",
  80877. referencedClasses: ["Compiler"],
  80878. //>>excludeEnd("ide");
  80879. messageSends: ["new", "install:forClass:protocol:", ","]
  80880. }),
  80881. $globals.Repl);
  80882. $core.addMethod(
  80883. $core.method({
  80884. selector: "eval:",
  80885. protocol: 'actions',
  80886. fn: function (buffer){
  80887. var self=this;
  80888. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  80889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80890. return $core.withContext(function($ctx1) {
  80891. //>>excludeEnd("ctx");
  80892. var $1;
  80893. $1=self._eval_on_(buffer,$recv($DoIt())._new());
  80894. return $1;
  80895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80896. }, function($ctx1) {$ctx1.fill(self,"eval:",{buffer:buffer},$globals.Repl)});
  80897. //>>excludeEnd("ctx");
  80898. },
  80899. //>>excludeStart("ide", pragmas.excludeIdeData);
  80900. args: ["buffer"],
  80901. source: "eval: buffer\x0a\x09^ self eval: buffer on: DoIt new.",
  80902. referencedClasses: ["DoIt"],
  80903. //>>excludeEnd("ide");
  80904. messageSends: ["eval:on:", "new"]
  80905. }),
  80906. $globals.Repl);
  80907. $core.addMethod(
  80908. $core.method({
  80909. selector: "eval:on:",
  80910. protocol: 'actions',
  80911. fn: function (buffer,anObject){
  80912. var self=this;
  80913. var result;
  80914. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  80915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80916. return $core.withContext(function($ctx1) {
  80917. //>>excludeEnd("ctx");
  80918. var $1,$2,$3;
  80919. $1=$recv(buffer)._isEmpty();
  80920. if(!$core.assert($1)){
  80921. $recv((function(){
  80922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80923. return $core.withContext(function($ctx2) {
  80924. //>>excludeEnd("ctx");
  80925. result=$recv($recv($Compiler())._new())._evaluateExpression_on_(buffer,anObject);
  80926. return result;
  80927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80928. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  80929. //>>excludeEnd("ctx");
  80930. }))._tryCatch_((function(e){
  80931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80932. return $core.withContext(function($ctx2) {
  80933. //>>excludeEnd("ctx");
  80934. $2=$recv(e)._isSmalltalkError();
  80935. if($core.assert($2)){
  80936. return $recv(e)._resignal();
  80937. } else {
  80938. return $recv($recv(process)._stdout())._write_($recv(e)._jsStack());
  80939. };
  80940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80941. }, function($ctx2) {$ctx2.fillBlock({e:e},$ctx1,3)});
  80942. //>>excludeEnd("ctx");
  80943. }));
  80944. };
  80945. $3=result;
  80946. return $3;
  80947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80948. }, function($ctx1) {$ctx1.fill(self,"eval:on:",{buffer:buffer,anObject:anObject,result:result},$globals.Repl)});
  80949. //>>excludeEnd("ctx");
  80950. },
  80951. //>>excludeStart("ide", pragmas.excludeIdeData);
  80952. args: ["buffer", "anObject"],
  80953. 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",
  80954. referencedClasses: ["Compiler"],
  80955. //>>excludeEnd("ide");
  80956. messageSends: ["ifFalse:", "isEmpty", "tryCatch:", "evaluateExpression:on:", "new", "ifTrue:ifFalse:", "isSmalltalkError", "resignal", "write:", "stdout", "jsStack"]
  80957. }),
  80958. $globals.Repl);
  80959. $core.addMethod(
  80960. $core.method({
  80961. selector: "executeCommand:",
  80962. protocol: 'private',
  80963. fn: function (aString){
  80964. var self=this;
  80965. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80966. return $core.withContext(function($ctx1) {
  80967. //>>excludeEnd("ctx");
  80968. var $1;
  80969. var $early={};
  80970. try {
  80971. $recv(self._commands())._keysAndValuesDo_((function(names,cmd){
  80972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80973. return $core.withContext(function($ctx2) {
  80974. //>>excludeEnd("ctx");
  80975. $1=$recv(names)._includes_(aString);
  80976. if($core.assert($1)){
  80977. $recv(cmd)._value();
  80978. throw $early=[true];
  80979. };
  80980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80981. }, function($ctx2) {$ctx2.fillBlock({names:names,cmd:cmd},$ctx1,1)});
  80982. //>>excludeEnd("ctx");
  80983. }));
  80984. return false;
  80985. }
  80986. catch(e) {if(e===$early)return e[0]; throw e}
  80987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80988. }, function($ctx1) {$ctx1.fill(self,"executeCommand:",{aString:aString},$globals.Repl)});
  80989. //>>excludeEnd("ctx");
  80990. },
  80991. //>>excludeStart("ide", pragmas.excludeIdeData);
  80992. args: ["aString"],
  80993. 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",
  80994. referencedClasses: [],
  80995. //>>excludeEnd("ide");
  80996. messageSends: ["keysAndValuesDo:", "commands", "ifTrue:", "includes:", "value"]
  80997. }),
  80998. $globals.Repl);
  80999. $core.addMethod(
  81000. $core.method({
  81001. selector: "initialize",
  81002. protocol: 'initialization',
  81003. fn: function (){
  81004. var self=this;
  81005. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  81006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81007. return $core.withContext(function($ctx1) {
  81008. //>>excludeEnd("ctx");
  81009. (
  81010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81011. $ctx1.supercall = true,
  81012. //>>excludeEnd("ctx");
  81013. $globals.Repl.superclass.fn.prototype._initialize.apply($recv(self), []));
  81014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81015. $ctx1.supercall = false;
  81016. //>>excludeEnd("ctx");;
  81017. self["@session"]=$recv($DoIt())._new();
  81018. self["@readline"]=$recv(require)._value_("readline");
  81019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81020. $ctx1.sendIdx["value:"]=1;
  81021. //>>excludeEnd("ctx");
  81022. self["@util"]=$recv(require)._value_("util");
  81023. self._setupCommands();
  81024. return self;
  81025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81026. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Repl)});
  81027. //>>excludeEnd("ctx");
  81028. },
  81029. //>>excludeStart("ide", pragmas.excludeIdeData);
  81030. args: [],
  81031. source: "initialize\x0a\x09super initialize.\x0a\x09session := DoIt new.\x0a\x09readline := require value: 'readline'.\x0a\x09util := require value: 'util'.\x0a\x09self setupCommands",
  81032. referencedClasses: ["DoIt"],
  81033. //>>excludeEnd("ide");
  81034. messageSends: ["initialize", "new", "value:", "setupCommands"]
  81035. }),
  81036. $globals.Repl);
  81037. $core.addMethod(
  81038. $core.method({
  81039. selector: "instanceVariableNamesFor:",
  81040. protocol: 'private',
  81041. fn: function (aClass){
  81042. var self=this;
  81043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81044. return $core.withContext(function($ctx1) {
  81045. //>>excludeEnd("ctx");
  81046. var $2,$3,$1,$receiver;
  81047. $2=$recv(aClass)._superclass();
  81048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81049. $ctx1.sendIdx["superclass"]=1;
  81050. //>>excludeEnd("ctx");
  81051. if(($receiver = $2) == null || $receiver.isNil){
  81052. $1=$recv(aClass)._instanceVariableNames();
  81053. } else {
  81054. $3=$recv(aClass)._instanceVariableNames();
  81055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81056. $ctx1.sendIdx["instanceVariableNames"]=1;
  81057. //>>excludeEnd("ctx");
  81058. $1=$recv($3)._copyWithAll_(self._instanceVariableNamesFor_($recv(aClass)._superclass()));
  81059. };
  81060. return $1;
  81061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81062. }, function($ctx1) {$ctx1.fill(self,"instanceVariableNamesFor:",{aClass:aClass},$globals.Repl)});
  81063. //>>excludeEnd("ctx");
  81064. },
  81065. //>>excludeStart("ide", pragmas.excludeIdeData);
  81066. args: ["aClass"],
  81067. 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]",
  81068. referencedClasses: [],
  81069. //>>excludeEnd("ide");
  81070. messageSends: ["ifNotNil:ifNil:", "superclass", "copyWithAll:", "instanceVariableNames", "instanceVariableNamesFor:"]
  81071. }),
  81072. $globals.Repl);
  81073. $core.addMethod(
  81074. $core.method({
  81075. selector: "isIdentifier:",
  81076. protocol: 'private',
  81077. fn: function (aString){
  81078. var self=this;
  81079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81080. return $core.withContext(function($ctx1) {
  81081. //>>excludeEnd("ctx");
  81082. var $1;
  81083. $1=$recv(aString)._match_("^[a-z_]\x5cw*$"._asRegexp());
  81084. return $1;
  81085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81086. }, function($ctx1) {$ctx1.fill(self,"isIdentifier:",{aString:aString},$globals.Repl)});
  81087. //>>excludeEnd("ctx");
  81088. },
  81089. //>>excludeStart("ide", pragmas.excludeIdeData);
  81090. args: ["aString"],
  81091. source: "isIdentifier: aString\x0a\x09^ aString match: '^[a-z_]\x5cw*$' asRegexp",
  81092. referencedClasses: [],
  81093. //>>excludeEnd("ide");
  81094. messageSends: ["match:", "asRegexp"]
  81095. }),
  81096. $globals.Repl);
  81097. $core.addMethod(
  81098. $core.method({
  81099. selector: "isVariableDefined:",
  81100. protocol: 'private',
  81101. fn: function (aString){
  81102. var self=this;
  81103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81104. return $core.withContext(function($ctx1) {
  81105. //>>excludeEnd("ctx");
  81106. var $1;
  81107. $1=$recv(self._instanceVariableNamesFor_($recv(self["@session"])._class()))._includes_(aString);
  81108. return $1;
  81109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81110. }, function($ctx1) {$ctx1.fill(self,"isVariableDefined:",{aString:aString},$globals.Repl)});
  81111. //>>excludeEnd("ctx");
  81112. },
  81113. //>>excludeStart("ide", pragmas.excludeIdeData);
  81114. args: ["aString"],
  81115. source: "isVariableDefined: aString\x0a\x09^ (self instanceVariableNamesFor: session class) includes: aString",
  81116. referencedClasses: [],
  81117. //>>excludeEnd("ide");
  81118. messageSends: ["includes:", "instanceVariableNamesFor:", "class"]
  81119. }),
  81120. $globals.Repl);
  81121. $core.addMethod(
  81122. $core.method({
  81123. selector: "nextResultName",
  81124. protocol: 'private',
  81125. fn: function (){
  81126. var self=this;
  81127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81128. return $core.withContext(function($ctx1) {
  81129. //>>excludeEnd("ctx");
  81130. var $1,$2,$receiver;
  81131. $1=self["@resultCount"];
  81132. if(($receiver = $1) == null || $receiver.isNil){
  81133. self["@resultCount"]=(1);
  81134. } else {
  81135. self["@resultCount"]=$recv(self["@resultCount"]).__plus((1));
  81136. };
  81137. $2="res".__comma($recv(self["@resultCount"])._asString());
  81138. return $2;
  81139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81140. }, function($ctx1) {$ctx1.fill(self,"nextResultName",{},$globals.Repl)});
  81141. //>>excludeEnd("ctx");
  81142. },
  81143. //>>excludeStart("ide", pragmas.excludeIdeData);
  81144. args: [],
  81145. source: "nextResultName\x0a\x09resultCount := resultCount\x0a \x09ifNotNil: [resultCount + 1]\x0a \x09ifNil: [1].\x0a ^ 'res', resultCount asString",
  81146. referencedClasses: [],
  81147. //>>excludeEnd("ide");
  81148. messageSends: ["ifNotNil:ifNil:", "+", ",", "asString"]
  81149. }),
  81150. $globals.Repl);
  81151. $core.addMethod(
  81152. $core.method({
  81153. selector: "onKeyPress:",
  81154. protocol: 'private',
  81155. fn: function (key){
  81156. var self=this;
  81157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81158. return $core.withContext(function($ctx1) {
  81159. //>>excludeEnd("ctx");
  81160. var $1;
  81161. $1=$recv($recv(key)._ctrl())._and_((function(){
  81162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81163. return $core.withContext(function($ctx2) {
  81164. //>>excludeEnd("ctx");
  81165. return $recv($recv(key)._name()).__eq("l");
  81166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81167. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  81168. //>>excludeEnd("ctx");
  81169. }));
  81170. if($core.assert($1)){
  81171. self._clearScreen();
  81172. };
  81173. return self;
  81174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81175. }, function($ctx1) {$ctx1.fill(self,"onKeyPress:",{key:key},$globals.Repl)});
  81176. //>>excludeEnd("ctx");
  81177. },
  81178. //>>excludeStart("ide", pragmas.excludeIdeData);
  81179. args: ["key"],
  81180. source: "onKeyPress: key\x0a\x09(key ctrl and: [key name = 'l'])\x0a\x09\x09ifTrue: [self clearScreen]",
  81181. referencedClasses: [],
  81182. //>>excludeEnd("ide");
  81183. messageSends: ["ifTrue:", "and:", "ctrl", "=", "name", "clearScreen"]
  81184. }),
  81185. $globals.Repl);
  81186. $core.addMethod(
  81187. $core.method({
  81188. selector: "parseAssignment:do:",
  81189. protocol: 'private',
  81190. fn: function (aString,aBlock){
  81191. var self=this;
  81192. var assignment;
  81193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81194. return $core.withContext(function($ctx1) {
  81195. //>>excludeEnd("ctx");
  81196. var $3,$2,$1;
  81197. assignment=$recv($recv(aString)._tokenize_(":="))._collect_((function(s){
  81198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81199. return $core.withContext(function($ctx2) {
  81200. //>>excludeEnd("ctx");
  81201. return $recv(s)._trimBoth();
  81202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81203. }, function($ctx2) {$ctx2.fillBlock({s:s},$ctx1,1)});
  81204. //>>excludeEnd("ctx");
  81205. }));
  81206. $2=$recv($recv($recv(assignment)._size()).__eq((2)))._and_((function(){
  81207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81208. return $core.withContext(function($ctx2) {
  81209. //>>excludeEnd("ctx");
  81210. $3=$recv(assignment)._first();
  81211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81212. $ctx2.sendIdx["first"]=1;
  81213. //>>excludeEnd("ctx");
  81214. return self._isIdentifier_($3);
  81215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81216. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  81217. //>>excludeEnd("ctx");
  81218. }));
  81219. if($core.assert($2)){
  81220. $1=$recv(aBlock)._value_value_($recv(assignment)._first(),$recv(assignment)._last());
  81221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81222. $ctx1.sendIdx["value:value:"]=1;
  81223. //>>excludeEnd("ctx");
  81224. } else {
  81225. $1=$recv(aBlock)._value_value_(nil,nil);
  81226. };
  81227. return $1;
  81228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81229. }, function($ctx1) {$ctx1.fill(self,"parseAssignment:do:",{aString:aString,aBlock:aBlock,assignment:assignment},$globals.Repl)});
  81230. //>>excludeEnd("ctx");
  81231. },
  81232. //>>excludeStart("ide", pragmas.excludeIdeData);
  81233. args: ["aString", "aBlock"],
  81234. 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 ]",
  81235. referencedClasses: [],
  81236. //>>excludeEnd("ide");
  81237. messageSends: ["collect:", "tokenize:", "trimBoth", "ifTrue:ifFalse:", "and:", "=", "size", "isIdentifier:", "first", "value:value:", "last"]
  81238. }),
  81239. $globals.Repl);
  81240. $core.addMethod(
  81241. $core.method({
  81242. selector: "presentResultNamed:withValue:",
  81243. protocol: 'private',
  81244. fn: function (varName,value){
  81245. var self=this;
  81246. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  81247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81248. return $core.withContext(function($ctx1) {
  81249. //>>excludeEnd("ctx");
  81250. var $3,$2,$1,$4;
  81251. $3=$recv($recv(varName).__comma(": ")).__comma($recv($recv(value)._class())._name());
  81252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81253. $ctx1.sendIdx[","]=3;
  81254. //>>excludeEnd("ctx");
  81255. $2=$recv($3).__comma(" = ");
  81256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81257. $ctx1.sendIdx[","]=2;
  81258. //>>excludeEnd("ctx");
  81259. $1=$recv($2).__comma($recv(value)._asString());
  81260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81261. $ctx1.sendIdx[","]=1;
  81262. //>>excludeEnd("ctx");
  81263. $recv($Transcript())._show_($1);
  81264. $4=$recv($Transcript())._cr();
  81265. $recv(self["@interface"])._prompt();
  81266. return self;
  81267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81268. }, function($ctx1) {$ctx1.fill(self,"presentResultNamed:withValue:",{varName:varName,value:value},$globals.Repl)});
  81269. //>>excludeEnd("ctx");
  81270. },
  81271. //>>excludeStart("ide", pragmas.excludeIdeData);
  81272. args: ["varName", "value"],
  81273. source: "presentResultNamed: varName withValue: value\x0a\x09Transcript show: varName, ': ', value class name, ' = ', value asString; cr.\x0a\x09interface prompt",
  81274. referencedClasses: ["Transcript"],
  81275. //>>excludeEnd("ide");
  81276. messageSends: ["show:", ",", "name", "class", "asString", "cr", "prompt"]
  81277. }),
  81278. $globals.Repl);
  81279. $core.addMethod(
  81280. $core.method({
  81281. selector: "printWelcome",
  81282. protocol: 'actions',
  81283. fn: function (){
  81284. var self=this;
  81285. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  81286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81287. return $core.withContext(function($ctx1) {
  81288. //>>excludeEnd("ctx");
  81289. var $1;
  81290. $recv($Transcript())._show_("Type :q to exit.");
  81291. $1=$recv($Transcript())._cr();
  81292. return self;
  81293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81294. }, function($ctx1) {$ctx1.fill(self,"printWelcome",{},$globals.Repl)});
  81295. //>>excludeEnd("ctx");
  81296. },
  81297. //>>excludeStart("ide", pragmas.excludeIdeData);
  81298. args: [],
  81299. source: "printWelcome\x0a\x09Transcript show: 'Type :q to exit.'; cr.",
  81300. referencedClasses: ["Transcript"],
  81301. //>>excludeEnd("ide");
  81302. messageSends: ["show:", "cr"]
  81303. }),
  81304. $globals.Repl);
  81305. $core.addMethod(
  81306. $core.method({
  81307. selector: "processLine:",
  81308. protocol: 'private',
  81309. fn: function (buffer){
  81310. var self=this;
  81311. var show;
  81312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81313. return $core.withContext(function($ctx1) {
  81314. //>>excludeEnd("ctx");
  81315. var $1,$2;
  81316. show=(function(varName,value){
  81317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81318. return $core.withContext(function($ctx2) {
  81319. //>>excludeEnd("ctx");
  81320. return self._presentResultNamed_withValue_(varName,value);
  81321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81322. }, function($ctx2) {$ctx2.fillBlock({varName:varName,value:value},$ctx1,1)});
  81323. //>>excludeEnd("ctx");
  81324. });
  81325. $1=self._executeCommand_(buffer);
  81326. if(!$core.assert($1)){
  81327. $2=self._isVariableDefined_(buffer);
  81328. if($core.assert($2)){
  81329. $recv(show)._value_value_(buffer,$recv(self["@session"])._perform_(buffer));
  81330. } else {
  81331. self._assignNewVariable_do_(buffer,show);
  81332. };
  81333. };
  81334. return self;
  81335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81336. }, function($ctx1) {$ctx1.fill(self,"processLine:",{buffer:buffer,show:show},$globals.Repl)});
  81337. //>>excludeEnd("ctx");
  81338. },
  81339. //>>excludeStart("ide", pragmas.excludeIdeData);
  81340. args: ["buffer"],
  81341. 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]]",
  81342. referencedClasses: [],
  81343. //>>excludeEnd("ide");
  81344. messageSends: ["presentResultNamed:withValue:", "ifFalse:", "executeCommand:", "ifTrue:ifFalse:", "isVariableDefined:", "value:value:", "perform:", "assignNewVariable:do:"]
  81345. }),
  81346. $globals.Repl);
  81347. $core.addMethod(
  81348. $core.method({
  81349. selector: "prompt",
  81350. protocol: 'accessing',
  81351. fn: function (){
  81352. var self=this;
  81353. return "amber >> ";
  81354. },
  81355. //>>excludeStart("ide", pragmas.excludeIdeData);
  81356. args: [],
  81357. source: "prompt\x0a\x09^ 'amber >> '",
  81358. referencedClasses: [],
  81359. //>>excludeEnd("ide");
  81360. messageSends: []
  81361. }),
  81362. $globals.Repl);
  81363. $core.addMethod(
  81364. $core.method({
  81365. selector: "setPreviousVariablesFor:from:",
  81366. protocol: 'private',
  81367. fn: function (newObject,oldObject){
  81368. var self=this;
  81369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81370. return $core.withContext(function($ctx1) {
  81371. //>>excludeEnd("ctx");
  81372. $recv(self._instanceVariableNamesFor_($recv(oldObject)._class()))._do_((function(each){
  81373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81374. return $core.withContext(function($ctx2) {
  81375. //>>excludeEnd("ctx");
  81376. return $recv(newObject)._perform_withArguments_($recv(each).__comma(":"),[$recv(oldObject)._perform_(each)]);
  81377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81378. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  81379. //>>excludeEnd("ctx");
  81380. }));
  81381. return self;
  81382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81383. }, function($ctx1) {$ctx1.fill(self,"setPreviousVariablesFor:from:",{newObject:newObject,oldObject:oldObject},$globals.Repl)});
  81384. //>>excludeEnd("ctx");
  81385. },
  81386. //>>excludeStart("ide", pragmas.excludeIdeData);
  81387. args: ["newObject", "oldObject"],
  81388. source: "setPreviousVariablesFor: newObject from: oldObject\x0a\x09(self instanceVariableNamesFor: oldObject class) do: [:each |\x0a\x09\x09newObject perform: each, ':' withArguments: {oldObject perform: each}].",
  81389. referencedClasses: [],
  81390. //>>excludeEnd("ide");
  81391. messageSends: ["do:", "instanceVariableNamesFor:", "class", "perform:withArguments:", ",", "perform:"]
  81392. }),
  81393. $globals.Repl);
  81394. $core.addMethod(
  81395. $core.method({
  81396. selector: "setPrompt",
  81397. protocol: 'actions',
  81398. fn: function (){
  81399. var self=this;
  81400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81401. return $core.withContext(function($ctx1) {
  81402. //>>excludeEnd("ctx");
  81403. $recv(self["@interface"])._setPrompt_(self._prompt());
  81404. return self;
  81405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81406. }, function($ctx1) {$ctx1.fill(self,"setPrompt",{},$globals.Repl)});
  81407. //>>excludeEnd("ctx");
  81408. },
  81409. //>>excludeStart("ide", pragmas.excludeIdeData);
  81410. args: [],
  81411. source: "setPrompt\x0a\x09interface setPrompt: self prompt",
  81412. referencedClasses: [],
  81413. //>>excludeEnd("ide");
  81414. messageSends: ["setPrompt:", "prompt"]
  81415. }),
  81416. $globals.Repl);
  81417. $core.addMethod(
  81418. $core.method({
  81419. selector: "setupCommands",
  81420. protocol: 'initialization',
  81421. fn: function (){
  81422. var self=this;
  81423. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  81424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81425. return $core.withContext(function($ctx1) {
  81426. //>>excludeEnd("ctx");
  81427. var $2,$1;
  81428. $2=$recv([":q"]).__minus_gt((function(){
  81429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81430. return $core.withContext(function($ctx2) {
  81431. //>>excludeEnd("ctx");
  81432. return $recv(process)._exit();
  81433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81434. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  81435. //>>excludeEnd("ctx");
  81436. }));
  81437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81438. $ctx1.sendIdx["->"]=1;
  81439. //>>excludeEnd("ctx");
  81440. $1=[$2,$recv([""]).__minus_gt((function(){
  81441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81442. return $core.withContext(function($ctx2) {
  81443. //>>excludeEnd("ctx");
  81444. return $recv(self["@interface"])._prompt();
  81445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81446. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  81447. //>>excludeEnd("ctx");
  81448. }))];
  81449. self["@commands"]=$recv($Dictionary())._from_($1);
  81450. return self;
  81451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81452. }, function($ctx1) {$ctx1.fill(self,"setupCommands",{},$globals.Repl)});
  81453. //>>excludeEnd("ctx");
  81454. },
  81455. //>>excludeStart("ide", pragmas.excludeIdeData);
  81456. args: [],
  81457. source: "setupCommands\x0a\x09commands := Dictionary from: {\x0a\x09\x09{':q'} -> [process exit].\x0a\x09\x09{''} -> [interface prompt]}",
  81458. referencedClasses: ["Dictionary"],
  81459. //>>excludeEnd("ide");
  81460. messageSends: ["from:", "->", "exit", "prompt"]
  81461. }),
  81462. $globals.Repl);
  81463. $core.addMethod(
  81464. $core.method({
  81465. selector: "setupHotkeys",
  81466. protocol: 'initialization',
  81467. fn: function (){
  81468. var self=this;
  81469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81470. return $core.withContext(function($ctx1) {
  81471. //>>excludeEnd("ctx");
  81472. var $receiver;
  81473. $recv($recv(process)._stdin())._on_do_("keypress",(function(s,key){
  81474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81475. return $core.withContext(function($ctx2) {
  81476. //>>excludeEnd("ctx");
  81477. if(($receiver = key) == null || $receiver.isNil){
  81478. return key;
  81479. } else {
  81480. return self._onKeyPress_(key);
  81481. };
  81482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81483. }, function($ctx2) {$ctx2.fillBlock({s:s,key:key},$ctx1,1)});
  81484. //>>excludeEnd("ctx");
  81485. }));
  81486. return self;
  81487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81488. }, function($ctx1) {$ctx1.fill(self,"setupHotkeys",{},$globals.Repl)});
  81489. //>>excludeEnd("ctx");
  81490. },
  81491. //>>excludeStart("ide", pragmas.excludeIdeData);
  81492. args: [],
  81493. source: "setupHotkeys\x0a\x09process stdin on: 'keypress' do: [:s :key | key ifNotNil: [self onKeyPress: key]].",
  81494. referencedClasses: [],
  81495. //>>excludeEnd("ide");
  81496. messageSends: ["on:do:", "stdin", "ifNotNil:", "onKeyPress:"]
  81497. }),
  81498. $globals.Repl);
  81499. $core.addMethod(
  81500. $core.method({
  81501. selector: "subclass:withVariable:",
  81502. protocol: 'private',
  81503. fn: function (aClass,varName){
  81504. var self=this;
  81505. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  81506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81507. return $core.withContext(function($ctx1) {
  81508. //>>excludeEnd("ctx");
  81509. var $1;
  81510. $1=$recv($recv($ClassBuilder())._new())._addSubclassOf_named_instanceVariableNames_package_(aClass,$recv(self._subclassNameFor_(aClass))._asSymbol(),[varName],"Compiler-Core");
  81511. return $1;
  81512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81513. }, function($ctx1) {$ctx1.fill(self,"subclass:withVariable:",{aClass:aClass,varName:varName},$globals.Repl)});
  81514. //>>excludeEnd("ctx");
  81515. },
  81516. //>>excludeStart("ide", pragmas.excludeIdeData);
  81517. args: ["aClass", "varName"],
  81518. 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'",
  81519. referencedClasses: ["ClassBuilder"],
  81520. //>>excludeEnd("ide");
  81521. messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "new", "asSymbol", "subclassNameFor:"]
  81522. }),
  81523. $globals.Repl);
  81524. $core.addMethod(
  81525. $core.method({
  81526. selector: "subclassNameFor:",
  81527. protocol: 'private',
  81528. fn: function (aClass){
  81529. var self=this;
  81530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81531. return $core.withContext(function($ctx1) {
  81532. //>>excludeEnd("ctx");
  81533. var $3,$2,$7,$6,$5,$4,$8,$1,$receiver;
  81534. $3=$recv(aClass)._name();
  81535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81536. $ctx1.sendIdx["name"]=1;
  81537. //>>excludeEnd("ctx");
  81538. $2=$recv($3)._matchesOf_("\x5cd+$");
  81539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81540. $ctx1.sendIdx["matchesOf:"]=1;
  81541. //>>excludeEnd("ctx");
  81542. if(($receiver = $2) == null || $receiver.isNil){
  81543. $1=$recv($recv(aClass)._name()).__comma("2");
  81544. } else {
  81545. var counter;
  81546. $7=$recv(aClass)._name();
  81547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81548. $ctx1.sendIdx["name"]=2;
  81549. //>>excludeEnd("ctx");
  81550. $6=$recv($7)._matchesOf_("\x5cd+$");
  81551. $5=$recv($6)._first();
  81552. $4=$recv($5)._asNumber();
  81553. counter=$recv($4).__plus((1));
  81554. counter;
  81555. $8=$recv(aClass)._name();
  81556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81557. $ctx1.sendIdx["name"]=3;
  81558. //>>excludeEnd("ctx");
  81559. $1=$recv($8)._replaceRegexp_with_("\x5cd+$"._asRegexp(),$recv(counter)._asString());
  81560. };
  81561. return $1;
  81562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81563. }, function($ctx1) {$ctx1.fill(self,"subclassNameFor:",{aClass:aClass},$globals.Repl)});
  81564. //>>excludeEnd("ctx");
  81565. },
  81566. //>>excludeStart("ide", pragmas.excludeIdeData);
  81567. args: ["aClass"],
  81568. 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'].",
  81569. referencedClasses: [],
  81570. //>>excludeEnd("ide");
  81571. messageSends: ["ifNotNil:ifNil:", "matchesOf:", "name", "+", "asNumber", "first", "replaceRegexp:with:", "asRegexp", "asString", ","]
  81572. }),
  81573. $globals.Repl);
  81574. $core.addMethod(
  81575. $core.method({
  81576. selector: "main",
  81577. protocol: 'initialization',
  81578. fn: function (){
  81579. var self=this;
  81580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81581. return $core.withContext(function($ctx1) {
  81582. //>>excludeEnd("ctx");
  81583. $recv(self._new())._createInterface();
  81584. return self;
  81585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  81586. }, function($ctx1) {$ctx1.fill(self,"main",{},$globals.Repl.klass)});
  81587. //>>excludeEnd("ctx");
  81588. },
  81589. //>>excludeStart("ide", pragmas.excludeIdeData);
  81590. args: [],
  81591. source: "main\x0a\x09self new createInterface",
  81592. referencedClasses: [],
  81593. //>>excludeEnd("ide");
  81594. messageSends: ["createInterface", "new"]
  81595. }),
  81596. $globals.Repl.klass);
  81597. });
  81598. define("app", ["amber/boot","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-Announcements","amber_core/Platform-Services","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/Platform-ImportExport","amber_core/Kernel-Tests","amber_core/Compiler-Tests","amber_core/SUnit-Tests","amber_cli/AmberCli"], function (boot) {
  81599. boot.api.initialize();
  81600. var $core = boot.api, $globals = boot.globals;
  81601. $globals.AmberCli._main();
  81602. });
  81603. requirejs(["app"]);