Helios-Helpers.js 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777
  1. define("helios/Helios-Helpers", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  2. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. $core.addPackage('Helios-Helpers');
  4. $core.packages["Helios-Helpers"].transport = {"type":"amd","amdNamespace":"helios"};
  5. $core.addClass('HLClassifier', $globals.Object, ['next', 'method'], 'Helios-Helpers');
  6. //>>excludeStart("ide", pragmas.excludeIdeData);
  7. $globals.HLClassifier.comment="I am an abstract class implementing a link in a `chain of responsibility` pattern.\x0a\x0aSubclasses are in charge of classifying a method according to multiple strategies.";
  8. //>>excludeEnd("ide");
  9. $core.addMethod(
  10. $core.method({
  11. selector: "classify",
  12. protocol: 'protocol',
  13. fn: function (){
  14. var self=this;
  15. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16. return $core.withContext(function($ctx1) {
  17. //>>excludeEnd("ctx");
  18. var $1,$3,$2,$receiver;
  19. $1=self._next();
  20. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21. $ctx1.sendIdx["next"]=1;
  22. //>>excludeEnd("ctx");
  23. if(($receiver = $1) == null || $receiver.isNil){
  24. return false;
  25. } else {
  26. $1;
  27. };
  28. $3=self._doClassify();
  29. if($core.assert($3)){
  30. $2=true;
  31. } else {
  32. $2=$recv(self._next())._classify();
  33. };
  34. return $2;
  35. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36. }, function($ctx1) {$ctx1.fill(self,"classify",{},$globals.HLClassifier)});
  37. //>>excludeEnd("ctx");
  38. },
  39. //>>excludeStart("ide", pragmas.excludeIdeData);
  40. args: [],
  41. source: "classify\x0a\x09self next ifNil: [ ^ false ].\x0a\x09\x0a\x09^ self doClassify\x0a\x09\x09ifTrue: [ true ]\x0a\x09\x09ifFalse: [ self next classify ]",
  42. referencedClasses: [],
  43. //>>excludeEnd("ide");
  44. messageSends: ["ifNil:", "next", "ifTrue:ifFalse:", "doClassify", "classify"]
  45. }),
  46. $globals.HLClassifier);
  47. $core.addMethod(
  48. $core.method({
  49. selector: "doClassify",
  50. protocol: 'private',
  51. fn: function (){
  52. var self=this;
  53. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54. return $core.withContext(function($ctx1) {
  55. //>>excludeEnd("ctx");
  56. self._subclassResponsibility();
  57. return self;
  58. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59. }, function($ctx1) {$ctx1.fill(self,"doClassify",{},$globals.HLClassifier)});
  60. //>>excludeEnd("ctx");
  61. },
  62. //>>excludeStart("ide", pragmas.excludeIdeData);
  63. args: [],
  64. source: "doClassify\x0a\x09self subclassResponsibility",
  65. referencedClasses: [],
  66. //>>excludeEnd("ide");
  67. messageSends: ["subclassResponsibility"]
  68. }),
  69. $globals.HLClassifier);
  70. $core.addMethod(
  71. $core.method({
  72. selector: "method",
  73. protocol: 'accessing',
  74. fn: function (){
  75. var self=this;
  76. var $1;
  77. $1=self["@method"];
  78. return $1;
  79. },
  80. //>>excludeStart("ide", pragmas.excludeIdeData);
  81. args: [],
  82. source: "method\x0a\x09^ method",
  83. referencedClasses: [],
  84. //>>excludeEnd("ide");
  85. messageSends: []
  86. }),
  87. $globals.HLClassifier);
  88. $core.addMethod(
  89. $core.method({
  90. selector: "method:",
  91. protocol: 'accessing',
  92. fn: function (anObject){
  93. var self=this;
  94. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  95. return $core.withContext(function($ctx1) {
  96. //>>excludeEnd("ctx");
  97. var $1,$receiver;
  98. self["@method"]=anObject;
  99. $1=self._next();
  100. if(($receiver = $1) == null || $receiver.isNil){
  101. $1;
  102. } else {
  103. var nextLink;
  104. nextLink=$receiver;
  105. $recv(nextLink)._method_(anObject);
  106. };
  107. return self;
  108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  109. }, function($ctx1) {$ctx1.fill(self,"method:",{anObject:anObject},$globals.HLClassifier)});
  110. //>>excludeEnd("ctx");
  111. },
  112. //>>excludeStart("ide", pragmas.excludeIdeData);
  113. args: ["anObject"],
  114. source: "method: anObject\x0a\x09method := anObject.\x0a\x09self next\x0a\x09\x09ifNotNil: [ :nextLink | nextLink method: anObject ]",
  115. referencedClasses: [],
  116. //>>excludeEnd("ide");
  117. messageSends: ["ifNotNil:", "next", "method:"]
  118. }),
  119. $globals.HLClassifier);
  120. $core.addMethod(
  121. $core.method({
  122. selector: "next",
  123. protocol: 'accessing',
  124. fn: function (){
  125. var self=this;
  126. var $1;
  127. $1=self["@next"];
  128. return $1;
  129. },
  130. //>>excludeStart("ide", pragmas.excludeIdeData);
  131. args: [],
  132. source: "next\x0a\x09^ next",
  133. referencedClasses: [],
  134. //>>excludeEnd("ide");
  135. messageSends: []
  136. }),
  137. $globals.HLClassifier);
  138. $core.addMethod(
  139. $core.method({
  140. selector: "next:",
  141. protocol: 'accessing',
  142. fn: function (anObject){
  143. var self=this;
  144. self["@next"]=anObject;
  145. return self;
  146. },
  147. //>>excludeStart("ide", pragmas.excludeIdeData);
  148. args: ["anObject"],
  149. source: "next: anObject\x0a\x09next := anObject",
  150. referencedClasses: [],
  151. //>>excludeEnd("ide");
  152. messageSends: []
  153. }),
  154. $globals.HLClassifier);
  155. $core.addClass('HLAccessorClassifier', $globals.HLClassifier, [], 'Helios-Helpers');
  156. //>>excludeStart("ide", pragmas.excludeIdeData);
  157. $globals.HLAccessorClassifier.comment="I am a classifier checking the method selector matches an instance variable name.";
  158. //>>excludeEnd("ide");
  159. $core.addMethod(
  160. $core.method({
  161. selector: "doClassify",
  162. protocol: 'private',
  163. fn: function (){
  164. var self=this;
  165. var names,selector;
  166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  167. return $core.withContext(function($ctx1) {
  168. //>>excludeEnd("ctx");
  169. var $1,$2;
  170. names=$recv($recv(self["@method"])._methodClass())._allInstanceVariableNames();
  171. selector=$recv(self["@method"])._selector();
  172. $1=$recv($recv(selector)._last()).__eq(":");
  173. if($core.assert($1)){
  174. selector=$recv(selector)._allButLast();
  175. selector;
  176. };
  177. $2=$recv(names)._includes_(selector);
  178. if(!$core.assert($2)){
  179. return false;
  180. };
  181. $recv(self["@method"])._protocol_("accessing");
  182. return true;
  183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  184. }, function($ctx1) {$ctx1.fill(self,"doClassify",{names:names,selector:selector},$globals.HLAccessorClassifier)});
  185. //>>excludeEnd("ctx");
  186. },
  187. //>>excludeStart("ide", pragmas.excludeIdeData);
  188. args: [],
  189. source: "doClassify\x0a\x09| names selector |\x0a\x09\x0a\x09names := method methodClass allInstanceVariableNames.\x0a\x09selector := method selector.\x0a\x09\x0a\x09(selector last = ':')\x0a\x09\x09ifTrue: [ \x22selector might be a setter\x22\x0a\x09\x09\x09selector := selector allButLast ].\x0a\x09\x0a\x09(names includes: selector)\x0a\x09\x09ifFalse: [ ^ false ].\x0a\x09\x09\x0a\x09method protocol: 'accessing'.\x0a\x09^ true.",
  190. referencedClasses: [],
  191. //>>excludeEnd("ide");
  192. messageSends: ["allInstanceVariableNames", "methodClass", "selector", "ifTrue:", "=", "last", "allButLast", "ifFalse:", "includes:", "protocol:"]
  193. }),
  194. $globals.HLAccessorClassifier);
  195. $core.addClass('HLImplementorClassifier', $globals.HLClassifier, [], 'Helios-Helpers');
  196. //>>excludeStart("ide", pragmas.excludeIdeData);
  197. $globals.HLImplementorClassifier.comment="I am a classifier checking the other implementations of the same selector and choose the protocol the most populated.";
  198. //>>excludeEnd("ide");
  199. $core.addMethod(
  200. $core.method({
  201. selector: "doClassify",
  202. protocol: 'private',
  203. fn: function (){
  204. var self=this;
  205. var currentClass;
  206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  207. return $core.withContext(function($ctx1) {
  208. //>>excludeEnd("ctx");
  209. var $1,$3,$4,$2;
  210. var $early={};
  211. try {
  212. currentClass=$recv(self["@method"])._methodClass();
  213. $recv((function(){
  214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  215. return $core.withContext(function($ctx2) {
  216. //>>excludeEnd("ctx");
  217. $1=$recv(currentClass)._superclass();
  218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  219. $ctx2.sendIdx["superclass"]=1;
  220. //>>excludeEnd("ctx");
  221. return $recv($1)._isNil();
  222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  223. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  224. //>>excludeEnd("ctx");
  225. }))._whileFalse_((function(){
  226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  227. return $core.withContext(function($ctx2) {
  228. //>>excludeEnd("ctx");
  229. currentClass=$recv(currentClass)._superclass();
  230. currentClass;
  231. $3=currentClass;
  232. $4=$recv(self["@method"])._selector();
  233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  234. $ctx2.sendIdx["selector"]=1;
  235. //>>excludeEnd("ctx");
  236. $2=$recv($3)._includesSelector_($4);
  237. if($core.assert($2)){
  238. $recv(self["@method"])._protocol_($recv($recv(currentClass).__gt_gt($recv(self["@method"])._selector()))._protocol());
  239. throw $early=[true];
  240. };
  241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  242. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  243. //>>excludeEnd("ctx");
  244. }));
  245. return false;
  246. }
  247. catch(e) {if(e===$early)return e[0]; throw e}
  248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  249. }, function($ctx1) {$ctx1.fill(self,"doClassify",{currentClass:currentClass},$globals.HLImplementorClassifier)});
  250. //>>excludeEnd("ctx");
  251. },
  252. //>>excludeStart("ide", pragmas.excludeIdeData);
  253. args: [],
  254. source: "doClassify\x0a\x09| currentClass |\x0a\x09currentClass := method methodClass.\x0a\x09\x0a\x09[ currentClass superclass isNil ] whileFalse: [\x0a\x09\x09currentClass := currentClass superclass.\x0a\x09\x09(currentClass includesSelector: method selector)\x0a\x09\x09\x09ifTrue: [ \x0a\x09\x09\x09\x09method protocol: (currentClass >> method selector) protocol.\x0a\x09\x09\x09\x09^ true ]].\x0a\x09\x0a\x09^ false.",
  255. referencedClasses: [],
  256. //>>excludeEnd("ide");
  257. messageSends: ["methodClass", "whileFalse:", "isNil", "superclass", "ifTrue:", "includesSelector:", "selector", "protocol:", "protocol", ">>"]
  258. }),
  259. $globals.HLImplementorClassifier);
  260. $core.addClass('HLPrefixClassifier', $globals.HLClassifier, ['prefixMapping'], 'Helios-Helpers');
  261. //>>excludeStart("ide", pragmas.excludeIdeData);
  262. $globals.HLPrefixClassifier.comment="I am classifier checking the method selector to know if it begins with a known prefix.";
  263. //>>excludeEnd("ide");
  264. $core.addMethod(
  265. $core.method({
  266. selector: "buildPrefixDictionary",
  267. protocol: 'initialization',
  268. fn: function (){
  269. var self=this;
  270. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  272. return $core.withContext(function($ctx1) {
  273. //>>excludeEnd("ctx");
  274. var $1,$2;
  275. self["@prefixMapping"]=$recv($Dictionary())._new();
  276. $1=self["@prefixMapping"];
  277. $recv($1)._at_put_("test","tests");
  278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  279. $ctx1.sendIdx["at:put:"]=1;
  280. //>>excludeEnd("ctx");
  281. $recv($1)._at_put_("bench","benchmarking");
  282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  283. $ctx1.sendIdx["at:put:"]=2;
  284. //>>excludeEnd("ctx");
  285. $recv($1)._at_put_("copy","copying");
  286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  287. $ctx1.sendIdx["at:put:"]=3;
  288. //>>excludeEnd("ctx");
  289. $recv($1)._at_put_("initialize","initialization");
  290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  291. $ctx1.sendIdx["at:put:"]=4;
  292. //>>excludeEnd("ctx");
  293. $recv($1)._at_put_("accept","visitor");
  294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  295. $ctx1.sendIdx["at:put:"]=5;
  296. //>>excludeEnd("ctx");
  297. $recv($1)._at_put_("visit","visitor");
  298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  299. $ctx1.sendIdx["at:put:"]=6;
  300. //>>excludeEnd("ctx");
  301. $recv($1)._at_put_("signal","signalling");
  302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  303. $ctx1.sendIdx["at:put:"]=7;
  304. //>>excludeEnd("ctx");
  305. $recv($1)._at_put_("parse","parsing");
  306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  307. $ctx1.sendIdx["at:put:"]=8;
  308. //>>excludeEnd("ctx");
  309. $recv($1)._at_put_("add","adding");
  310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  311. $ctx1.sendIdx["at:put:"]=9;
  312. //>>excludeEnd("ctx");
  313. $recv($1)._at_put_("is","testing");
  314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  315. $ctx1.sendIdx["at:put:"]=10;
  316. //>>excludeEnd("ctx");
  317. $recv($1)._at_put_("as","converting");
  318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  319. $ctx1.sendIdx["at:put:"]=11;
  320. //>>excludeEnd("ctx");
  321. $2=$recv($1)._at_put_("new","instance creation");
  322. return self;
  323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  324. }, function($ctx1) {$ctx1.fill(self,"buildPrefixDictionary",{},$globals.HLPrefixClassifier)});
  325. //>>excludeEnd("ctx");
  326. },
  327. //>>excludeStart("ide", pragmas.excludeIdeData);
  328. args: [],
  329. source: "buildPrefixDictionary\x0a\x09prefixMapping := Dictionary new.\x0a\x09prefixMapping \x0a\x09\x09at: 'test' put: 'tests';\x0a\x09 \x09at: 'bench' put: 'benchmarking';\x0a\x09 \x09at: 'copy' put: 'copying';\x0a\x09\x09at: 'initialize' put: 'initialization';\x0a\x09\x09at: 'accept' put: 'visitor';\x0a\x09\x09at: 'visit' put: 'visitor';\x0a\x09\x09at: 'signal' put: 'signalling';\x0a\x09\x09at: 'parse' put: 'parsing';\x0a\x09\x09at: 'add' put: 'adding';\x0a\x09\x09at: 'is' put: 'testing';\x0a\x09\x09at: 'as' put: 'converting';\x0a\x09\x09at: 'new' put: 'instance creation'.",
  330. referencedClasses: ["Dictionary"],
  331. //>>excludeEnd("ide");
  332. messageSends: ["new", "at:put:"]
  333. }),
  334. $globals.HLPrefixClassifier);
  335. $core.addMethod(
  336. $core.method({
  337. selector: "doClassify",
  338. protocol: 'private',
  339. fn: function (){
  340. var self=this;
  341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  342. return $core.withContext(function($ctx1) {
  343. //>>excludeEnd("ctx");
  344. var $1;
  345. var $early={};
  346. try {
  347. $recv(self["@prefixMapping"])._keysAndValuesDo_((function(prefix,protocol){
  348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  349. return $core.withContext(function($ctx2) {
  350. //>>excludeEnd("ctx");
  351. $1=$recv($recv(self["@method"])._selector())._beginsWith_(prefix);
  352. if($core.assert($1)){
  353. $recv(self["@method"])._protocol_(protocol);
  354. throw $early=[true];
  355. };
  356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  357. }, function($ctx2) {$ctx2.fillBlock({prefix:prefix,protocol:protocol},$ctx1,1)});
  358. //>>excludeEnd("ctx");
  359. }));
  360. return false;
  361. }
  362. catch(e) {if(e===$early)return e[0]; throw e}
  363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  364. }, function($ctx1) {$ctx1.fill(self,"doClassify",{},$globals.HLPrefixClassifier)});
  365. //>>excludeEnd("ctx");
  366. },
  367. //>>excludeStart("ide", pragmas.excludeIdeData);
  368. args: [],
  369. source: "doClassify\x0a\x09prefixMapping keysAndValuesDo: [ :prefix :protocol |\x0a\x09\x09(method selector beginsWith: prefix)\x0a\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09method protocol: protocol.\x0a\x09\x09\x09\x09^ true ]].\x0a\x09^ false.",
  370. referencedClasses: [],
  371. //>>excludeEnd("ide");
  372. messageSends: ["keysAndValuesDo:", "ifTrue:", "beginsWith:", "selector", "protocol:"]
  373. }),
  374. $globals.HLPrefixClassifier);
  375. $core.addMethod(
  376. $core.method({
  377. selector: "initialize",
  378. protocol: 'initialization',
  379. fn: function (){
  380. var self=this;
  381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  382. return $core.withContext(function($ctx1) {
  383. //>>excludeEnd("ctx");
  384. (
  385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  386. $ctx1.supercall = true,
  387. //>>excludeEnd("ctx");
  388. $globals.HLPrefixClassifier.superclass.fn.prototype._initialize.apply($recv(self), []));
  389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  390. $ctx1.supercall = false;
  391. //>>excludeEnd("ctx");;
  392. self._buildPrefixDictionary();
  393. return self;
  394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  395. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.HLPrefixClassifier)});
  396. //>>excludeEnd("ctx");
  397. },
  398. //>>excludeStart("ide", pragmas.excludeIdeData);
  399. args: [],
  400. source: "initialize\x0a\x09super initialize.\x0a\x0a\x09self buildPrefixDictionary",
  401. referencedClasses: [],
  402. //>>excludeEnd("ide");
  403. messageSends: ["initialize", "buildPrefixDictionary"]
  404. }),
  405. $globals.HLPrefixClassifier);
  406. $core.addClass('HLSuperclassClassifier', $globals.HLClassifier, [], 'Helios-Helpers');
  407. //>>excludeStart("ide", pragmas.excludeIdeData);
  408. $globals.HLSuperclassClassifier.comment="I am a classifier checking the superclass chain to find a matching selector.";
  409. //>>excludeEnd("ide");
  410. $core.addMethod(
  411. $core.method({
  412. selector: "doClassify",
  413. protocol: 'private',
  414. fn: function (){
  415. var self=this;
  416. var protocolBag,methods,protocolToUse,counter;
  417. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  418. function $HLReferencesModel(){return $globals.HLReferencesModel||(typeof HLReferencesModel=="undefined"?nil:HLReferencesModel)}
  419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  420. return $core.withContext(function($ctx1) {
  421. //>>excludeEnd("ctx");
  422. var $2,$1,$4,$3,$5;
  423. var $early={};
  424. try {
  425. protocolBag=$recv($Dictionary())._new();
  426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  427. $ctx1.sendIdx["new"]=1;
  428. //>>excludeEnd("ctx");
  429. methods=$recv($recv($HLReferencesModel())._new())._implementorsOf_($recv(self["@method"])._selector());
  430. $recv(methods)._ifEmpty_ifNotEmpty_((function(){
  431. throw $early=[false];
  432. }),(function(){
  433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  434. return $core.withContext(function($ctx2) {
  435. //>>excludeEnd("ctx");
  436. return $recv(methods)._do_((function(aMethod){
  437. var protocol;
  438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  439. return $core.withContext(function($ctx3) {
  440. //>>excludeEnd("ctx");
  441. protocol=$recv($recv(aMethod)._method())._protocol();
  442. protocol;
  443. $2=$recv(self["@method"])._methodClass();
  444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  445. $ctx3.sendIdx["methodClass"]=1;
  446. //>>excludeEnd("ctx");
  447. $1=$recv($2).__eq($recv(aMethod)._methodClass());
  448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  449. $ctx3.sendIdx["="]=1;
  450. //>>excludeEnd("ctx");
  451. if(!$core.assert($1)){
  452. $4=$recv($recv(protocol)._first()).__eq("*");
  453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  454. $ctx3.sendIdx["="]=2;
  455. //>>excludeEnd("ctx");
  456. $3=$recv($4)._or_((function(){
  457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  458. return $core.withContext(function($ctx4) {
  459. //>>excludeEnd("ctx");
  460. return $recv(protocol).__eq($recv(self["@method"])._defaultProtocol());
  461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  462. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,5)});
  463. //>>excludeEnd("ctx");
  464. }));
  465. if(!$core.assert($3)){
  466. return $recv(protocolBag)._at_put_(protocol,$recv($recv(protocolBag)._at_ifAbsent_(protocol,(function(){
  467. return (0);
  468. }))).__plus((1)));
  469. };
  470. };
  471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  472. }, function($ctx3) {$ctx3.fillBlock({aMethod:aMethod,protocol:protocol},$ctx2,3)});
  473. //>>excludeEnd("ctx");
  474. }));
  475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  476. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  477. //>>excludeEnd("ctx");
  478. }));
  479. $recv(protocolBag)._ifEmpty_((function(){
  480. throw $early=[false];
  481. }));
  482. protocolToUse=nil;
  483. counter=(0);
  484. $recv(protocolBag)._keysAndValuesDo_((function(key,value){
  485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  486. return $core.withContext(function($ctx2) {
  487. //>>excludeEnd("ctx");
  488. $5=$recv(value).__gt(counter);
  489. if($core.assert($5)){
  490. counter=value;
  491. counter;
  492. protocolToUse=key;
  493. return protocolToUse;
  494. };
  495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  496. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,9)});
  497. //>>excludeEnd("ctx");
  498. }));
  499. $recv(self["@method"])._protocol_(protocolToUse);
  500. return true;
  501. }
  502. catch(e) {if(e===$early)return e[0]; throw e}
  503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  504. }, function($ctx1) {$ctx1.fill(self,"doClassify",{protocolBag:protocolBag,methods:methods,protocolToUse:protocolToUse,counter:counter},$globals.HLSuperclassClassifier)});
  505. //>>excludeEnd("ctx");
  506. },
  507. //>>excludeStart("ide", pragmas.excludeIdeData);
  508. args: [],
  509. source: "doClassify\x0a\x09| protocolBag methods protocolToUse counter |\x0a\x09\x0a\x09protocolBag := Dictionary new.\x0a\x09methods := HLReferencesModel new implementorsOf: method selector.\x0a\x09methods\x0a\x09\x09ifEmpty: [ ^ false ]\x0a\x09\x09ifNotEmpty: [\x0a\x09\x09\x09methods \x0a\x09\x09\x09\x09do: [ :aMethod || protocol |\x0a\x09\x09\x09\x09\x09protocol := aMethod method protocol.\x0a\x09\x09\x09\x09\x09(method methodClass = aMethod methodClass)\x0a\x09\x09\x09\x09\x09\x09ifFalse: [\x0a\x09\x09\x09\x09\x09\x09((protocol first = '*') or: [ protocol = method defaultProtocol ])\x0a\x09\x09\x09\x09\x09\x09\x09ifFalse: [ \x0a\x09\x09\x09\x09\x09\x09\x09\x09protocolBag \x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09at: protocol \x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09put: (protocolBag at: protocol ifAbsent: [ 0 ]) + 1 ] ] ] ].\x0a\x09\x09\x09\x0a\x09protocolBag ifEmpty: [ ^ false ].\x0a\x09protocolToUse := nil.\x0a\x09counter := 0.\x0a\x09protocolBag keysAndValuesDo: [ :key :value | value > counter \x0a\x09\x09ifTrue: [\x0a\x09\x09\x09counter := value.\x0a\x09\x09\x09protocolToUse := key ] ].\x0a\x09method protocol: protocolToUse.\x0a\x09^ true",
  510. referencedClasses: ["Dictionary", "HLReferencesModel"],
  511. //>>excludeEnd("ide");
  512. messageSends: ["new", "implementorsOf:", "selector", "ifEmpty:ifNotEmpty:", "do:", "protocol", "method", "ifFalse:", "=", "methodClass", "or:", "first", "defaultProtocol", "at:put:", "+", "at:ifAbsent:", "ifEmpty:", "keysAndValuesDo:", "ifTrue:", ">", "protocol:"]
  513. }),
  514. $globals.HLSuperclassClassifier);
  515. $core.addClass('HLGenerationOutput', $globals.Object, ['sourceCodes', 'protocol', 'targetClass'], 'Helios-Helpers');
  516. //>>excludeStart("ide", pragmas.excludeIdeData);
  517. $globals.HLGenerationOutput.comment="I am a simple data object used to store the result of a generation process.";
  518. //>>excludeEnd("ide");
  519. $core.addMethod(
  520. $core.method({
  521. selector: "addSourceCode:",
  522. protocol: 'protocol',
  523. fn: function (aString){
  524. var self=this;
  525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  526. return $core.withContext(function($ctx1) {
  527. //>>excludeEnd("ctx");
  528. $recv(self["@sourceCodes"])._add_(aString);
  529. return self;
  530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  531. }, function($ctx1) {$ctx1.fill(self,"addSourceCode:",{aString:aString},$globals.HLGenerationOutput)});
  532. //>>excludeEnd("ctx");
  533. },
  534. //>>excludeStart("ide", pragmas.excludeIdeData);
  535. args: ["aString"],
  536. source: "addSourceCode: aString\x0a\x09sourceCodes add: aString",
  537. referencedClasses: [],
  538. //>>excludeEnd("ide");
  539. messageSends: ["add:"]
  540. }),
  541. $globals.HLGenerationOutput);
  542. $core.addMethod(
  543. $core.method({
  544. selector: "compile",
  545. protocol: 'protocol',
  546. fn: function (){
  547. var self=this;
  548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  549. return $core.withContext(function($ctx1) {
  550. //>>excludeEnd("ctx");
  551. var $1;
  552. $recv(self["@sourceCodes"])._do_((function(methodSourceCode){
  553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  554. return $core.withContext(function($ctx2) {
  555. //>>excludeEnd("ctx");
  556. $1=$recv(self["@targetClass"])._includesSelector_($recv(methodSourceCode)._selector());
  557. if(!$core.assert($1)){
  558. return $recv(self["@targetClass"])._compile_protocol_($recv(methodSourceCode)._sourceCode(),self["@protocol"]);
  559. };
  560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  561. }, function($ctx2) {$ctx2.fillBlock({methodSourceCode:methodSourceCode},$ctx1,1)});
  562. //>>excludeEnd("ctx");
  563. }));
  564. return self;
  565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  566. }, function($ctx1) {$ctx1.fill(self,"compile",{},$globals.HLGenerationOutput)});
  567. //>>excludeEnd("ctx");
  568. },
  569. //>>excludeStart("ide", pragmas.excludeIdeData);
  570. args: [],
  571. source: "compile\x0a\x09sourceCodes do: [ :methodSourceCode |\x0a\x09\x09(targetClass includesSelector: methodSourceCode selector)\x0a\x09\x09\x09ifFalse: [ \x0a\x09\x09\x09\x09targetClass \x0a\x09\x09\x09\x09\x09compile: methodSourceCode sourceCode\x0a\x09\x09\x09\x09\x09protocol: protocol ] ]",
  572. referencedClasses: [],
  573. //>>excludeEnd("ide");
  574. messageSends: ["do:", "ifFalse:", "includesSelector:", "selector", "compile:protocol:", "sourceCode"]
  575. }),
  576. $globals.HLGenerationOutput);
  577. $core.addMethod(
  578. $core.method({
  579. selector: "initialize",
  580. protocol: 'initialization',
  581. fn: function (){
  582. var self=this;
  583. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  585. return $core.withContext(function($ctx1) {
  586. //>>excludeEnd("ctx");
  587. (
  588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  589. $ctx1.supercall = true,
  590. //>>excludeEnd("ctx");
  591. $globals.HLGenerationOutput.superclass.fn.prototype._initialize.apply($recv(self), []));
  592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  593. $ctx1.supercall = false;
  594. //>>excludeEnd("ctx");;
  595. self["@sourceCodes"]=$recv($OrderedCollection())._new();
  596. return self;
  597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  598. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.HLGenerationOutput)});
  599. //>>excludeEnd("ctx");
  600. },
  601. //>>excludeStart("ide", pragmas.excludeIdeData);
  602. args: [],
  603. source: "initialize\x0a\x09super initialize.\x0a\x09\x0a\x09sourceCodes := OrderedCollection new",
  604. referencedClasses: ["OrderedCollection"],
  605. //>>excludeEnd("ide");
  606. messageSends: ["initialize", "new"]
  607. }),
  608. $globals.HLGenerationOutput);
  609. $core.addMethod(
  610. $core.method({
  611. selector: "protocol",
  612. protocol: 'accessing',
  613. fn: function (){
  614. var self=this;
  615. var $1;
  616. $1=self["@protocol"];
  617. return $1;
  618. },
  619. //>>excludeStart("ide", pragmas.excludeIdeData);
  620. args: [],
  621. source: "protocol\x0a\x09^ protocol",
  622. referencedClasses: [],
  623. //>>excludeEnd("ide");
  624. messageSends: []
  625. }),
  626. $globals.HLGenerationOutput);
  627. $core.addMethod(
  628. $core.method({
  629. selector: "protocol:",
  630. protocol: 'accessing',
  631. fn: function (aString){
  632. var self=this;
  633. self["@protocol"]=aString;
  634. return self;
  635. },
  636. //>>excludeStart("ide", pragmas.excludeIdeData);
  637. args: ["aString"],
  638. source: "protocol: aString\x0a\x09protocol := aString",
  639. referencedClasses: [],
  640. //>>excludeEnd("ide");
  641. messageSends: []
  642. }),
  643. $globals.HLGenerationOutput);
  644. $core.addMethod(
  645. $core.method({
  646. selector: "sourceCodes",
  647. protocol: 'accessing',
  648. fn: function (){
  649. var self=this;
  650. var $1;
  651. $1=self["@sourceCodes"];
  652. return $1;
  653. },
  654. //>>excludeStart("ide", pragmas.excludeIdeData);
  655. args: [],
  656. source: "sourceCodes\x0a\x09^ sourceCodes",
  657. referencedClasses: [],
  658. //>>excludeEnd("ide");
  659. messageSends: []
  660. }),
  661. $globals.HLGenerationOutput);
  662. $core.addMethod(
  663. $core.method({
  664. selector: "sourceCodes:",
  665. protocol: 'accessing',
  666. fn: function (aCollection){
  667. var self=this;
  668. self["@sourceCodes"]=aCollection;
  669. return self;
  670. },
  671. //>>excludeStart("ide", pragmas.excludeIdeData);
  672. args: ["aCollection"],
  673. source: "sourceCodes: aCollection\x0a\x09sourceCodes := aCollection",
  674. referencedClasses: [],
  675. //>>excludeEnd("ide");
  676. messageSends: []
  677. }),
  678. $globals.HLGenerationOutput);
  679. $core.addMethod(
  680. $core.method({
  681. selector: "targetClass",
  682. protocol: 'accessing',
  683. fn: function (){
  684. var self=this;
  685. var $1;
  686. $1=self["@targetClass"];
  687. return $1;
  688. },
  689. //>>excludeStart("ide", pragmas.excludeIdeData);
  690. args: [],
  691. source: "targetClass\x0a\x09^ targetClass",
  692. referencedClasses: [],
  693. //>>excludeEnd("ide");
  694. messageSends: []
  695. }),
  696. $globals.HLGenerationOutput);
  697. $core.addMethod(
  698. $core.method({
  699. selector: "targetClass:",
  700. protocol: 'accessing',
  701. fn: function (aClass){
  702. var self=this;
  703. self["@targetClass"]=aClass;
  704. return self;
  705. },
  706. //>>excludeStart("ide", pragmas.excludeIdeData);
  707. args: ["aClass"],
  708. source: "targetClass: aClass\x0a\x09targetClass := aClass",
  709. referencedClasses: [],
  710. //>>excludeEnd("ide");
  711. messageSends: []
  712. }),
  713. $globals.HLGenerationOutput);
  714. $core.addClass('HLMethodClassifier', $globals.Object, ['firstClassifier'], 'Helios-Helpers');
  715. //>>excludeStart("ide", pragmas.excludeIdeData);
  716. $globals.HLMethodClassifier.comment="I am in charge of categorizing methods following this strategy:\x0a\x0a- is it an accessor?\x0a- is it overriding a superclass method?\x0a- is it starting with a know prefix?\x0a- how are categorized the other implementations?";
  717. //>>excludeEnd("ide");
  718. $core.addMethod(
  719. $core.method({
  720. selector: "addClassifier:",
  721. protocol: 'private',
  722. fn: function (aClassifier){
  723. var self=this;
  724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  725. return $core.withContext(function($ctx1) {
  726. //>>excludeEnd("ctx");
  727. $recv(aClassifier)._next_(self["@firstClassifier"]);
  728. self["@firstClassifier"]=aClassifier;
  729. return self;
  730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  731. }, function($ctx1) {$ctx1.fill(self,"addClassifier:",{aClassifier:aClassifier},$globals.HLMethodClassifier)});
  732. //>>excludeEnd("ctx");
  733. },
  734. //>>excludeStart("ide", pragmas.excludeIdeData);
  735. args: ["aClassifier"],
  736. source: "addClassifier: aClassifier\x0a\x09aClassifier next: firstClassifier.\x0a\x09firstClassifier := aClassifier",
  737. referencedClasses: [],
  738. //>>excludeEnd("ide");
  739. messageSends: ["next:"]
  740. }),
  741. $globals.HLMethodClassifier);
  742. $core.addMethod(
  743. $core.method({
  744. selector: "classify:",
  745. protocol: 'protocol',
  746. fn: function (aMethod){
  747. var self=this;
  748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  749. return $core.withContext(function($ctx1) {
  750. //>>excludeEnd("ctx");
  751. var $1,$2;
  752. $1=self["@firstClassifier"];
  753. $recv($1)._method_(aMethod);
  754. $2=$recv($1)._classify();
  755. return self;
  756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  757. }, function($ctx1) {$ctx1.fill(self,"classify:",{aMethod:aMethod},$globals.HLMethodClassifier)});
  758. //>>excludeEnd("ctx");
  759. },
  760. //>>excludeStart("ide", pragmas.excludeIdeData);
  761. args: ["aMethod"],
  762. source: "classify: aMethod\x0a\x09firstClassifier\x0a\x09\x09method: aMethod;\x0a\x09\x09classify",
  763. referencedClasses: [],
  764. //>>excludeEnd("ide");
  765. messageSends: ["method:", "classify"]
  766. }),
  767. $globals.HLMethodClassifier);
  768. $core.addMethod(
  769. $core.method({
  770. selector: "classifyAll:",
  771. protocol: 'protocol',
  772. fn: function (aCollectionOfMethods){
  773. var self=this;
  774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  775. return $core.withContext(function($ctx1) {
  776. //>>excludeEnd("ctx");
  777. $recv(aCollectionOfMethods)._do_((function(method){
  778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  779. return $core.withContext(function($ctx2) {
  780. //>>excludeEnd("ctx");
  781. return self._classify_(method);
  782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  783. }, function($ctx2) {$ctx2.fillBlock({method:method},$ctx1,1)});
  784. //>>excludeEnd("ctx");
  785. }));
  786. return self;
  787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  788. }, function($ctx1) {$ctx1.fill(self,"classifyAll:",{aCollectionOfMethods:aCollectionOfMethods},$globals.HLMethodClassifier)});
  789. //>>excludeEnd("ctx");
  790. },
  791. //>>excludeStart("ide", pragmas.excludeIdeData);
  792. args: ["aCollectionOfMethods"],
  793. source: "classifyAll: aCollectionOfMethods\x0a\x09aCollectionOfMethods do: [ :method |\x0a\x09\x09self classify: method ]",
  794. referencedClasses: [],
  795. //>>excludeEnd("ide");
  796. messageSends: ["do:", "classify:"]
  797. }),
  798. $globals.HLMethodClassifier);
  799. $core.addMethod(
  800. $core.method({
  801. selector: "initialize",
  802. protocol: 'initialization',
  803. fn: function (){
  804. var self=this;
  805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  806. return $core.withContext(function($ctx1) {
  807. //>>excludeEnd("ctx");
  808. (
  809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  810. $ctx1.supercall = true,
  811. //>>excludeEnd("ctx");
  812. $globals.HLMethodClassifier.superclass.fn.prototype._initialize.apply($recv(self), []));
  813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  814. $ctx1.supercall = false;
  815. //>>excludeEnd("ctx");;
  816. self._setupClassifiers();
  817. return self;
  818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  819. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.HLMethodClassifier)});
  820. //>>excludeEnd("ctx");
  821. },
  822. //>>excludeStart("ide", pragmas.excludeIdeData);
  823. args: [],
  824. source: "initialize\x0a\x09super initialize.\x0a\x09\x0a\x09self setupClassifiers",
  825. referencedClasses: [],
  826. //>>excludeEnd("ide");
  827. messageSends: ["initialize", "setupClassifiers"]
  828. }),
  829. $globals.HLMethodClassifier);
  830. $core.addMethod(
  831. $core.method({
  832. selector: "setupClassifiers",
  833. protocol: 'initialization',
  834. fn: function (){
  835. var self=this;
  836. function $HLImplementorClassifier(){return $globals.HLImplementorClassifier||(typeof HLImplementorClassifier=="undefined"?nil:HLImplementorClassifier)}
  837. function $HLPrefixClassifier(){return $globals.HLPrefixClassifier||(typeof HLPrefixClassifier=="undefined"?nil:HLPrefixClassifier)}
  838. function $HLSuperclassClassifier(){return $globals.HLSuperclassClassifier||(typeof HLSuperclassClassifier=="undefined"?nil:HLSuperclassClassifier)}
  839. function $HLAccessorClassifier(){return $globals.HLAccessorClassifier||(typeof HLAccessorClassifier=="undefined"?nil:HLAccessorClassifier)}
  840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  841. return $core.withContext(function($ctx1) {
  842. //>>excludeEnd("ctx");
  843. var $1,$2,$3;
  844. $1=$recv($HLImplementorClassifier())._new();
  845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  846. $ctx1.sendIdx["new"]=1;
  847. //>>excludeEnd("ctx");
  848. self._addClassifier_($1);
  849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  850. $ctx1.sendIdx["addClassifier:"]=1;
  851. //>>excludeEnd("ctx");
  852. $2=$recv($HLPrefixClassifier())._new();
  853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  854. $ctx1.sendIdx["new"]=2;
  855. //>>excludeEnd("ctx");
  856. self._addClassifier_($2);
  857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  858. $ctx1.sendIdx["addClassifier:"]=2;
  859. //>>excludeEnd("ctx");
  860. $3=$recv($HLSuperclassClassifier())._new();
  861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  862. $ctx1.sendIdx["new"]=3;
  863. //>>excludeEnd("ctx");
  864. self._addClassifier_($3);
  865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  866. $ctx1.sendIdx["addClassifier:"]=3;
  867. //>>excludeEnd("ctx");
  868. self._addClassifier_($recv($HLAccessorClassifier())._new());
  869. return self;
  870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  871. }, function($ctx1) {$ctx1.fill(self,"setupClassifiers",{},$globals.HLMethodClassifier)});
  872. //>>excludeEnd("ctx");
  873. },
  874. //>>excludeStart("ide", pragmas.excludeIdeData);
  875. args: [],
  876. source: "setupClassifiers\x0a\x09self addClassifier: HLImplementorClassifier new.\x0a\x09self addClassifier: HLPrefixClassifier new.\x0a\x09self addClassifier: HLSuperclassClassifier new.\x0a\x09self addClassifier: HLAccessorClassifier new",
  877. referencedClasses: ["HLImplementorClassifier", "HLPrefixClassifier", "HLSuperclassClassifier", "HLAccessorClassifier"],
  878. //>>excludeEnd("ide");
  879. messageSends: ["addClassifier:", "new"]
  880. }),
  881. $globals.HLMethodClassifier);
  882. $core.addClass('HLMethodGenerator', $globals.Object, ['output'], 'Helios-Helpers');
  883. //>>excludeStart("ide", pragmas.excludeIdeData);
  884. $globals.HLMethodGenerator.comment="I am the abstract super class of the method generators.\x0a\x0aMy main method is `generate` which produces an `output` object accessed with `#output`.";
  885. //>>excludeEnd("ide");
  886. $core.addMethod(
  887. $core.method({
  888. selector: "class:",
  889. protocol: 'accessing',
  890. fn: function (aClass){
  891. var self=this;
  892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  893. return $core.withContext(function($ctx1) {
  894. //>>excludeEnd("ctx");
  895. $recv(self["@output"])._targetClass_(aClass);
  896. return self;
  897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  898. }, function($ctx1) {$ctx1.fill(self,"class:",{aClass:aClass},$globals.HLMethodGenerator)});
  899. //>>excludeEnd("ctx");
  900. },
  901. //>>excludeStart("ide", pragmas.excludeIdeData);
  902. args: ["aClass"],
  903. source: "class: aClass\x0a\x09output targetClass: aClass",
  904. referencedClasses: [],
  905. //>>excludeEnd("ide");
  906. messageSends: ["targetClass:"]
  907. }),
  908. $globals.HLMethodGenerator);
  909. $core.addMethod(
  910. $core.method({
  911. selector: "generate",
  912. protocol: 'protocol',
  913. fn: function (){
  914. var self=this;
  915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  916. return $core.withContext(function($ctx1) {
  917. //>>excludeEnd("ctx");
  918. var $1,$receiver;
  919. $1=$recv(self["@output"])._targetClass();
  920. if(($receiver = $1) == null || $receiver.isNil){
  921. self._error_("class should not be nil");
  922. } else {
  923. $1;
  924. };
  925. return self;
  926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  927. }, function($ctx1) {$ctx1.fill(self,"generate",{},$globals.HLMethodGenerator)});
  928. //>>excludeEnd("ctx");
  929. },
  930. //>>excludeStart("ide", pragmas.excludeIdeData);
  931. args: [],
  932. source: "generate\x0a\x09output targetClass ifNil: [ self error: 'class should not be nil'].",
  933. referencedClasses: [],
  934. //>>excludeEnd("ide");
  935. messageSends: ["ifNil:", "targetClass", "error:"]
  936. }),
  937. $globals.HLMethodGenerator);
  938. $core.addMethod(
  939. $core.method({
  940. selector: "initialize",
  941. protocol: 'initialization',
  942. fn: function (){
  943. var self=this;
  944. function $HLGenerationOutput(){return $globals.HLGenerationOutput||(typeof HLGenerationOutput=="undefined"?nil:HLGenerationOutput)}
  945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  946. return $core.withContext(function($ctx1) {
  947. //>>excludeEnd("ctx");
  948. (
  949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  950. $ctx1.supercall = true,
  951. //>>excludeEnd("ctx");
  952. $globals.HLMethodGenerator.superclass.fn.prototype._initialize.apply($recv(self), []));
  953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  954. $ctx1.supercall = false;
  955. //>>excludeEnd("ctx");;
  956. self["@output"]=$recv($HLGenerationOutput())._new();
  957. return self;
  958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  959. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.HLMethodGenerator)});
  960. //>>excludeEnd("ctx");
  961. },
  962. //>>excludeStart("ide", pragmas.excludeIdeData);
  963. args: [],
  964. source: "initialize\x0a\x09super initialize.\x0a\x09\x0a\x09output := HLGenerationOutput new",
  965. referencedClasses: ["HLGenerationOutput"],
  966. //>>excludeEnd("ide");
  967. messageSends: ["initialize", "new"]
  968. }),
  969. $globals.HLMethodGenerator);
  970. $core.addMethod(
  971. $core.method({
  972. selector: "output",
  973. protocol: 'accessing',
  974. fn: function (){
  975. var self=this;
  976. var $1;
  977. $1=self["@output"];
  978. return $1;
  979. },
  980. //>>excludeStart("ide", pragmas.excludeIdeData);
  981. args: [],
  982. source: "output\x0a\x09^ output",
  983. referencedClasses: [],
  984. //>>excludeEnd("ide");
  985. messageSends: []
  986. }),
  987. $globals.HLMethodGenerator);
  988. $core.addClass('HLAccessorsGenerator', $globals.HLMethodGenerator, [], 'Helios-Helpers');
  989. //>>excludeStart("ide", pragmas.excludeIdeData);
  990. $globals.HLAccessorsGenerator.comment="I am a generator used to compile the getters/setters of a class.";
  991. //>>excludeEnd("ide");
  992. $core.addMethod(
  993. $core.method({
  994. selector: "accessorProtocolForObject",
  995. protocol: 'double-dispatch',
  996. fn: function (){
  997. var self=this;
  998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  999. return $core.withContext(function($ctx1) {
  1000. //>>excludeEnd("ctx");
  1001. $recv(self["@output"])._protocol_("accessing");
  1002. return self;
  1003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1004. }, function($ctx1) {$ctx1.fill(self,"accessorProtocolForObject",{},$globals.HLAccessorsGenerator)});
  1005. //>>excludeEnd("ctx");
  1006. },
  1007. //>>excludeStart("ide", pragmas.excludeIdeData);
  1008. args: [],
  1009. source: "accessorProtocolForObject\x0a\x09output protocol: 'accessing'",
  1010. referencedClasses: [],
  1011. //>>excludeEnd("ide");
  1012. messageSends: ["protocol:"]
  1013. }),
  1014. $globals.HLAccessorsGenerator);
  1015. $core.addMethod(
  1016. $core.method({
  1017. selector: "accessorsForObject",
  1018. protocol: 'double-dispatch',
  1019. fn: function (){
  1020. var self=this;
  1021. var sources;
  1022. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  1023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1024. return $core.withContext(function($ctx1) {
  1025. //>>excludeEnd("ctx");
  1026. var $1,$2;
  1027. sources=$recv($OrderedCollection())._new();
  1028. $recv($recv($recv($recv(self["@output"])._targetClass())._instanceVariableNames())._sorted())._do_((function(each){
  1029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1030. return $core.withContext(function($ctx2) {
  1031. //>>excludeEnd("ctx");
  1032. $1=sources;
  1033. $recv($1)._add_(self._getterFor_(each));
  1034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1035. $ctx2.sendIdx["add:"]=1;
  1036. //>>excludeEnd("ctx");
  1037. $2=$recv($1)._add_(self._setterFor_(each));
  1038. return $2;
  1039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1040. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  1041. //>>excludeEnd("ctx");
  1042. }));
  1043. $recv(self["@output"])._sourceCodes_(sources);
  1044. return self;
  1045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1046. }, function($ctx1) {$ctx1.fill(self,"accessorsForObject",{sources:sources},$globals.HLAccessorsGenerator)});
  1047. //>>excludeEnd("ctx");
  1048. },
  1049. //>>excludeStart("ide", pragmas.excludeIdeData);
  1050. args: [],
  1051. source: "accessorsForObject\x0a\x09| sources |\x0a\x09\x0a\x09sources := OrderedCollection new.\x0a\x09output targetClass instanceVariableNames sorted do: [ :each | \x0a\x09\x09sources \x0a\x09\x09\x09add: (self getterFor: each);\x0a\x09\x09\x09add: (self setterFor: each) ].\x0a\x09output sourceCodes: sources",
  1052. referencedClasses: ["OrderedCollection"],
  1053. //>>excludeEnd("ide");
  1054. messageSends: ["new", "do:", "sorted", "instanceVariableNames", "targetClass", "add:", "getterFor:", "setterFor:", "sourceCodes:"]
  1055. }),
  1056. $globals.HLAccessorsGenerator);
  1057. $core.addMethod(
  1058. $core.method({
  1059. selector: "generate",
  1060. protocol: 'protocol',
  1061. fn: function (){
  1062. var self=this;
  1063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1064. return $core.withContext(function($ctx1) {
  1065. //>>excludeEnd("ctx");
  1066. var $1,$2;
  1067. (
  1068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1069. $ctx1.supercall = true,
  1070. //>>excludeEnd("ctx");
  1071. $globals.HLAccessorsGenerator.superclass.fn.prototype._generate.apply($recv(self), []));
  1072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1073. $ctx1.supercall = false;
  1074. //>>excludeEnd("ctx");;
  1075. $1=$recv(self["@output"])._targetClass();
  1076. $recv($1)._accessorsSourceCodesWith_(self);
  1077. $2=$recv($1)._accessorProtocolWith_(self);
  1078. return self;
  1079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1080. }, function($ctx1) {$ctx1.fill(self,"generate",{},$globals.HLAccessorsGenerator)});
  1081. //>>excludeEnd("ctx");
  1082. },
  1083. //>>excludeStart("ide", pragmas.excludeIdeData);
  1084. args: [],
  1085. source: "generate\x0a\x09super generate.\x0a\x09\x0a\x09output targetClass \x0a\x09\x09accessorsSourceCodesWith: self;\x0a\x09\x09accessorProtocolWith: self",
  1086. referencedClasses: [],
  1087. //>>excludeEnd("ide");
  1088. messageSends: ["generate", "accessorsSourceCodesWith:", "targetClass", "accessorProtocolWith:"]
  1089. }),
  1090. $globals.HLAccessorsGenerator);
  1091. $core.addMethod(
  1092. $core.method({
  1093. selector: "getterFor:",
  1094. protocol: 'private',
  1095. fn: function (anInstanceVariable){
  1096. var self=this;
  1097. function $HLMethodSourceCode(){return $globals.HLMethodSourceCode||(typeof HLMethodSourceCode=="undefined"?nil:HLMethodSourceCode)}
  1098. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  1099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1100. return $core.withContext(function($ctx1) {
  1101. //>>excludeEnd("ctx");
  1102. var $2,$3,$1;
  1103. $2=$recv($HLMethodSourceCode())._new();
  1104. $recv($2)._selector_(anInstanceVariable);
  1105. $3=$recv($2)._sourceCode_($recv($String())._streamContents_((function(stream){
  1106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1107. return $core.withContext(function($ctx2) {
  1108. //>>excludeEnd("ctx");
  1109. $recv(stream).__lt_lt(anInstanceVariable);
  1110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1111. $ctx2.sendIdx["<<"]=1;
  1112. //>>excludeEnd("ctx");
  1113. $recv($recv(stream)._cr())._tab();
  1114. return $recv($recv(stream).__lt_lt("^ ")).__lt_lt(anInstanceVariable);
  1115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1116. $ctx2.sendIdx["<<"]=2;
  1117. //>>excludeEnd("ctx");
  1118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1119. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  1120. //>>excludeEnd("ctx");
  1121. })));
  1122. $1=$3;
  1123. return $1;
  1124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1125. }, function($ctx1) {$ctx1.fill(self,"getterFor:",{anInstanceVariable:anInstanceVariable},$globals.HLAccessorsGenerator)});
  1126. //>>excludeEnd("ctx");
  1127. },
  1128. //>>excludeStart("ide", pragmas.excludeIdeData);
  1129. args: ["anInstanceVariable"],
  1130. source: "getterFor: anInstanceVariable\x0a\x09^ HLMethodSourceCode new\x0a\x09\x09selector:anInstanceVariable;\x0a\x09\x09sourceCode: (String streamContents: [ :stream |\x0a\x09\x09stream << anInstanceVariable.\x0a\x09\x09stream cr tab.\x0a\x09\x09stream << '^ ' << anInstanceVariable ])",
  1131. referencedClasses: ["HLMethodSourceCode", "String"],
  1132. //>>excludeEnd("ide");
  1133. messageSends: ["selector:", "new", "sourceCode:", "streamContents:", "<<", "tab", "cr"]
  1134. }),
  1135. $globals.HLAccessorsGenerator);
  1136. $core.addMethod(
  1137. $core.method({
  1138. selector: "setterFor:",
  1139. protocol: 'private',
  1140. fn: function (anInstanceVariable){
  1141. var self=this;
  1142. function $HLMethodSourceCode(){return $globals.HLMethodSourceCode||(typeof HLMethodSourceCode=="undefined"?nil:HLMethodSourceCode)}
  1143. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  1144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1145. return $core.withContext(function($ctx1) {
  1146. //>>excludeEnd("ctx");
  1147. var $2,$4,$3,$1;
  1148. $2=$recv($HLMethodSourceCode())._new();
  1149. $recv($2)._selector_($recv(anInstanceVariable).__comma(":"));
  1150. $3=$recv($2)._sourceCode_($recv($String())._streamContents_((function(stream){
  1151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1152. return $core.withContext(function($ctx2) {
  1153. //>>excludeEnd("ctx");
  1154. $4=$recv(stream).__lt_lt(anInstanceVariable);
  1155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1156. $ctx2.sendIdx["<<"]=2;
  1157. //>>excludeEnd("ctx");
  1158. $recv($4).__lt_lt(": anObject");
  1159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1160. $ctx2.sendIdx["<<"]=1;
  1161. //>>excludeEnd("ctx");
  1162. $recv($recv(stream)._cr())._tab();
  1163. return $recv($recv(stream).__lt_lt(anInstanceVariable)).__lt_lt(" := anObject");
  1164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1165. $ctx2.sendIdx["<<"]=3;
  1166. //>>excludeEnd("ctx");
  1167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1168. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  1169. //>>excludeEnd("ctx");
  1170. })));
  1171. $1=$3;
  1172. return $1;
  1173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1174. }, function($ctx1) {$ctx1.fill(self,"setterFor:",{anInstanceVariable:anInstanceVariable},$globals.HLAccessorsGenerator)});
  1175. //>>excludeEnd("ctx");
  1176. },
  1177. //>>excludeStart("ide", pragmas.excludeIdeData);
  1178. args: ["anInstanceVariable"],
  1179. source: "setterFor: anInstanceVariable\x0a\x09^ HLMethodSourceCode new\x0a\x09\x09selector: anInstanceVariable, ':';\x0a\x09\x09sourceCode: (String streamContents: [ :stream |\x0a\x09\x09stream << anInstanceVariable << ': anObject'.\x0a\x09\x09stream cr tab.\x0a\x09\x09stream << anInstanceVariable << ' := anObject' ])",
  1180. referencedClasses: ["HLMethodSourceCode", "String"],
  1181. //>>excludeEnd("ide");
  1182. messageSends: ["selector:", "new", ",", "sourceCode:", "streamContents:", "<<", "tab", "cr"]
  1183. }),
  1184. $globals.HLAccessorsGenerator);
  1185. $core.addClass('HLInitializeGenerator', $globals.HLMethodGenerator, [], 'Helios-Helpers');
  1186. //>>excludeStart("ide", pragmas.excludeIdeData);
  1187. $globals.HLInitializeGenerator.comment="I am used to double-dispatch the `initialize` method(s) generation. I am a disposable object.\x0a\x0a## Usage\x0a\x0a ^ HLInitializeGenerator new\x0a class: aClass;\x0a generate;\x0a output";
  1188. //>>excludeEnd("ide");
  1189. $core.addMethod(
  1190. $core.method({
  1191. selector: "generate",
  1192. protocol: 'protocol',
  1193. fn: function (){
  1194. var self=this;
  1195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1196. return $core.withContext(function($ctx1) {
  1197. //>>excludeEnd("ctx");
  1198. var $1,$2;
  1199. (
  1200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1201. $ctx1.supercall = true,
  1202. //>>excludeEnd("ctx");
  1203. $globals.HLInitializeGenerator.superclass.fn.prototype._generate.apply($recv(self), []));
  1204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1205. $ctx1.supercall = false;
  1206. //>>excludeEnd("ctx");;
  1207. $1=$recv(self["@output"])._targetClass();
  1208. $recv($1)._initializeSourceCodesWith_(self);
  1209. $2=$recv($1)._initializeProtocolWith_(self);
  1210. return self;
  1211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1212. }, function($ctx1) {$ctx1.fill(self,"generate",{},$globals.HLInitializeGenerator)});
  1213. //>>excludeEnd("ctx");
  1214. },
  1215. //>>excludeStart("ide", pragmas.excludeIdeData);
  1216. args: [],
  1217. source: "generate\x0a\x09super generate.\x0a\x09\x0a\x09output targetClass \x0a\x09\x09initializeSourceCodesWith: self;\x0a\x09\x09initializeProtocolWith: self",
  1218. referencedClasses: [],
  1219. //>>excludeEnd("ide");
  1220. messageSends: ["generate", "initializeSourceCodesWith:", "targetClass", "initializeProtocolWith:"]
  1221. }),
  1222. $globals.HLInitializeGenerator);
  1223. $core.addMethod(
  1224. $core.method({
  1225. selector: "generateInitializeCodeForObject",
  1226. protocol: 'private',
  1227. fn: function (){
  1228. var self=this;
  1229. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  1230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1231. return $core.withContext(function($ctx1) {
  1232. //>>excludeEnd("ctx");
  1233. var $3,$2,$4,$5,$6,$7,$8,$1;
  1234. $1=$recv($String())._streamContents_((function(str){
  1235. var instVars,size;
  1236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1237. return $core.withContext(function($ctx2) {
  1238. //>>excludeEnd("ctx");
  1239. instVars=$recv($recv($recv(self["@output"])._targetClass())._instanceVariableNames())._sorted();
  1240. instVars;
  1241. size=$recv(instVars)._size();
  1242. size;
  1243. $recv(str).__lt_lt("initialize");
  1244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1245. $ctx2.sendIdx["<<"]=1;
  1246. //>>excludeEnd("ctx");
  1247. $3=$recv(str)._cr();
  1248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1249. $ctx2.sendIdx["cr"]=1;
  1250. //>>excludeEnd("ctx");
  1251. $2=$recv($3)._tab();
  1252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1253. $ctx2.sendIdx["tab"]=1;
  1254. //>>excludeEnd("ctx");
  1255. $recv($2).__lt_lt("super initialize.");
  1256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1257. $ctx2.sendIdx["<<"]=2;
  1258. //>>excludeEnd("ctx");
  1259. $4=$recv($2)._cr();
  1260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1261. $ctx2.sendIdx["cr"]=2;
  1262. //>>excludeEnd("ctx");
  1263. $4;
  1264. $5=$recv(str)._cr();
  1265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1266. $ctx2.sendIdx["cr"]=3;
  1267. //>>excludeEnd("ctx");
  1268. $recv($5)._tab();
  1269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1270. $ctx2.sendIdx["tab"]=2;
  1271. //>>excludeEnd("ctx");
  1272. return $recv(instVars)._withIndexDo_((function(name,index){
  1273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1274. return $core.withContext(function($ctx3) {
  1275. //>>excludeEnd("ctx");
  1276. $6=$recv(index).__tild_eq((1));
  1277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1278. $ctx3.sendIdx["~="]=1;
  1279. //>>excludeEnd("ctx");
  1280. if($core.assert($6)){
  1281. $recv($recv(str)._cr())._tab();
  1282. };
  1283. $7=$recv(str).__lt_lt(name);
  1284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1285. $ctx3.sendIdx["<<"]=4;
  1286. //>>excludeEnd("ctx");
  1287. $recv($7).__lt_lt(" := nil");
  1288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1289. $ctx3.sendIdx["<<"]=3;
  1290. //>>excludeEnd("ctx");
  1291. $8=$recv(index).__tild_eq(size);
  1292. if($core.assert($8)){
  1293. return $recv(str).__lt_lt(".");
  1294. };
  1295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1296. }, function($ctx3) {$ctx3.fillBlock({name:name,index:index},$ctx2,2)});
  1297. //>>excludeEnd("ctx");
  1298. }));
  1299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1300. }, function($ctx2) {$ctx2.fillBlock({str:str,instVars:instVars,size:size},$ctx1,1)});
  1301. //>>excludeEnd("ctx");
  1302. }));
  1303. return $1;
  1304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1305. }, function($ctx1) {$ctx1.fill(self,"generateInitializeCodeForObject",{},$globals.HLInitializeGenerator)});
  1306. //>>excludeEnd("ctx");
  1307. },
  1308. //>>excludeStart("ide", pragmas.excludeIdeData);
  1309. args: [],
  1310. source: "generateInitializeCodeForObject\x09\x0a\x09^ String streamContents: [ :str || instVars size |\x0a\x09\x09instVars := output targetClass instanceVariableNames sorted.\x0a\x09\x09size := instVars size.\x0a\x09\x09str << 'initialize'.\x0a\x09\x09str cr tab << 'super initialize.';cr.\x0a\x09\x09str cr tab.\x0a\x09\x09instVars withIndexDo: [ :name :index |\x0a\x09\x09\x09index ~= 1 ifTrue: [ str cr tab ].\x0a\x09\x09\x09str << name << ' := nil'.\x0a\x09\x09\x09index ~= size ifTrue: [ str << '.' ] ] ].",
  1311. referencedClasses: ["String"],
  1312. //>>excludeEnd("ide");
  1313. messageSends: ["streamContents:", "sorted", "instanceVariableNames", "targetClass", "size", "<<", "tab", "cr", "withIndexDo:", "ifTrue:", "~="]
  1314. }),
  1315. $globals.HLInitializeGenerator);
  1316. $core.addMethod(
  1317. $core.method({
  1318. selector: "initializeForObject",
  1319. protocol: 'double-dispatch',
  1320. fn: function (){
  1321. var self=this;
  1322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1323. return $core.withContext(function($ctx1) {
  1324. //>>excludeEnd("ctx");
  1325. $recv(self["@output"])._addSourceCode_(self._initializeMethodForObject());
  1326. return self;
  1327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1328. }, function($ctx1) {$ctx1.fill(self,"initializeForObject",{},$globals.HLInitializeGenerator)});
  1329. //>>excludeEnd("ctx");
  1330. },
  1331. //>>excludeStart("ide", pragmas.excludeIdeData);
  1332. args: [],
  1333. source: "initializeForObject\x0a\x09output addSourceCode: self initializeMethodForObject",
  1334. referencedClasses: [],
  1335. //>>excludeEnd("ide");
  1336. messageSends: ["addSourceCode:", "initializeMethodForObject"]
  1337. }),
  1338. $globals.HLInitializeGenerator);
  1339. $core.addMethod(
  1340. $core.method({
  1341. selector: "initializeMethodForObject",
  1342. protocol: 'private',
  1343. fn: function (){
  1344. var self=this;
  1345. function $HLMethodSourceCode(){return $globals.HLMethodSourceCode||(typeof HLMethodSourceCode=="undefined"?nil:HLMethodSourceCode)}
  1346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1347. return $core.withContext(function($ctx1) {
  1348. //>>excludeEnd("ctx");
  1349. var $2,$3,$1;
  1350. $2=$recv($HLMethodSourceCode())._new();
  1351. $recv($2)._selector_("initialize");
  1352. $recv($2)._sourceCode_(self._generateInitializeCodeForObject());
  1353. $3=$recv($2)._yourself();
  1354. $1=$3;
  1355. return $1;
  1356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1357. }, function($ctx1) {$ctx1.fill(self,"initializeMethodForObject",{},$globals.HLInitializeGenerator)});
  1358. //>>excludeEnd("ctx");
  1359. },
  1360. //>>excludeStart("ide", pragmas.excludeIdeData);
  1361. args: [],
  1362. source: "initializeMethodForObject\x09\x0a\x09^ HLMethodSourceCode new\x0a\x09\x09selector: 'initialize';\x0a\x09\x09sourceCode: self generateInitializeCodeForObject;\x0a\x09\x09yourself",
  1363. referencedClasses: ["HLMethodSourceCode"],
  1364. //>>excludeEnd("ide");
  1365. messageSends: ["selector:", "new", "sourceCode:", "generateInitializeCodeForObject", "yourself"]
  1366. }),
  1367. $globals.HLInitializeGenerator);
  1368. $core.addMethod(
  1369. $core.method({
  1370. selector: "initializeProtocolForObject",
  1371. protocol: 'double-dispatch',
  1372. fn: function (){
  1373. var self=this;
  1374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1375. return $core.withContext(function($ctx1) {
  1376. //>>excludeEnd("ctx");
  1377. $recv(self["@output"])._protocol_("initialization");
  1378. return self;
  1379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1380. }, function($ctx1) {$ctx1.fill(self,"initializeProtocolForObject",{},$globals.HLInitializeGenerator)});
  1381. //>>excludeEnd("ctx");
  1382. },
  1383. //>>excludeStart("ide", pragmas.excludeIdeData);
  1384. args: [],
  1385. source: "initializeProtocolForObject\x0a\x09output protocol: 'initialization'",
  1386. referencedClasses: [],
  1387. //>>excludeEnd("ide");
  1388. messageSends: ["protocol:"]
  1389. }),
  1390. $globals.HLInitializeGenerator);
  1391. $core.addClass('HLMethodSourceCode', $globals.Object, ['selector', 'sourceCode'], 'Helios-Helpers');
  1392. //>>excludeStart("ide", pragmas.excludeIdeData);
  1393. $globals.HLMethodSourceCode.comment="I am a simple data object keeping track of the information about a method that will be compiled at the end of the generation process.";
  1394. //>>excludeEnd("ide");
  1395. $core.addMethod(
  1396. $core.method({
  1397. selector: "selector",
  1398. protocol: 'accessing',
  1399. fn: function (){
  1400. var self=this;
  1401. var $1;
  1402. $1=self["@selector"];
  1403. return $1;
  1404. },
  1405. //>>excludeStart("ide", pragmas.excludeIdeData);
  1406. args: [],
  1407. source: "selector\x0a\x09^ selector",
  1408. referencedClasses: [],
  1409. //>>excludeEnd("ide");
  1410. messageSends: []
  1411. }),
  1412. $globals.HLMethodSourceCode);
  1413. $core.addMethod(
  1414. $core.method({
  1415. selector: "selector:",
  1416. protocol: 'accessing',
  1417. fn: function (aSelector){
  1418. var self=this;
  1419. self["@selector"]=aSelector;
  1420. return self;
  1421. },
  1422. //>>excludeStart("ide", pragmas.excludeIdeData);
  1423. args: ["aSelector"],
  1424. source: "selector: aSelector\x0a\x09selector := aSelector",
  1425. referencedClasses: [],
  1426. //>>excludeEnd("ide");
  1427. messageSends: []
  1428. }),
  1429. $globals.HLMethodSourceCode);
  1430. $core.addMethod(
  1431. $core.method({
  1432. selector: "sourceCode",
  1433. protocol: 'accessing',
  1434. fn: function (){
  1435. var self=this;
  1436. var $1;
  1437. $1=self["@sourceCode"];
  1438. return $1;
  1439. },
  1440. //>>excludeStart("ide", pragmas.excludeIdeData);
  1441. args: [],
  1442. source: "sourceCode\x0a\x09^ sourceCode",
  1443. referencedClasses: [],
  1444. //>>excludeEnd("ide");
  1445. messageSends: []
  1446. }),
  1447. $globals.HLMethodSourceCode);
  1448. $core.addMethod(
  1449. $core.method({
  1450. selector: "sourceCode:",
  1451. protocol: 'accessing',
  1452. fn: function (aString){
  1453. var self=this;
  1454. self["@sourceCode"]=aString;
  1455. return self;
  1456. },
  1457. //>>excludeStart("ide", pragmas.excludeIdeData);
  1458. args: ["aString"],
  1459. source: "sourceCode: aString\x0a\x09sourceCode := aString",
  1460. referencedClasses: [],
  1461. //>>excludeEnd("ide");
  1462. messageSends: []
  1463. }),
  1464. $globals.HLMethodSourceCode);
  1465. $core.addClass('HLPackageCommitErrorHelper', $globals.Object, ['model'], 'Helios-Helpers');
  1466. $core.addMethod(
  1467. $core.method({
  1468. selector: "commitPackage",
  1469. protocol: 'actions',
  1470. fn: function (){
  1471. var self=this;
  1472. function $HLCommitPackageCommand(){return $globals.HLCommitPackageCommand||(typeof HLCommitPackageCommand=="undefined"?nil:HLCommitPackageCommand)}
  1473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1474. return $core.withContext(function($ctx1) {
  1475. //>>excludeEnd("ctx");
  1476. $recv($recv($HLCommitPackageCommand())._for_(self._model()))._execute();
  1477. return self;
  1478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1479. }, function($ctx1) {$ctx1.fill(self,"commitPackage",{},$globals.HLPackageCommitErrorHelper)});
  1480. //>>excludeEnd("ctx");
  1481. },
  1482. //>>excludeStart("ide", pragmas.excludeIdeData);
  1483. args: [],
  1484. source: "commitPackage\x0a\x09(HLCommitPackageCommand for: self model)\x0a\x09\x09execute",
  1485. referencedClasses: ["HLCommitPackageCommand"],
  1486. //>>excludeEnd("ide");
  1487. messageSends: ["execute", "for:", "model"]
  1488. }),
  1489. $globals.HLPackageCommitErrorHelper);
  1490. $core.addMethod(
  1491. $core.method({
  1492. selector: "commitToPath:",
  1493. protocol: 'actions',
  1494. fn: function (aString){
  1495. var self=this;
  1496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1497. return $core.withContext(function($ctx1) {
  1498. //>>excludeEnd("ctx");
  1499. $recv($recv(self._package())._transport())._setPath_(aString);
  1500. self._commitPackage();
  1501. return self;
  1502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1503. }, function($ctx1) {$ctx1.fill(self,"commitToPath:",{aString:aString},$globals.HLPackageCommitErrorHelper)});
  1504. //>>excludeEnd("ctx");
  1505. },
  1506. //>>excludeStart("ide", pragmas.excludeIdeData);
  1507. args: ["aString"],
  1508. source: "commitToPath: aString\x0a\x09\x22We only take AMD package transport into account for now\x22\x0a\x09\x0a\x09self package transport setPath: aString.\x0a\x09\x0a\x09self commitPackage",
  1509. referencedClasses: [],
  1510. //>>excludeEnd("ide");
  1511. messageSends: ["setPath:", "transport", "package", "commitPackage"]
  1512. }),
  1513. $globals.HLPackageCommitErrorHelper);
  1514. $core.addMethod(
  1515. $core.method({
  1516. selector: "model",
  1517. protocol: 'accessing',
  1518. fn: function (){
  1519. var self=this;
  1520. var $1;
  1521. $1=self["@model"];
  1522. return $1;
  1523. },
  1524. //>>excludeStart("ide", pragmas.excludeIdeData);
  1525. args: [],
  1526. source: "model\x0a\x09^ model",
  1527. referencedClasses: [],
  1528. //>>excludeEnd("ide");
  1529. messageSends: []
  1530. }),
  1531. $globals.HLPackageCommitErrorHelper);
  1532. $core.addMethod(
  1533. $core.method({
  1534. selector: "model:",
  1535. protocol: 'accessing',
  1536. fn: function (aToolModel){
  1537. var self=this;
  1538. self["@model"]=aToolModel;
  1539. return self;
  1540. },
  1541. //>>excludeStart("ide", pragmas.excludeIdeData);
  1542. args: ["aToolModel"],
  1543. source: "model: aToolModel\x0a\x09model := aToolModel",
  1544. referencedClasses: [],
  1545. //>>excludeEnd("ide");
  1546. messageSends: []
  1547. }),
  1548. $globals.HLPackageCommitErrorHelper);
  1549. $core.addMethod(
  1550. $core.method({
  1551. selector: "package",
  1552. protocol: 'accessing',
  1553. fn: function (){
  1554. var self=this;
  1555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1556. return $core.withContext(function($ctx1) {
  1557. //>>excludeEnd("ctx");
  1558. var $1;
  1559. $1=$recv(self._model())._packageToCommit();
  1560. return $1;
  1561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1562. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.HLPackageCommitErrorHelper)});
  1563. //>>excludeEnd("ctx");
  1564. },
  1565. //>>excludeStart("ide", pragmas.excludeIdeData);
  1566. args: [],
  1567. source: "package\x0a\x09^ self model packageToCommit",
  1568. referencedClasses: [],
  1569. //>>excludeEnd("ide");
  1570. messageSends: ["packageToCommit", "model"]
  1571. }),
  1572. $globals.HLPackageCommitErrorHelper);
  1573. $core.addMethod(
  1574. $core.method({
  1575. selector: "showHelp",
  1576. protocol: 'actions',
  1577. fn: function (){
  1578. var self=this;
  1579. function $HLConfirmationWidget(){return $globals.HLConfirmationWidget||(typeof HLConfirmationWidget=="undefined"?nil:HLConfirmationWidget)}
  1580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1581. return $core.withContext(function($ctx1) {
  1582. //>>excludeEnd("ctx");
  1583. var $1,$2,$3,$4;
  1584. $1=$recv($HLConfirmationWidget())._new();
  1585. $2=$1;
  1586. $3=$recv("Commit failed for namespace \x22".__comma($recv($recv(self._package())._transport())._namespace())).__comma("\x22. Do you want to commit to another path?");
  1587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1588. $ctx1.sendIdx[","]=1;
  1589. //>>excludeEnd("ctx");
  1590. $recv($2)._confirmationString_($3);
  1591. $recv($1)._actionBlock_((function(){
  1592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1593. return $core.withContext(function($ctx2) {
  1594. //>>excludeEnd("ctx");
  1595. return self._showNewCommitPath();
  1596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1597. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  1598. //>>excludeEnd("ctx");
  1599. }));
  1600. $recv($1)._cancelButtonLabel_("Abandon");
  1601. $recv($1)._confirmButtonLabel_("Set path");
  1602. $4=$recv($1)._show();
  1603. return self;
  1604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1605. }, function($ctx1) {$ctx1.fill(self,"showHelp",{},$globals.HLPackageCommitErrorHelper)});
  1606. //>>excludeEnd("ctx");
  1607. },
  1608. //>>excludeStart("ide", pragmas.excludeIdeData);
  1609. args: [],
  1610. source: "showHelp\x0a\x09HLConfirmationWidget new\x0a\x09\x09confirmationString: 'Commit failed for namespace \x22', self package transport namespace, '\x22. Do you want to commit to another path?';\x0a\x09\x09actionBlock: [ self showNewCommitPath ];\x0a\x09\x09cancelButtonLabel: 'Abandon';\x0a\x09\x09confirmButtonLabel: 'Set path';\x0a\x09\x09show",
  1611. referencedClasses: ["HLConfirmationWidget"],
  1612. //>>excludeEnd("ide");
  1613. messageSends: ["confirmationString:", "new", ",", "namespace", "transport", "package", "actionBlock:", "showNewCommitPath", "cancelButtonLabel:", "confirmButtonLabel:", "show"]
  1614. }),
  1615. $globals.HLPackageCommitErrorHelper);
  1616. $core.addMethod(
  1617. $core.method({
  1618. selector: "showNewCommitPath",
  1619. protocol: 'actions',
  1620. fn: function (){
  1621. var self=this;
  1622. function $HLRequestWidget(){return $globals.HLRequestWidget||(typeof HLRequestWidget=="undefined"?nil:HLRequestWidget)}
  1623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1624. return $core.withContext(function($ctx1) {
  1625. //>>excludeEnd("ctx");
  1626. var $1,$2;
  1627. $1=$recv($HLRequestWidget())._new();
  1628. $recv($1)._beSingleline();
  1629. $recv($1)._confirmationString_("Set commit path");
  1630. $recv($1)._actionBlock_((function(url){
  1631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1632. return $core.withContext(function($ctx2) {
  1633. //>>excludeEnd("ctx");
  1634. return self._commitToPath_(url);
  1635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1636. }, function($ctx2) {$ctx2.fillBlock({url:url},$ctx1,1)});
  1637. //>>excludeEnd("ctx");
  1638. }));
  1639. $recv($1)._confirmButtonLabel_("Commit with new path");
  1640. $recv($1)._value_("/src");
  1641. $2=$recv($1)._show();
  1642. return self;
  1643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1644. }, function($ctx1) {$ctx1.fill(self,"showNewCommitPath",{},$globals.HLPackageCommitErrorHelper)});
  1645. //>>excludeEnd("ctx");
  1646. },
  1647. //>>excludeStart("ide", pragmas.excludeIdeData);
  1648. args: [],
  1649. source: "showNewCommitPath\x0a\x09HLRequestWidget new\x0a\x09\x09beSingleline;\x0a\x09\x09confirmationString: 'Set commit path';\x0a\x09\x09actionBlock: [ :url | self commitToPath: url ];\x0a\x09\x09confirmButtonLabel: 'Commit with new path';\x0a\x09\x09value: '/src';\x0a\x09\x09show",
  1650. referencedClasses: ["HLRequestWidget"],
  1651. //>>excludeEnd("ide");
  1652. messageSends: ["beSingleline", "new", "confirmationString:", "actionBlock:", "commitToPath:", "confirmButtonLabel:", "value:", "show"]
  1653. }),
  1654. $globals.HLPackageCommitErrorHelper);
  1655. $core.addMethod(
  1656. $core.method({
  1657. selector: "on:",
  1658. protocol: 'instance creation',
  1659. fn: function (aToolModel){
  1660. var self=this;
  1661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1662. return $core.withContext(function($ctx1) {
  1663. //>>excludeEnd("ctx");
  1664. var $2,$3,$1;
  1665. $2=self._new();
  1666. $recv($2)._model_(aToolModel);
  1667. $3=$recv($2)._yourself();
  1668. $1=$3;
  1669. return $1;
  1670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1671. }, function($ctx1) {$ctx1.fill(self,"on:",{aToolModel:aToolModel},$globals.HLPackageCommitErrorHelper.klass)});
  1672. //>>excludeEnd("ctx");
  1673. },
  1674. //>>excludeStart("ide", pragmas.excludeIdeData);
  1675. args: ["aToolModel"],
  1676. source: "on: aToolModel\x0a\x09^ self new\x0a\x09\x09model: aToolModel;\x0a\x09\x09yourself",
  1677. referencedClasses: [],
  1678. //>>excludeEnd("ide");
  1679. messageSends: ["model:", "new", "yourself"]
  1680. }),
  1681. $globals.HLPackageCommitErrorHelper.klass);
  1682. });