Helios-Helpers.js 59 KB

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