Importer-Exporter.js 90 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018
  1. define("amber/Importer-Exporter", ["amber_vm/smalltalk", "amber_vm/nil", "amber_vm/_st", "amber/Kernel-Objects"], function(smalltalk,nil,_st){
  2. smalltalk.addPackage('Importer-Exporter');
  3. smalltalk.packages["Importer-Exporter"].transport = {"type":"amd","amdNamespace":"amber"};
  4. smalltalk.addClass('AmdExporter', smalltalk.Object, [], 'Importer-Exporter');
  5. smalltalk.addMethod(
  6. smalltalk.method({
  7. selector: "amdNamesOfPackages:",
  8. category: 'private',
  9. fn: function (anArray){
  10. var self=this;
  11. var deps,depNames;
  12. return smalltalk.withContext(function($ctx1) {
  13. var $1;
  14. $1=_st(_st(anArray)._select_((function(each){
  15. return smalltalk.withContext(function($ctx2) {
  16. return _st(_st(each)._amdNamespace())._notNil();
  17. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})})))._collect_((function(each){
  18. return smalltalk.withContext(function($ctx2) {
  19. return _st(_st(_st(each)._amdNamespace()).__comma("/")).__comma(_st(each)._name());
  20. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}));
  21. return $1;
  22. }, function($ctx1) {$ctx1.fill(self,"amdNamesOfPackages:",{anArray:anArray,deps:deps,depNames:depNames},smalltalk.AmdExporter.klass)})},
  23. args: ["anArray"],
  24. source: "amdNamesOfPackages: anArray\x0a\x09| deps depNames |\x0a\x09^(anArray\x0a\x09\x09select: [ :each | each amdNamespace notNil ])\x0a\x09\x09collect: [ :each | each amdNamespace, '/', each name ]",
  25. messageSends: ["collect:", ",", "name", "amdNamespace", "select:", "notNil"],
  26. referencedClasses: []
  27. }),
  28. smalltalk.AmdExporter.klass);
  29. smalltalk.addMethod(
  30. smalltalk.method({
  31. selector: "exportPackageEpilogueOf:on:",
  32. category: 'exporting-output',
  33. fn: function (aPackage,aStream){
  34. var self=this;
  35. return smalltalk.withContext(function($ctx1) {
  36. var $1,$2;
  37. $1=aStream;
  38. _st($1)._nextPutAll_("});");
  39. $2=_st($1)._lf();
  40. return self}, function($ctx1) {$ctx1.fill(self,"exportPackageEpilogueOf:on:",{aPackage:aPackage,aStream:aStream},smalltalk.AmdExporter.klass)})},
  41. args: ["aPackage", "aStream"],
  42. source: "exportPackageEpilogueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '});';\x0a\x09\x09lf",
  43. messageSends: ["nextPutAll:", "lf"],
  44. referencedClasses: []
  45. }),
  46. smalltalk.AmdExporter.klass);
  47. smalltalk.addMethod(
  48. smalltalk.method({
  49. selector: "exportPackagePrologueOf:on:",
  50. category: 'exporting-output',
  51. fn: function (aPackage,aStream){
  52. var self=this;
  53. return smalltalk.withContext(function($ctx1) {
  54. var $1,$2,$4,$3,$5;
  55. $1=aStream;
  56. _st($1)._nextPutAll_("define(\x22");
  57. $2=$1;
  58. $4=_st(aPackage)._amdNamespace();
  59. if(($receiver = $4) == nil || $receiver == undefined){
  60. $3="amber";
  61. } else {
  62. $3=$4;
  63. };
  64. _st($2)._nextPutAll_($3);
  65. _st($1)._nextPutAll_("/");
  66. _st($1)._nextPutAll_(_st(aPackage)._name());
  67. _st($1)._nextPutAll_("\x22, ");
  68. _st($1)._nextPutAll_(_st(["amber_vm/smalltalk", "amber_vm/nil", "amber_vm/_st"].__comma(self._amdNamesOfPackages_(_st(aPackage)._loadDependencies())))._asJavascript());
  69. _st($1)._nextPutAll_(", function(smalltalk,nil,_st){");
  70. $5=_st($1)._lf();
  71. return self}, function($ctx1) {$ctx1.fill(self,"exportPackagePrologueOf:on:",{aPackage:aPackage,aStream:aStream},smalltalk.AmdExporter.klass)})},
  72. args: ["aPackage", "aStream"],
  73. source: "exportPackagePrologueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: 'define(\x22';\x0a\x09\x09nextPutAll: (aPackage amdNamespace ifNil: [ 'amber' ]); \x22ifNil: only for LegacyPH, it should not happen with AmdPH\x22\x0a\x09\x09nextPutAll: '/';\x0a\x09\x09nextPutAll: aPackage name;\x0a\x09\x09nextPutAll: '\x22, ';\x0a\x09\x09nextPutAll: (#('amber_vm/smalltalk' 'amber_vm/nil' 'amber_vm/_st'), (self amdNamesOfPackages: aPackage loadDependencies)) asJavascript;\x0a\x09\x09nextPutAll: ', function(smalltalk,nil,_st){';\x0a\x09\x09lf",
  74. messageSends: ["nextPutAll:", "ifNil:", "amdNamespace", "name", "asJavascript", ",", "amdNamesOfPackages:", "loadDependencies", "lf"],
  75. referencedClasses: []
  76. }),
  77. smalltalk.AmdExporter.klass);
  78. smalltalk.addMethod(
  79. smalltalk.method({
  80. selector: "exportPackageTransportOf:on:",
  81. category: 'exporting-output',
  82. fn: function (aPackage,aStream){
  83. var self=this;
  84. return smalltalk.withContext(function($ctx1) {
  85. var $1,$2;
  86. $1=aStream;
  87. _st($1)._nextPutAll_("smalltalk.packages[");
  88. _st($1)._nextPutAll_(_st(_st(aPackage)._name())._asJavascript());
  89. _st($1)._nextPutAll_("].transport = ");
  90. _st($1)._nextPutAll_(_st(aPackage)._transportJson());
  91. _st($1)._nextPutAll_(";");
  92. $2=_st($1)._lf();
  93. return self}, function($ctx1) {$ctx1.fill(self,"exportPackageTransportOf:on:",{aPackage:aPackage,aStream:aStream},smalltalk.AmdExporter.klass)})},
  94. args: ["aPackage", "aStream"],
  95. source: "exportPackageTransportOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: 'smalltalk.packages[';\x0a\x09\x09nextPutAll: aPackage name asJavascript;\x0a\x09\x09nextPutAll: '].transport = ';\x0a\x09\x09nextPutAll: aPackage transportJson;\x0a\x09\x09nextPutAll: ';';\x0a\x09\x09lf",
  96. messageSends: ["nextPutAll:", "asJavascript", "name", "transportJson", "lf"],
  97. referencedClasses: []
  98. }),
  99. smalltalk.AmdExporter.klass);
  100. smalltalk.addClass('ChunkExporter', smalltalk.Object, [], 'Importer-Exporter');
  101. smalltalk.ChunkExporter.comment="I am an exporter dedicated to outputting Amber source code in the classic Smalltalk chunk format.\x0a\x0aI do not output any compiled code.";
  102. smalltalk.addMethod(
  103. smalltalk.method({
  104. selector: "chunkEscape:",
  105. category: 'private',
  106. fn: function (aString){
  107. var self=this;
  108. return smalltalk.withContext(function($ctx1) {
  109. var $1;
  110. $1=_st(_st(aString)._replace_with_("!","!!"))._trimBoth();
  111. return $1;
  112. }, function($ctx1) {$ctx1.fill(self,"chunkEscape:",{aString:aString},smalltalk.ChunkExporter.klass)})},
  113. args: ["aString"],
  114. source: "chunkEscape: aString\x0a\x09\x22Replace all occurrences of ! with !! and trim at both ends.\x22\x0a\x0a\x09^(aString replace: '!' with: '!!') trimBoth",
  115. messageSends: ["trimBoth", "replace:with:"],
  116. referencedClasses: []
  117. }),
  118. smalltalk.ChunkExporter.klass);
  119. smalltalk.addMethod(
  120. smalltalk.method({
  121. selector: "classNameFor:",
  122. category: 'private',
  123. fn: function (aClass){
  124. var self=this;
  125. return smalltalk.withContext(function($ctx1) {
  126. var $2,$3,$1;
  127. $2=_st(aClass)._isMetaclass();
  128. if(smalltalk.assert($2)){
  129. $1=_st(_st(_st(aClass)._instanceClass())._name()).__comma(" class");
  130. } else {
  131. $3=_st(aClass)._isNil();
  132. if(smalltalk.assert($3)){
  133. $1="nil";
  134. } else {
  135. $1=_st(aClass)._name();
  136. };
  137. };
  138. return $1;
  139. }, function($ctx1) {$ctx1.fill(self,"classNameFor:",{aClass:aClass},smalltalk.ChunkExporter.klass)})},
  140. args: ["aClass"],
  141. source: "classNameFor: aClass\x0a\x09^aClass isMetaclass\x0a\x09\x09ifTrue: [aClass instanceClass name, ' class']\x0a\x09\x09ifFalse: [\x0a\x09\x09aClass isNil\x0a\x09\x09\x09ifTrue: ['nil']\x0a\x09\x09\x09ifFalse: [aClass name]]",
  142. messageSends: ["ifTrue:ifFalse:", ",", "name", "instanceClass", "isNil", "isMetaclass"],
  143. referencedClasses: []
  144. }),
  145. smalltalk.ChunkExporter.klass);
  146. smalltalk.addMethod(
  147. smalltalk.method({
  148. selector: "exportCategoryEpilogueOf:on:",
  149. category: 'exporting-output',
  150. fn: function (category,aStream){
  151. var self=this;
  152. return smalltalk.withContext(function($ctx1) {
  153. var $1,$2;
  154. $1=aStream;
  155. _st($1)._nextPutAll_(" !");
  156. _st($1)._lf();
  157. $2=_st($1)._lf();
  158. return self}, function($ctx1) {$ctx1.fill(self,"exportCategoryEpilogueOf:on:",{category:category,aStream:aStream},smalltalk.ChunkExporter.klass)})},
  159. args: ["category", "aStream"],
  160. source: "exportCategoryEpilogueOf: category on: aStream\x0a\x09aStream nextPutAll: ' !'; lf; lf",
  161. messageSends: ["nextPutAll:", "lf"],
  162. referencedClasses: []
  163. }),
  164. smalltalk.ChunkExporter.klass);
  165. smalltalk.addMethod(
  166. smalltalk.method({
  167. selector: "exportCategoryPrologueOf:on:",
  168. category: 'exporting-output',
  169. fn: function (category,aStream){
  170. var self=this;
  171. return smalltalk.withContext(function($ctx1) {
  172. var $1,$2;
  173. $1=aStream;
  174. _st($1)._nextPutAll_("!".__comma(self._classNameFor_(_st(category)._at_("class"))));
  175. $2=_st($1)._nextPutAll_(_st(" methodsFor: '".__comma(_st(category)._at_("name"))).__comma("'!"));
  176. return self}, function($ctx1) {$ctx1.fill(self,"exportCategoryPrologueOf:on:",{category:category,aStream:aStream},smalltalk.ChunkExporter.klass)})},
  177. args: ["category", "aStream"],
  178. source: "exportCategoryPrologueOf: category on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '!', (self classNameFor: (category at: #class));\x0a\x09\x09nextPutAll: ' methodsFor: ''', (category at: #name), '''!'",
  179. messageSends: ["nextPutAll:", ",", "classNameFor:", "at:"],
  180. referencedClasses: []
  181. }),
  182. smalltalk.ChunkExporter.klass);
  183. smalltalk.addMethod(
  184. smalltalk.method({
  185. selector: "exportDefinitionOf:on:",
  186. category: 'exporting-output',
  187. fn: function (aClass,aStream){
  188. var self=this;
  189. return smalltalk.withContext(function($ctx1) {
  190. var $1,$2,$3,$4,$5,$6,$7;
  191. $1=aStream;
  192. _st($1)._nextPutAll_(self._classNameFor_(_st(aClass)._superclass()));
  193. _st($1)._nextPutAll_(" subclass: #".__comma(self._classNameFor_(aClass)));
  194. _st($1)._lf();
  195. _st($1)._tab();
  196. $2=_st($1)._nextPutAll_("instanceVariableNames: '");
  197. _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
  198. return smalltalk.withContext(function($ctx2) {
  199. return _st(aStream)._nextPutAll_(each);
  200. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}),(function(){
  201. return smalltalk.withContext(function($ctx2) {
  202. return _st(aStream)._nextPutAll_(" ");
  203. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  204. $3=aStream;
  205. _st($3)._nextPutAll_("'");
  206. _st($3)._lf();
  207. _st($3)._tab();
  208. _st($3)._nextPutAll_(_st("package: '".__comma(_st(aClass)._category())).__comma("'!"));
  209. $4=_st($3)._lf();
  210. $5=_st(_st(aClass)._comment())._notEmpty();
  211. if(smalltalk.assert($5)){
  212. $6=aStream;
  213. _st($6)._nextPutAll_(_st("!".__comma(self._classNameFor_(aClass))).__comma(" commentStamp!"));
  214. _st($6)._lf();
  215. _st($6)._nextPutAll_(_st(self._chunkEscape_(_st(aClass)._comment())).__comma("!"));
  216. $7=_st($6)._lf();
  217. $7;
  218. };
  219. _st(aStream)._lf();
  220. return self}, function($ctx1) {$ctx1.fill(self,"exportDefinitionOf:on:",{aClass:aClass,aStream:aStream},smalltalk.ChunkExporter.klass)})},
  221. args: ["aClass", "aStream"],
  222. source: "exportDefinitionOf: aClass on: aStream\x0a\x09\x22Chunk format.\x22\x0a\x0a\x09aStream\x0a\x09\x09nextPutAll: (self classNameFor: aClass superclass);\x0a\x09\x09nextPutAll: ' subclass: #', (self classNameFor: aClass); lf;\x0a\x09\x09tab; nextPutAll: 'instanceVariableNames: '''.\x0a\x09aClass instanceVariableNames\x0a\x09\x09do: [:each | aStream nextPutAll: each]\x0a\x09\x09separatedBy: [aStream nextPutAll: ' '].\x0a\x09aStream\x0a\x09\x09nextPutAll: ''''; lf;\x0a\x09\x09tab; nextPutAll: 'package: ''', aClass category, '''!'; lf.\x0a\x09aClass comment notEmpty ifTrue: [\x0a\x09\x09aStream\x0a\x09\x09nextPutAll: '!', (self classNameFor: aClass), ' commentStamp!';lf;\x0a\x09\x09nextPutAll: (self chunkEscape: aClass comment), '!';lf].\x0a\x09aStream lf",
  223. messageSends: ["nextPutAll:", "classNameFor:", "superclass", ",", "lf", "tab", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "chunkEscape:", "comment", "notEmpty"],
  224. referencedClasses: []
  225. }),
  226. smalltalk.ChunkExporter.klass);
  227. smalltalk.addMethod(
  228. smalltalk.method({
  229. selector: "exportMetaDefinitionOf:on:",
  230. category: 'exporting-output',
  231. fn: function (aClass,aStream){
  232. var self=this;
  233. return smalltalk.withContext(function($ctx1) {
  234. var $1,$2,$3,$4,$5;
  235. $1=_st(_st(_st(aClass)._class())._instanceVariableNames())._isEmpty();
  236. if(! smalltalk.assert($1)){
  237. $2=aStream;
  238. _st($2)._nextPutAll_(self._classNameFor_(_st(aClass)._class()));
  239. $3=_st($2)._nextPutAll_(" instanceVariableNames: '");
  240. $3;
  241. _st(_st(_st(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
  242. return smalltalk.withContext(function($ctx2) {
  243. return _st(aStream)._nextPutAll_(each);
  244. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}),(function(){
  245. return smalltalk.withContext(function($ctx2) {
  246. return _st(aStream)._nextPutAll_(" ");
  247. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  248. $4=aStream;
  249. _st($4)._nextPutAll_("'!");
  250. _st($4)._lf();
  251. $5=_st($4)._lf();
  252. $5;
  253. };
  254. return self}, function($ctx1) {$ctx1.fill(self,"exportMetaDefinitionOf:on:",{aClass:aClass,aStream:aStream},smalltalk.ChunkExporter.klass)})},
  255. args: ["aClass", "aStream"],
  256. source: "exportMetaDefinitionOf: aClass on: aStream\x0a\x0a\x09aClass class instanceVariableNames isEmpty ifFalse: [\x0a\x09\x09aStream\x0a\x09\x09\x09nextPutAll: (self classNameFor: aClass class);\x0a\x09\x09\x09nextPutAll: ' instanceVariableNames: '''.\x0a\x09\x09aClass class instanceVariableNames\x0a\x09\x09\x09do: [:each | aStream nextPutAll: each]\x0a\x09\x09\x09separatedBy: [aStream nextPutAll: ' '].\x0a\x09\x09aStream\x0a\x09\x09\x09nextPutAll: '''!'; lf; lf]",
  257. messageSends: ["ifFalse:", "nextPutAll:", "classNameFor:", "class", "do:separatedBy:", "instanceVariableNames", "lf", "isEmpty"],
  258. referencedClasses: []
  259. }),
  260. smalltalk.ChunkExporter.klass);
  261. smalltalk.addMethod(
  262. smalltalk.method({
  263. selector: "exportMethod:on:",
  264. category: 'exporting-output',
  265. fn: function (aMethod,aStream){
  266. var self=this;
  267. return smalltalk.withContext(function($ctx1) {
  268. var $1,$2;
  269. $1=aStream;
  270. _st($1)._lf();
  271. _st($1)._lf();
  272. _st($1)._nextPutAll_(self._chunkEscape_(_st(aMethod)._source()));
  273. _st($1)._lf();
  274. $2=_st($1)._nextPutAll_("!");
  275. return self}, function($ctx1) {$ctx1.fill(self,"exportMethod:on:",{aMethod:aMethod,aStream:aStream},smalltalk.ChunkExporter.klass)})},
  276. args: ["aMethod", "aStream"],
  277. source: "exportMethod: aMethod on: aStream\x0a\x09aStream\x0a\x09\x09lf; lf; nextPutAll: (self chunkEscape: aMethod source); lf;\x0a\x09\x09nextPutAll: '!'",
  278. messageSends: ["lf", "nextPutAll:", "chunkEscape:", "source"],
  279. referencedClasses: []
  280. }),
  281. smalltalk.ChunkExporter.klass);
  282. smalltalk.addMethod(
  283. smalltalk.method({
  284. selector: "exportPackageDefinitionOf:on:",
  285. category: 'exporting-output',
  286. fn: function (package_,aStream){
  287. var self=this;
  288. return smalltalk.withContext(function($ctx1) {
  289. var $1,$2;
  290. $1=aStream;
  291. _st($1)._nextPutAll_(_st("Smalltalk current createPackage: '".__comma(_st(package_)._name())).__comma("'!"));
  292. $2=_st($1)._lf();
  293. return self}, function($ctx1) {$ctx1.fill(self,"exportPackageDefinitionOf:on:",{package_:package_,aStream:aStream},smalltalk.ChunkExporter.klass)})},
  294. args: ["package", "aStream"],
  295. source: "exportPackageDefinitionOf: package on: aStream\x0a\x09\x22Chunk format.\x22\x0a\x0a\x09aStream\x0a\x09\x09nextPutAll: 'Smalltalk current createPackage: ''', package name, '''!';\x0a\x09\x09lf",
  296. messageSends: ["nextPutAll:", ",", "name", "lf"],
  297. referencedClasses: []
  298. }),
  299. smalltalk.ChunkExporter.klass);
  300. smalltalk.addMethod(
  301. smalltalk.method({
  302. selector: "extensionCategoriesOfPackage:",
  303. category: 'exporting-accessing',
  304. fn: function (package_){
  305. var self=this;
  306. var name,map,result;
  307. function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  308. function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  309. function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  310. function $Package(){return smalltalk.Package||(typeof Package=="undefined"?nil:Package)}
  311. return smalltalk.withContext(function($ctx1) {
  312. var $1,$2;
  313. name=_st(package_)._name();
  314. result=_st($OrderedCollection())._new();
  315. _st(_st($Package())._sortedClasses_(_st(_st($Smalltalk())._current())._classes()))._do_((function(each){
  316. return smalltalk.withContext(function($ctx2) {
  317. return _st([each,_st(each)._class()])._do_((function(aClass){
  318. return smalltalk.withContext(function($ctx3) {
  319. map=_st($Dictionary())._new();
  320. map;
  321. _st(aClass)._protocolsDo_((function(category,methods){
  322. return smalltalk.withContext(function($ctx4) {
  323. $1=_st(category)._match_("^\x5c*".__comma(name));
  324. if(smalltalk.assert($1)){
  325. return _st(map)._at_put_(category,methods);
  326. };
  327. }, function($ctx4) {$ctx4.fillBlock({category:category,methods:methods},$ctx3)})}));
  328. return _st(result)._addAll_(_st(_st(_st(map)._keys())._sorted_((function(a,b){
  329. return smalltalk.withContext(function($ctx4) {
  330. return _st(a).__lt_eq(b);
  331. }, function($ctx4) {$ctx4.fillBlock({a:a,b:b},$ctx3)})})))._collect_((function(category){
  332. return smalltalk.withContext(function($ctx4) {
  333. return smalltalk.HashedCollection._from_(["methods".__minus_gt(_st(map)._at_(category)),"name".__minus_gt(category),"class".__minus_gt(aClass)]);
  334. }, function($ctx4) {$ctx4.fillBlock({category:category},$ctx3)})})));
  335. }, function($ctx3) {$ctx3.fillBlock({aClass:aClass},$ctx2)})}));
  336. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}));
  337. $2=result;
  338. return $2;
  339. }, function($ctx1) {$ctx1.fill(self,"extensionCategoriesOfPackage:",{package_:package_,name:name,map:map,result:result},smalltalk.ChunkExporter.klass)})},
  340. args: ["package"],
  341. source: "extensionCategoriesOfPackage: package\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09| name map result |\x0a\x09name := package name.\x0a\x09result := OrderedCollection new.\x0a\x09(Package sortedClasses: Smalltalk current classes) do: [:each |\x0a\x09\x09{each. each class} do: [:aClass |\x0a\x09\x09\x09map := Dictionary new.\x0a\x09\x09\x09aClass protocolsDo: [:category :methods |\x0a\x09\x09\x09\x09(category match: '^\x5c*', name) ifTrue: [ map at: category put: methods ]].\x0a\x09\x09\x09result addAll: ((map keys sorted: [:a :b | a <= b ]) collect: [:category |\x0a\x09\x09\x09\x09#{ 'methods'->(map at: category). 'name'->category. 'class'->aClass}]) ]].\x0a\x09^result",
  342. messageSends: ["name", "new", "do:", "protocolsDo:", "ifTrue:", "at:put:", "match:", ",", "addAll:", "collect:", "->", "at:", "sorted:", "<=", "keys", "class", "sortedClasses:", "classes", "current"],
  343. referencedClasses: ["OrderedCollection", "Dictionary", "Smalltalk", "Package"]
  344. }),
  345. smalltalk.ChunkExporter.klass);
  346. smalltalk.addMethod(
  347. smalltalk.method({
  348. selector: "methodsOfCategory:",
  349. category: 'exporting-accessing',
  350. fn: function (category){
  351. var self=this;
  352. return smalltalk.withContext(function($ctx1) {
  353. var $1;
  354. $1=_st(_st(category)._at_("methods"))._sorted_((function(a,b){
  355. return smalltalk.withContext(function($ctx2) {
  356. return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
  357. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1)})}));
  358. return $1;
  359. }, function($ctx1) {$ctx1.fill(self,"methodsOfCategory:",{category:category},smalltalk.ChunkExporter.klass)})},
  360. args: ["category"],
  361. source: "methodsOfCategory: category\x0a\x09\x22Issue #143: sort methods alphabetically\x22\x0a\x0a\x09^(category at: #methods) sorted: [:a :b | a selector <= b selector]",
  362. messageSends: ["sorted:", "<=", "selector", "at:"],
  363. referencedClasses: []
  364. }),
  365. smalltalk.ChunkExporter.klass);
  366. smalltalk.addMethod(
  367. smalltalk.method({
  368. selector: "ownCategoriesOfClass:",
  369. category: 'exporting-accessing',
  370. fn: function (aClass){
  371. var self=this;
  372. var map;
  373. function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  374. return smalltalk.withContext(function($ctx1) {
  375. var $1,$2;
  376. map=_st($Dictionary())._new();
  377. _st(aClass)._protocolsDo_((function(category,methods){
  378. return smalltalk.withContext(function($ctx2) {
  379. $1=_st(category)._match_("^\x5c*");
  380. if(! smalltalk.assert($1)){
  381. return _st(map)._at_put_(category,methods);
  382. };
  383. }, function($ctx2) {$ctx2.fillBlock({category:category,methods:methods},$ctx1)})}));
  384. $2=_st(_st(_st(map)._keys())._sorted_((function(a,b){
  385. return smalltalk.withContext(function($ctx2) {
  386. return _st(a).__lt_eq(b);
  387. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1)})})))._collect_((function(category){
  388. return smalltalk.withContext(function($ctx2) {
  389. return smalltalk.HashedCollection._from_(["methods".__minus_gt(_st(map)._at_(category)),"name".__minus_gt(category),"class".__minus_gt(aClass)]);
  390. }, function($ctx2) {$ctx2.fillBlock({category:category},$ctx1)})}));
  391. return $2;
  392. }, function($ctx1) {$ctx1.fill(self,"ownCategoriesOfClass:",{aClass:aClass,map:map},smalltalk.ChunkExporter.klass)})},
  393. args: ["aClass"],
  394. source: "ownCategoriesOfClass: aClass\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09| map |\x0a\x09map := Dictionary new.\x0a\x09aClass protocolsDo: [:category :methods |\x0a\x09\x09(category match: '^\x5c*') ifFalse: [ map at: category put: methods ]].\x0a\x09^(map keys sorted: [:a :b | a <= b ]) collect: [:category |\x0a\x09\x09#{\x0a\x09\x09\x09'methods'->(map at: category).\x0a\x09\x09\x09'name'->category.\x0a\x09\x09\x09'class'->aClass }]",
  395. messageSends: ["new", "protocolsDo:", "ifFalse:", "at:put:", "match:", "collect:", "->", "at:", "sorted:", "<=", "keys"],
  396. referencedClasses: ["Dictionary"]
  397. }),
  398. smalltalk.ChunkExporter.klass);
  399. smalltalk.addMethod(
  400. smalltalk.method({
  401. selector: "ownCategoriesOfMetaClass:",
  402. category: 'exporting-accessing',
  403. fn: function (aClass){
  404. var self=this;
  405. return smalltalk.withContext(function($ctx1) {
  406. var $1;
  407. $1=self._ownCategoriesOfClass_(_st(aClass)._class());
  408. return $1;
  409. }, function($ctx1) {$ctx1.fill(self,"ownCategoriesOfMetaClass:",{aClass:aClass},smalltalk.ChunkExporter.klass)})},
  410. args: ["aClass"],
  411. source: "ownCategoriesOfMetaClass: aClass\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09^self ownCategoriesOfClass: aClass class",
  412. messageSends: ["ownCategoriesOfClass:", "class"],
  413. referencedClasses: []
  414. }),
  415. smalltalk.ChunkExporter.klass);
  416. smalltalk.addMethod(
  417. smalltalk.method({
  418. selector: "recipe",
  419. category: 'fileOut',
  420. fn: function (){
  421. var self=this;
  422. var exportCategoryRecipe;
  423. function $PluggableExporter(){return smalltalk.PluggableExporter||(typeof PluggableExporter=="undefined"?nil:PluggableExporter)}
  424. return smalltalk.withContext(function($ctx1) {
  425. var $1;
  426. exportCategoryRecipe=[self.__minus_gt("exportCategoryPrologueOf:on:"),[self.__minus_gt("methodsOfCategory:"),self.__minus_gt("exportMethod:on:")],self.__minus_gt("exportCategoryEpilogueOf:on:")];
  427. $1=[self.__minus_gt("exportPackageDefinitionOf:on:"),[_st($PluggableExporter()).__minus_gt("ownClassesOfPackage:"),self.__minus_gt("exportDefinitionOf:on:"),_st([self.__minus_gt("ownCategoriesOfClass:")]).__comma(exportCategoryRecipe),self.__minus_gt("exportMetaDefinitionOf:on:"),_st([self.__minus_gt("ownCategoriesOfMetaClass:")]).__comma(exportCategoryRecipe)],_st([self.__minus_gt("extensionCategoriesOfPackage:")]).__comma(exportCategoryRecipe)];
  428. return $1;
  429. }, function($ctx1) {$ctx1.fill(self,"recipe",{exportCategoryRecipe:exportCategoryRecipe},smalltalk.ChunkExporter.klass)})},
  430. args: [],
  431. source: "recipe\x0a\x09\x22Export a given package.\x22\x0a\x0a\x09| exportCategoryRecipe |\x0a\x09exportCategoryRecipe := {\x0a\x09\x09self -> #exportCategoryPrologueOf:on:.\x0a\x09\x09{\x0a\x09\x09\x09self -> #methodsOfCategory:.\x0a\x09\x09\x09self -> #exportMethod:on: }.\x0a\x09\x09self -> #exportCategoryEpilogueOf:on: }.\x0a\x0a\x09^{\x0a\x09\x09self -> #exportPackageDefinitionOf:on:.\x0a\x09\x09{\x0a\x09\x09\x09PluggableExporter -> #ownClassesOfPackage:.\x0a\x09\x09\x09self -> #exportDefinitionOf:on:.\x0a\x09\x09\x09{ self -> #ownCategoriesOfClass: }, exportCategoryRecipe.\x0a\x09\x09\x09self -> #exportMetaDefinitionOf:on:.\x0a\x09\x09\x09{ self -> #ownCategoriesOfMetaClass: }, exportCategoryRecipe }.\x0a\x09\x09{ self -> #extensionCategoriesOfPackage: }, exportCategoryRecipe\x0a\x09}",
  432. messageSends: ["->", ","],
  433. referencedClasses: ["PluggableExporter"]
  434. }),
  435. smalltalk.ChunkExporter.klass);
  436. smalltalk.addClass('ChunkParser', smalltalk.Object, ['stream'], 'Importer-Exporter');
  437. smalltalk.ChunkParser.comment="I am responsible for parsing aStream contents in the chunk format.\x0a\x0a## API\x0a\x0a ChunkParser new\x0a stream: aStream;\x0a nextChunk";
  438. smalltalk.addMethod(
  439. smalltalk.method({
  440. selector: "nextChunk",
  441. category: 'reading',
  442. fn: function (){
  443. var self=this;
  444. var char,result,chunk;
  445. return smalltalk.withContext(function($ctx1) {
  446. var $1,$2,$3;
  447. var $early={};
  448. try {
  449. result=""._writeStream();
  450. _st((function(){
  451. return smalltalk.withContext(function($ctx2) {
  452. char=_st(self["@stream"])._next();
  453. char;
  454. return _st(char)._notNil();
  455. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}))._whileTrue_((function(){
  456. return smalltalk.withContext(function($ctx2) {
  457. $1=_st(char).__eq("!");
  458. if(smalltalk.assert($1)){
  459. $2=_st(_st(self["@stream"])._peek()).__eq("!");
  460. if(smalltalk.assert($2)){
  461. _st(self["@stream"])._next();
  462. } else {
  463. $3=_st(_st(result)._contents())._trimBoth();
  464. throw $early=[$3];
  465. };
  466. };
  467. return _st(result)._nextPut_(char);
  468. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  469. return nil;
  470. }
  471. catch(e) {if(e===$early)return e[0]; throw e}
  472. }, function($ctx1) {$ctx1.fill(self,"nextChunk",{char:char,result:result,chunk:chunk},smalltalk.ChunkParser)})},
  473. args: [],
  474. source: "nextChunk\x0a\x09\x22The chunk format (Smalltalk Interchange Format or Fileout format)\x0a\x09is a trivial format but can be a bit tricky to understand:\x0a\x09\x09- Uses the exclamation mark as delimiter of chunks.\x0a\x09\x09- Inside a chunk a normal exclamation mark must be doubled.\x0a\x09\x09- A non empty chunk must be a valid Smalltalk expression.\x0a\x09\x09- A chunk on top level with a preceding empty chunk is an instruction chunk:\x0a\x09\x09\x09- The object created by the expression then takes over reading chunks.\x0a\x0a\x09This metod returns next chunk as a String (trimmed), empty String (all whitespace) or nil.\x22\x0a\x0a\x09| char result chunk |\x0a\x09result := '' writeStream.\x0a\x09\x09[char := stream next.\x0a\x09\x09char notNil] whileTrue: [\x0a\x09\x09\x09\x09char = '!' ifTrue: [\x0a\x09\x09\x09\x09\x09\x09stream peek = '!'\x0a\x09\x09\x09\x09\x09\x09\x09\x09ifTrue: [stream next \x22skipping the escape double\x22]\x0a\x09\x09\x09\x09\x09\x09\x09\x09ifFalse: [^result contents trimBoth \x22chunk end marker found\x22]].\x0a\x09\x09\x09\x09result nextPut: char].\x0a\x09^nil \x22a chunk needs to end with !\x22",
  475. messageSends: ["writeStream", "whileTrue:", "ifTrue:", "ifTrue:ifFalse:", "next", "trimBoth", "contents", "=", "peek", "nextPut:", "notNil"],
  476. referencedClasses: []
  477. }),
  478. smalltalk.ChunkParser);
  479. smalltalk.addMethod(
  480. smalltalk.method({
  481. selector: "stream:",
  482. category: 'accessing',
  483. fn: function (aStream){
  484. var self=this;
  485. return smalltalk.withContext(function($ctx1) {
  486. self["@stream"]=aStream;
  487. return self}, function($ctx1) {$ctx1.fill(self,"stream:",{aStream:aStream},smalltalk.ChunkParser)})},
  488. args: ["aStream"],
  489. source: "stream: aStream\x0a\x09stream := aStream",
  490. messageSends: [],
  491. referencedClasses: []
  492. }),
  493. smalltalk.ChunkParser);
  494. smalltalk.addMethod(
  495. smalltalk.method({
  496. selector: "on:",
  497. category: 'not yet classified',
  498. fn: function (aStream){
  499. var self=this;
  500. return smalltalk.withContext(function($ctx1) {
  501. var $1;
  502. $1=_st(self._new())._stream_(aStream);
  503. return $1;
  504. }, function($ctx1) {$ctx1.fill(self,"on:",{aStream:aStream},smalltalk.ChunkParser.klass)})},
  505. args: ["aStream"],
  506. source: "on: aStream\x0a\x09^self new stream: aStream",
  507. messageSends: ["stream:", "new"],
  508. referencedClasses: []
  509. }),
  510. smalltalk.ChunkParser.klass);
  511. smalltalk.addClass('Exporter', smalltalk.Object, [], 'Importer-Exporter');
  512. smalltalk.Exporter.comment="I am responsible for outputting Amber code into a JavaScript string.\x0a\x0aThe generated output is enough to reconstruct the exported data, including Smalltalk source code and other metadata.\x0a\x0a## Use case\x0a\x0aI am typically used to save code outside of the Amber runtime (committing to disk, etc.).\x0a\x0a## API\x0a\x0aUse `#exportAll`, `#exportClass:` or `#exportPackage:` methods.";
  513. smalltalk.addMethod(
  514. smalltalk.method({
  515. selector: "amdRecipe",
  516. category: 'fileOut',
  517. fn: function (){
  518. var self=this;
  519. var legacy;
  520. function $AmdExporter(){return smalltalk.AmdExporter||(typeof AmdExporter=="undefined"?nil:AmdExporter)}
  521. return smalltalk.withContext(function($ctx1) {
  522. var $1;
  523. legacy=self._recipe();
  524. $1=_st(_st(_st(legacy)._copyFrom_to_((1),(2))).__comma([_st($AmdExporter()).__minus_gt("exportPackageTransportOf:on:")])).__comma(_st(legacy)._copyFrom_to_((3),_st(legacy)._size()));
  525. return $1;
  526. }, function($ctx1) {$ctx1.fill(self,"amdRecipe",{legacy:legacy},smalltalk.Exporter.klass)})},
  527. args: [],
  528. source: "amdRecipe\x0a\x09\x22Export a given package with amd transport type.\x22\x0a\x0a\x09| legacy |\x0a\x09legacy := self recipe.\x0a\x09^(legacy copyFrom: 1 to: 2),\x0a\x09{ AmdExporter -> #exportPackageTransportOf:on: },\x0a\x09(legacy copyFrom: 3 to: legacy size)",
  529. messageSends: ["recipe", ",", "copyFrom:to:", "size", "->"],
  530. referencedClasses: ["AmdExporter"]
  531. }),
  532. smalltalk.Exporter.klass);
  533. smalltalk.addMethod(
  534. smalltalk.method({
  535. selector: "classNameFor:",
  536. category: 'private',
  537. fn: function (aClass){
  538. var self=this;
  539. return smalltalk.withContext(function($ctx1) {
  540. var $2,$3,$1;
  541. $2=_st(aClass)._isMetaclass();
  542. if(smalltalk.assert($2)){
  543. $1=_st(_st(_st(aClass)._instanceClass())._name()).__comma(".klass");
  544. } else {
  545. $3=_st(aClass)._isNil();
  546. if(smalltalk.assert($3)){
  547. $1="nil";
  548. } else {
  549. $1=_st(aClass)._name();
  550. };
  551. };
  552. return $1;
  553. }, function($ctx1) {$ctx1.fill(self,"classNameFor:",{aClass:aClass},smalltalk.Exporter.klass)})},
  554. args: ["aClass"],
  555. source: "classNameFor: aClass\x0a\x09^aClass isMetaclass\x0a\x09\x09ifTrue: [aClass instanceClass name, '.klass']\x0a\x09\x09ifFalse: [\x0a\x09\x09aClass isNil\x0a\x09\x09\x09ifTrue: ['nil']\x0a\x09\x09\x09ifFalse: [aClass name]]",
  556. messageSends: ["ifTrue:ifFalse:", ",", "name", "instanceClass", "isNil", "isMetaclass"],
  557. referencedClasses: []
  558. }),
  559. smalltalk.Exporter.klass);
  560. smalltalk.addMethod(
  561. smalltalk.method({
  562. selector: "exportDefinitionOf:on:",
  563. category: 'exporting-output',
  564. fn: function (aClass,aStream){
  565. var self=this;
  566. return smalltalk.withContext(function($ctx1) {
  567. var $1,$2,$3,$4,$5,$6,$7;
  568. $1=aStream;
  569. _st($1)._lf();
  570. _st($1)._nextPutAll_("smalltalk.addClass(");
  571. _st($1)._nextPutAll_(_st("'".__comma(self._classNameFor_(aClass))).__comma("', "));
  572. _st($1)._nextPutAll_("smalltalk.".__comma(self._classNameFor_(_st(aClass)._superclass())));
  573. $2=_st($1)._nextPutAll_(", [");
  574. _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
  575. return smalltalk.withContext(function($ctx2) {
  576. return _st(aStream)._nextPutAll_(_st("'".__comma(each)).__comma("'"));
  577. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}),(function(){
  578. return smalltalk.withContext(function($ctx2) {
  579. return _st(aStream)._nextPutAll_(", ");
  580. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  581. $3=aStream;
  582. _st($3)._nextPutAll_("], '");
  583. _st($3)._nextPutAll_(_st(_st(aClass)._category()).__comma("'"));
  584. $4=_st($3)._nextPutAll_(");");
  585. $5=_st(_st(aClass)._comment())._notEmpty();
  586. if(smalltalk.assert($5)){
  587. $6=aStream;
  588. _st($6)._lf();
  589. _st($6)._nextPutAll_("smalltalk.");
  590. _st($6)._nextPutAll_(self._classNameFor_(aClass));
  591. _st($6)._nextPutAll_(".comment=");
  592. _st($6)._nextPutAll_(_st(_st(aClass)._comment())._asJavascript());
  593. $7=_st($6)._nextPutAll_(";");
  594. $7;
  595. };
  596. _st(aStream)._lf();
  597. return self}, function($ctx1) {$ctx1.fill(self,"exportDefinitionOf:on:",{aClass:aClass,aStream:aStream},smalltalk.Exporter.klass)})},
  598. args: ["aClass", "aStream"],
  599. source: "exportDefinitionOf: aClass on: aStream\x0a\x09aStream\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: 'smalltalk.addClass(';\x0a\x09\x09nextPutAll: '''', (self classNameFor: aClass), ''', ';\x0a\x09\x09nextPutAll: 'smalltalk.', (self classNameFor: aClass superclass);\x0a\x09\x09nextPutAll: ', ['.\x0a\x09aClass instanceVariableNames\x0a\x09\x09do: [:each | aStream nextPutAll: '''', each, '''']\x0a\x09\x09separatedBy: [aStream nextPutAll: ', '].\x0a\x09aStream\x0a\x09\x09nextPutAll: '], ''';\x0a\x09\x09nextPutAll: aClass category, '''';\x0a\x09\x09nextPutAll: ');'.\x0a\x09aClass comment notEmpty ifTrue: [\x0a\x09\x09aStream\x0a\x09\x09\x09lf;\x0a\x09\x09nextPutAll: 'smalltalk.';\x0a\x09\x09nextPutAll: (self classNameFor: aClass);\x0a\x09\x09nextPutAll: '.comment=';\x0a\x09\x09nextPutAll: aClass comment asJavascript;\x0a\x09\x09nextPutAll: ';'].\x0a\x09aStream lf",
  600. messageSends: ["lf", "nextPutAll:", ",", "classNameFor:", "superclass", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "asJavascript", "comment", "notEmpty"],
  601. referencedClasses: []
  602. }),
  603. smalltalk.Exporter.klass);
  604. smalltalk.addMethod(
  605. smalltalk.method({
  606. selector: "exportMetaDefinitionOf:on:",
  607. category: 'exporting-output',
  608. fn: function (aClass,aStream){
  609. var self=this;
  610. function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
  611. return smalltalk.withContext(function($ctx1) {
  612. var $1,$2,$3;
  613. _st(aStream)._lf();
  614. $1=_st(_st(_st(aClass)._class())._instanceVariableNames())._isEmpty();
  615. if(! smalltalk.assert($1)){
  616. $2=aStream;
  617. _st($2)._nextPutAll_("smalltalk.".__comma(self._classNameFor_(_st(aClass)._class())));
  618. $3=_st($2)._nextPutAll_(".iVarNames = [");
  619. $3;
  620. _st(_st(_st(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
  621. return smalltalk.withContext(function($ctx2) {
  622. return _st(aStream)._nextPutAll_(_st("'".__comma(each)).__comma("'"));
  623. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}),(function(){
  624. return smalltalk.withContext(function($ctx2) {
  625. return _st(aStream)._nextPutAll_(",");
  626. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  627. _st(aStream)._nextPutAll_("];".__comma(_st($String())._lf()));
  628. };
  629. return self}, function($ctx1) {$ctx1.fill(self,"exportMetaDefinitionOf:on:",{aClass:aClass,aStream:aStream},smalltalk.Exporter.klass)})},
  630. args: ["aClass", "aStream"],
  631. source: "exportMetaDefinitionOf: aClass on: aStream\x0a\x09aStream lf.\x0a\x09aClass class instanceVariableNames isEmpty ifFalse: [\x0a\x09\x09aStream\x0a\x09\x09nextPutAll: 'smalltalk.', (self classNameFor: aClass class);\x0a\x09\x09nextPutAll: '.iVarNames = ['.\x0a\x09\x09aClass class instanceVariableNames\x0a\x09\x09do: [:each | aStream nextPutAll: '''', each, '''']\x0a\x09\x09separatedBy: [aStream nextPutAll: ','].\x0a\x09\x09aStream nextPutAll: '];', String lf]",
  632. messageSends: ["lf", "ifFalse:", "nextPutAll:", ",", "classNameFor:", "class", "do:separatedBy:", "instanceVariableNames", "isEmpty"],
  633. referencedClasses: ["String"]
  634. }),
  635. smalltalk.Exporter.klass);
  636. smalltalk.addMethod(
  637. smalltalk.method({
  638. selector: "exportMethod:on:",
  639. category: 'exporting-output',
  640. fn: function (aMethod,aStream){
  641. var self=this;
  642. return smalltalk.withContext(function($ctx1) {
  643. var $1,$2,$3,$4;
  644. $1=aStream;
  645. _st($1)._nextPutAll_("smalltalk.addMethod(");
  646. _st($1)._lf();
  647. _st($1)._nextPutAll_("smalltalk.method({");
  648. _st($1)._lf();
  649. _st($1)._nextPutAll_(_st("selector: ".__comma(_st(_st(aMethod)._selector())._asJavascript())).__comma(","));
  650. _st($1)._lf();
  651. _st($1)._nextPutAll_(_st("category: '".__comma(_st(aMethod)._category())).__comma("',"));
  652. _st($1)._lf();
  653. _st($1)._nextPutAll_(_st("fn: ".__comma(_st(_st(aMethod)._fn())._compiledSource())).__comma(","));
  654. _st($1)._lf();
  655. _st($1)._nextPutAll_(_st("args: ".__comma(_st(_st(aMethod)._arguments())._asJavascript())).__comma(","));
  656. _st($1)._lf();
  657. _st($1)._nextPutAll_(_st("source: ".__comma(_st(_st(aMethod)._source())._asJavascript())).__comma(","));
  658. _st($1)._lf();
  659. _st($1)._nextPutAll_(_st("messageSends: ".__comma(_st(_st(aMethod)._messageSends())._asJavascript())).__comma(","));
  660. _st($1)._lf();
  661. $2=_st($1)._nextPutAll_("referencedClasses: ".__comma(_st(_st(aMethod)._referencedClasses())._asJavascript()));
  662. $3=aStream;
  663. _st($3)._lf();
  664. _st($3)._nextPutAll_("}),");
  665. _st($3)._lf();
  666. _st($3)._nextPutAll_("smalltalk.".__comma(self._classNameFor_(_st(aMethod)._methodClass())));
  667. _st($3)._nextPutAll_(");");
  668. _st($3)._lf();
  669. $4=_st($3)._lf();
  670. return self}, function($ctx1) {$ctx1.fill(self,"exportMethod:on:",{aMethod:aMethod,aStream:aStream},smalltalk.Exporter.klass)})},
  671. args: ["aMethod", "aStream"],
  672. source: "exportMethod: aMethod on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: 'smalltalk.addMethod(';lf;\x0a\x09\x09\x22nextPutAll: aMethod selector asSelector asJavascript, ',';lf;\x22\x0a\x09\x09nextPutAll: 'smalltalk.method({';lf;\x0a\x09\x09nextPutAll: 'selector: ', aMethod selector asJavascript, ',';lf;\x0a\x09\x09nextPutAll: 'category: ''', aMethod category, ''',';lf;\x0a\x09\x09nextPutAll: 'fn: ', aMethod fn compiledSource, ',';lf;\x0a\x09\x09nextPutAll: 'args: ', aMethod arguments asJavascript, ','; lf;\x0a\x09\x09nextPutAll: 'source: ', aMethod source asJavascript, ',';lf;\x0a\x09\x09nextPutAll: 'messageSends: ', aMethod messageSends asJavascript, ',';lf;\x0a\x09\x09nextPutAll: 'referencedClasses: ', aMethod referencedClasses asJavascript.\x0a\x09aStream\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: '}),';lf;\x0a\x09\x09nextPutAll: 'smalltalk.', (self classNameFor: aMethod methodClass);\x0a\x09\x09nextPutAll: ');';lf;lf",
  673. messageSends: ["nextPutAll:", "lf", ",", "asJavascript", "selector", "category", "compiledSource", "fn", "arguments", "source", "messageSends", "referencedClasses", "classNameFor:", "methodClass"],
  674. referencedClasses: []
  675. }),
  676. smalltalk.Exporter.klass);
  677. smalltalk.addMethod(
  678. smalltalk.method({
  679. selector: "exportPackageDefinitionOf:on:",
  680. category: 'exporting-output',
  681. fn: function (package_,aStream){
  682. var self=this;
  683. return smalltalk.withContext(function($ctx1) {
  684. var $1,$2;
  685. $1=aStream;
  686. _st($1)._nextPutAll_("smalltalk.addPackage(");
  687. _st($1)._nextPutAll_(_st("'".__comma(_st(package_)._name())).__comma("');"));
  688. $2=_st($1)._lf();
  689. return self}, function($ctx1) {$ctx1.fill(self,"exportPackageDefinitionOf:on:",{package_:package_,aStream:aStream},smalltalk.Exporter.klass)})},
  690. args: ["package", "aStream"],
  691. source: "exportPackageDefinitionOf: package on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: 'smalltalk.addPackage(';\x0a\x09\x09nextPutAll: '''', package name, ''');';\x0a\x09\x09lf",
  692. messageSends: ["nextPutAll:", ",", "name", "lf"],
  693. referencedClasses: []
  694. }),
  695. smalltalk.Exporter.klass);
  696. smalltalk.addMethod(
  697. smalltalk.method({
  698. selector: "exportPackageEpilogueOf:on:",
  699. category: 'exporting-output',
  700. fn: function (aPackage,aStream){
  701. var self=this;
  702. return smalltalk.withContext(function($ctx1) {
  703. var $1,$2;
  704. $1=aStream;
  705. _st($1)._nextPutAll_("})(global_smalltalk,global_nil,global__st);");
  706. $2=_st($1)._lf();
  707. return self}, function($ctx1) {$ctx1.fill(self,"exportPackageEpilogueOf:on:",{aPackage:aPackage,aStream:aStream},smalltalk.Exporter.klass)})},
  708. args: ["aPackage", "aStream"],
  709. source: "exportPackageEpilogueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '})(global_smalltalk,global_nil,global__st);';\x0a\x09\x09lf",
  710. messageSends: ["nextPutAll:", "lf"],
  711. referencedClasses: []
  712. }),
  713. smalltalk.Exporter.klass);
  714. smalltalk.addMethod(
  715. smalltalk.method({
  716. selector: "exportPackagePrologueOf:on:",
  717. category: 'exporting-output',
  718. fn: function (aPackage,aStream){
  719. var self=this;
  720. return smalltalk.withContext(function($ctx1) {
  721. var $1,$2;
  722. $1=aStream;
  723. _st($1)._nextPutAll_("(function(smalltalk,nil,_st){");
  724. $2=_st($1)._lf();
  725. return self}, function($ctx1) {$ctx1.fill(self,"exportPackagePrologueOf:on:",{aPackage:aPackage,aStream:aStream},smalltalk.Exporter.klass)})},
  726. args: ["aPackage", "aStream"],
  727. source: "exportPackagePrologueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '(function(smalltalk,nil,_st){';\x0a\x09\x09lf",
  728. messageSends: ["nextPutAll:", "lf"],
  729. referencedClasses: []
  730. }),
  731. smalltalk.Exporter.klass);
  732. smalltalk.addMethod(
  733. smalltalk.method({
  734. selector: "extensionMethodsOfPackage:",
  735. category: 'exporting-accessing',
  736. fn: function (package_){
  737. var self=this;
  738. var name,result;
  739. function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  740. function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  741. function $Package(){return smalltalk.Package||(typeof Package=="undefined"?nil:Package)}
  742. return smalltalk.withContext(function($ctx1) {
  743. var $1;
  744. name=_st(package_)._name();
  745. result=_st($OrderedCollection())._new();
  746. _st(_st($Package())._sortedClasses_(_st(_st($Smalltalk())._current())._classes()))._do_((function(each){
  747. return smalltalk.withContext(function($ctx2) {
  748. return _st([each,_st(each)._class()])._do_((function(aClass){
  749. return smalltalk.withContext(function($ctx3) {
  750. return _st(result)._addAll_(_st(_st(_st(_st(aClass)._methodDictionary())._values())._sorted_((function(a,b){
  751. return smalltalk.withContext(function($ctx4) {
  752. return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
  753. }, function($ctx4) {$ctx4.fillBlock({a:a,b:b},$ctx3)})})))._select_((function(method){
  754. return smalltalk.withContext(function($ctx4) {
  755. return _st(_st(method)._category())._match_("^\x5c*".__comma(name));
  756. }, function($ctx4) {$ctx4.fillBlock({method:method},$ctx3)})})));
  757. }, function($ctx3) {$ctx3.fillBlock({aClass:aClass},$ctx2)})}));
  758. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}));
  759. $1=result;
  760. return $1;
  761. }, function($ctx1) {$ctx1.fill(self,"extensionMethodsOfPackage:",{package_:package_,name:name,result:result},smalltalk.Exporter.klass)})},
  762. args: ["package"],
  763. source: "extensionMethodsOfPackage: package\x0a\x09\x22Issue #143: sort classes and methods alphabetically\x22\x0a\x0a\x09| name result |\x0a\x09name := package name.\x0a\x09result := OrderedCollection new.\x0a\x09(Package sortedClasses: Smalltalk current classes) do: [:each |\x0a\x09\x09{each. each class} do: [:aClass |\x0a\x09\x09\x09result addAll: (((aClass methodDictionary values)\x0a\x09\x09\x09\x09sorted: [:a :b | a selector <= b selector])\x0a\x09\x09\x09\x09select: [:method | method category match: '^\x5c*', name]) ]].\x0a\x09^result",
  764. messageSends: ["name", "new", "do:", "addAll:", "select:", "match:", ",", "category", "sorted:", "<=", "selector", "values", "methodDictionary", "class", "sortedClasses:", "classes", "current"],
  765. referencedClasses: ["OrderedCollection", "Smalltalk", "Package"]
  766. }),
  767. smalltalk.Exporter.klass);
  768. smalltalk.addMethod(
  769. smalltalk.method({
  770. selector: "ownMethodsOfClass:",
  771. category: 'exporting-accessing',
  772. fn: function (aClass){
  773. var self=this;
  774. return smalltalk.withContext(function($ctx1) {
  775. var $1;
  776. $1=_st(_st(_st(_st(aClass)._methodDictionary())._values())._sorted_((function(a,b){
  777. return smalltalk.withContext(function($ctx2) {
  778. return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
  779. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1)})})))._reject_((function(each){
  780. return smalltalk.withContext(function($ctx2) {
  781. return _st(_st(each)._category())._match_("^\x5c*");
  782. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}));
  783. return $1;
  784. }, function($ctx1) {$ctx1.fill(self,"ownMethodsOfClass:",{aClass:aClass},smalltalk.Exporter.klass)})},
  785. args: ["aClass"],
  786. source: "ownMethodsOfClass: aClass\x0a\x09\x22Issue #143: sort methods alphabetically\x22\x0a\x0a\x09^((aClass methodDictionary values) sorted: [:a :b | a selector <= b selector])\x0a\x09\x09reject: [:each | (each category match: '^\x5c*')]",
  787. messageSends: ["reject:", "match:", "category", "sorted:", "<=", "selector", "values", "methodDictionary"],
  788. referencedClasses: []
  789. }),
  790. smalltalk.Exporter.klass);
  791. smalltalk.addMethod(
  792. smalltalk.method({
  793. selector: "ownMethodsOfMetaClass:",
  794. category: 'exporting-accessing',
  795. fn: function (aClass){
  796. var self=this;
  797. return smalltalk.withContext(function($ctx1) {
  798. var $1;
  799. $1=self._ownMethodsOfClass_(_st(aClass)._class());
  800. return $1;
  801. }, function($ctx1) {$ctx1.fill(self,"ownMethodsOfMetaClass:",{aClass:aClass},smalltalk.Exporter.klass)})},
  802. args: ["aClass"],
  803. source: "ownMethodsOfMetaClass: aClass\x0a\x09\x22Issue #143: sort methods alphabetically\x22\x0a\x0a\x09^self ownMethodsOfClass: aClass class",
  804. messageSends: ["ownMethodsOfClass:", "class"],
  805. referencedClasses: []
  806. }),
  807. smalltalk.Exporter.klass);
  808. smalltalk.addMethod(
  809. smalltalk.method({
  810. selector: "recipe",
  811. category: 'fileOut',
  812. fn: function (){
  813. var self=this;
  814. function $AmdExporter(){return smalltalk.AmdExporter||(typeof AmdExporter=="undefined"?nil:AmdExporter)}
  815. function $PluggableExporter(){return smalltalk.PluggableExporter||(typeof PluggableExporter=="undefined"?nil:PluggableExporter)}
  816. return smalltalk.withContext(function($ctx1) {
  817. var $1;
  818. $1=[_st($AmdExporter()).__minus_gt("exportPackagePrologueOf:on:"),self.__minus_gt("exportPackageDefinitionOf:on:"),[_st($PluggableExporter()).__minus_gt("ownClassesOfPackage:"),self.__minus_gt("exportDefinitionOf:on:"),[self.__minus_gt("ownMethodsOfClass:"),self.__minus_gt("exportMethod:on:")],self.__minus_gt("exportMetaDefinitionOf:on:"),[self.__minus_gt("ownMethodsOfMetaClass:"),self.__minus_gt("exportMethod:on:")]],[self.__minus_gt("extensionMethodsOfPackage:"),self.__minus_gt("exportMethod:on:")],_st($AmdExporter()).__minus_gt("exportPackageEpilogueOf:on:")];
  819. return $1;
  820. }, function($ctx1) {$ctx1.fill(self,"recipe",{},smalltalk.Exporter.klass)})},
  821. args: [],
  822. source: "recipe\x0a\x09\x22Export a given package.\x22\x0a\x0a\x09^{\x0a\x09\x09AmdExporter -> #exportPackagePrologueOf:on:.\x0a\x09\x09self -> #exportPackageDefinitionOf:on:.\x0a\x09\x09{\x0a\x09\x09\x09PluggableExporter -> #ownClassesOfPackage:.\x0a\x09\x09\x09self -> #exportDefinitionOf:on:.\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09self -> #ownMethodsOfClass:.\x0a\x09\x09\x09\x09self -> #exportMethod:on: }.\x0a\x09\x09\x09self -> #exportMetaDefinitionOf:on:.\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09self -> #ownMethodsOfMetaClass:.\x0a\x09\x09\x09\x09self -> #exportMethod:on: } }.\x0a\x09\x09{\x0a\x09\x09\x09self -> #extensionMethodsOfPackage:.\x0a\x09\x09\x09self -> #exportMethod:on: }.\x0a\x09\x09AmdExporter -> #exportPackageEpilogueOf:on:\x0a\x09}",
  823. messageSends: ["->"],
  824. referencedClasses: ["AmdExporter", "PluggableExporter"]
  825. }),
  826. smalltalk.Exporter.klass);
  827. smalltalk.addClass('StrippedExporter', smalltalk.Exporter, [], 'Importer-Exporter');
  828. smalltalk.StrippedExporter.comment="I export Amber code into a JavaScript string, but without any optional associated data like the Amber source code.";
  829. smalltalk.addMethod(
  830. smalltalk.method({
  831. selector: "exportDefinitionOf:on:",
  832. category: 'exporting-output',
  833. fn: function (aClass,aStream){
  834. var self=this;
  835. return smalltalk.withContext(function($ctx1) {
  836. var $1,$2,$3,$4;
  837. $1=aStream;
  838. _st($1)._lf();
  839. _st($1)._nextPutAll_("smalltalk.addClass(");
  840. _st($1)._nextPutAll_(_st("'".__comma(self._classNameFor_(aClass))).__comma("', "));
  841. _st($1)._nextPutAll_("smalltalk.".__comma(self._classNameFor_(_st(aClass)._superclass())));
  842. $2=_st($1)._nextPutAll_(", [");
  843. _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
  844. return smalltalk.withContext(function($ctx2) {
  845. return _st(aStream)._nextPutAll_(_st("'".__comma(each)).__comma("'"));
  846. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}),(function(){
  847. return smalltalk.withContext(function($ctx2) {
  848. return _st(aStream)._nextPutAll_(", ");
  849. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  850. $3=aStream;
  851. _st($3)._nextPutAll_("], '");
  852. _st($3)._nextPutAll_(_st(_st(aClass)._category()).__comma("'"));
  853. $4=_st($3)._nextPutAll_(");");
  854. _st(aStream)._lf();
  855. return self}, function($ctx1) {$ctx1.fill(self,"exportDefinitionOf:on:",{aClass:aClass,aStream:aStream},smalltalk.StrippedExporter.klass)})},
  856. args: ["aClass", "aStream"],
  857. source: "exportDefinitionOf: aClass on: aStream\x0a\x09aStream\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: 'smalltalk.addClass(';\x0a\x09\x09nextPutAll: '''', (self classNameFor: aClass), ''', ';\x0a\x09\x09nextPutAll: 'smalltalk.', (self classNameFor: aClass superclass);\x0a\x09\x09nextPutAll: ', ['.\x0a\x09aClass instanceVariableNames\x0a\x09\x09do: [:each | aStream nextPutAll: '''', each, '''']\x0a\x09\x09separatedBy: [aStream nextPutAll: ', '].\x0a\x09aStream\x0a\x09\x09nextPutAll: '], ''';\x0a\x09\x09nextPutAll: aClass category, '''';\x0a\x09\x09nextPutAll: ');'.\x0a\x09aStream lf",
  858. messageSends: ["lf", "nextPutAll:", ",", "classNameFor:", "superclass", "do:separatedBy:", "instanceVariableNames", "category"],
  859. referencedClasses: []
  860. }),
  861. smalltalk.StrippedExporter.klass);
  862. smalltalk.addMethod(
  863. smalltalk.method({
  864. selector: "exportMethod:on:",
  865. category: 'exporting-output',
  866. fn: function (aMethod,aStream){
  867. var self=this;
  868. return smalltalk.withContext(function($ctx1) {
  869. var $1,$2;
  870. $1=aStream;
  871. _st($1)._nextPutAll_("smalltalk.addMethod(");
  872. _st($1)._lf();
  873. _st($1)._nextPutAll_("smalltalk.method({");
  874. _st($1)._lf();
  875. _st($1)._nextPutAll_(_st("selector: ".__comma(_st(_st(aMethod)._selector())._asJavascript())).__comma(","));
  876. _st($1)._lf();
  877. _st($1)._nextPutAll_(_st("fn: ".__comma(_st(_st(aMethod)._fn())._compiledSource())).__comma(","));
  878. _st($1)._lf();
  879. _st($1)._nextPutAll_("messageSends: ".__comma(_st(_st(aMethod)._messageSends())._asJavascript()));
  880. _st($1)._nextPutAll_("}),");
  881. _st($1)._lf();
  882. _st($1)._nextPutAll_("smalltalk.".__comma(self._classNameFor_(_st(aMethod)._methodClass())));
  883. _st($1)._nextPutAll_(");");
  884. _st($1)._lf();
  885. $2=_st($1)._lf();
  886. return self}, function($ctx1) {$ctx1.fill(self,"exportMethod:on:",{aMethod:aMethod,aStream:aStream},smalltalk.StrippedExporter.klass)})},
  887. args: ["aMethod", "aStream"],
  888. source: "exportMethod: aMethod on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: 'smalltalk.addMethod(';lf;\x0a\x09\x09\x22nextPutAll: aMethod selector asSelector asJavascript, ',';lf;\x22\x0a\x09\x09nextPutAll: 'smalltalk.method({';lf;\x0a\x09\x09nextPutAll: 'selector: ', aMethod selector asJavascript, ',';lf;\x0a\x09\x09nextPutAll: 'fn: ', aMethod fn compiledSource, ',';lf;\x0a\x09\x09nextPutAll: 'messageSends: ', aMethod messageSends asJavascript;\x0a\x09\x09nextPutAll: '}),';lf;\x0a\x09\x09nextPutAll: 'smalltalk.', (self classNameFor: aMethod methodClass);\x0a\x09\x09nextPutAll: ');';lf;lf",
  889. messageSends: ["nextPutAll:", "lf", ",", "asJavascript", "selector", "compiledSource", "fn", "messageSends", "classNameFor:", "methodClass"],
  890. referencedClasses: []
  891. }),
  892. smalltalk.StrippedExporter.klass);
  893. smalltalk.addClass('Importer', smalltalk.Object, [], 'Importer-Exporter');
  894. smalltalk.Importer.comment="I can import Amber code from a string in the chunk format.\x0a\x0a## API\x0a\x0a Importer new import: aString";
  895. smalltalk.addMethod(
  896. smalltalk.method({
  897. selector: "import:",
  898. category: 'fileIn',
  899. fn: function (aStream){
  900. var self=this;
  901. var chunk,result,parser,lastEmpty;
  902. function $ChunkParser(){return smalltalk.ChunkParser||(typeof ChunkParser=="undefined"?nil:ChunkParser)}
  903. function $Compiler(){return smalltalk.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  904. return smalltalk.withContext(function($ctx1) {
  905. var $1,$2;
  906. parser=_st($ChunkParser())._on_(aStream);
  907. lastEmpty=false;
  908. _st((function(){
  909. return smalltalk.withContext(function($ctx2) {
  910. chunk=_st(parser)._nextChunk();
  911. chunk;
  912. return _st(chunk)._isNil();
  913. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}))._whileFalse_((function(){
  914. return smalltalk.withContext(function($ctx2) {
  915. $1=_st(chunk)._isEmpty();
  916. if(smalltalk.assert($1)){
  917. lastEmpty=true;
  918. return lastEmpty;
  919. } else {
  920. result=_st(_st($Compiler())._new())._evaluateExpression_(chunk);
  921. result;
  922. $2=lastEmpty;
  923. if(smalltalk.assert($2)){
  924. lastEmpty=false;
  925. lastEmpty;
  926. return _st(result)._scanFrom_(parser);
  927. };
  928. };
  929. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  930. return self}, function($ctx1) {$ctx1.fill(self,"import:",{aStream:aStream,chunk:chunk,result:result,parser:parser,lastEmpty:lastEmpty},smalltalk.Importer)})},
  931. args: ["aStream"],
  932. source: "import: aStream\x0a\x09| chunk result parser lastEmpty |\x0a\x09parser := ChunkParser on: aStream.\x0a\x09lastEmpty := false.\x0a\x09[chunk := parser nextChunk.\x0a\x09chunk isNil] whileFalse: [\x0a\x09\x09chunk isEmpty\x0a\x09\x09\x09ifTrue: [lastEmpty := true]\x0a\x09\x09\x09ifFalse: [\x0a\x09\x09\x09\x09result := Compiler new evaluateExpression: chunk.\x0a\x09\x09\x09\x09lastEmpty\x0a\x09\x09\x09\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09lastEmpty := false.\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09result scanFrom: parser]]]",
  933. messageSends: ["on:", "whileFalse:", "ifTrue:ifFalse:", "evaluateExpression:", "new", "ifTrue:", "scanFrom:", "isEmpty", "nextChunk", "isNil"],
  934. referencedClasses: ["ChunkParser", "Compiler"]
  935. }),
  936. smalltalk.Importer);
  937. smalltalk.addClass('PackageHandler', smalltalk.InterfacingObject, [], 'Importer-Exporter');
  938. smalltalk.PackageHandler.comment="I am responsible for handling package loading and committing.\x0a\x0aI should not be used directly. Instead, use the corresponding `Package` methods.";
  939. smalltalk.addMethod(
  940. smalltalk.method({
  941. selector: "ajaxPutAt:data:",
  942. category: 'private',
  943. fn: function (aURL,aString){
  944. var self=this;
  945. return smalltalk.withContext(function($ctx1) {
  946. self._ajax_(smalltalk.HashedCollection._from_(["url".__minus_gt(aURL),"type".__minus_gt("PUT"),"data".__minus_gt(aString),"contentType".__minus_gt("text/plain;charset=UTF-8"),"error".__minus_gt((function(xhr){
  947. return smalltalk.withContext(function($ctx2) {
  948. return self._error_(_st(_st(_st("Commiting ".__comma(aURL)).__comma(" failed with reason: \x22")).__comma(_st(xhr)._responseText())).__comma("\x22"));
  949. }, function($ctx2) {$ctx2.fillBlock({xhr:xhr},$ctx1)})}))]));
  950. return self}, function($ctx1) {$ctx1.fill(self,"ajaxPutAt:data:",{aURL:aURL,aString:aString},smalltalk.PackageHandler)})},
  951. args: ["aURL", "aString"],
  952. source: "ajaxPutAt: aURL data: aString\x0a\x09self\x0a\x09\x09ajax: #{\x0a\x09\x09\x09'url' -> aURL.\x0a\x09\x09\x09'type' -> 'PUT'.\x0a\x09\x09\x09'data' -> aString.\x0a\x09\x09\x09'contentType' -> 'text/plain;charset=UTF-8'.\x0a\x09\x09\x09'error' -> [ :xhr | self error: 'Commiting ' , aURL , ' failed with reason: \x22' , (xhr responseText) , '\x22'] }",
  953. messageSends: ["ajax:", "->", "error:", ",", "responseText"],
  954. referencedClasses: []
  955. }),
  956. smalltalk.PackageHandler);
  957. smalltalk.addMethod(
  958. smalltalk.method({
  959. selector: "commit:",
  960. category: 'committing',
  961. fn: function (aPackage){
  962. var self=this;
  963. function $PluggableExporter(){return smalltalk.PluggableExporter||(typeof PluggableExporter=="undefined"?nil:PluggableExporter)}
  964. function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
  965. return smalltalk.withContext(function($ctx1) {
  966. _st(self._commitChannels())._do_displayingProgress_((function(commitStrategyFactory){
  967. var fileContents,commitStrategy;
  968. return smalltalk.withContext(function($ctx2) {
  969. commitStrategy=_st(commitStrategyFactory)._value_(aPackage);
  970. commitStrategy;
  971. fileContents=_st($String())._streamContents_((function(stream){
  972. return smalltalk.withContext(function($ctx3) {
  973. return _st(_st($PluggableExporter())._newUsing_(_st(commitStrategy)._key()))._exportPackage_on_(aPackage,stream);
  974. }, function($ctx3) {$ctx3.fillBlock({stream:stream},$ctx2)})}));
  975. fileContents;
  976. return self._ajaxPutAt_data_(_st(commitStrategy)._value(),fileContents);
  977. }, function($ctx2) {$ctx2.fillBlock({commitStrategyFactory:commitStrategyFactory,fileContents:fileContents,commitStrategy:commitStrategy},$ctx1)})}),"Committing package ".__comma(_st(aPackage)._name()));
  978. return self}, function($ctx1) {$ctx1.fill(self,"commit:",{aPackage:aPackage},smalltalk.PackageHandler)})},
  979. args: ["aPackage"],
  980. source: "commit: aPackage\x0a\x09self commitChannels\x0a\x09\x09do: [ :commitStrategyFactory || fileContents commitStrategy |\x0a\x09\x09\x09commitStrategy := commitStrategyFactory value: aPackage.\x0a\x09\x09\x09fileContents := String streamContents: [ :stream |\x0a\x09\x09\x09\x09(PluggableExporter newUsing: commitStrategy key) exportPackage: aPackage on: stream ].\x0a\x09\x09\x09self ajaxPutAt: commitStrategy value data: fileContents ]\x0a\x09\x09displayingProgress: 'Committing package ', aPackage name",
  981. messageSends: ["do:displayingProgress:", "value:", "streamContents:", "exportPackage:on:", "newUsing:", "key", "ajaxPutAt:data:", "value", ",", "name", "commitChannels"],
  982. referencedClasses: ["PluggableExporter", "String"]
  983. }),
  984. smalltalk.PackageHandler);
  985. smalltalk.PackageHandler.klass.iVarNames = ['registry'];
  986. smalltalk.addMethod(
  987. smalltalk.method({
  988. selector: "classRegisteredFor:",
  989. category: 'accessing',
  990. fn: function (aString){
  991. var self=this;
  992. return smalltalk.withContext(function($ctx1) {
  993. var $1;
  994. $1=_st(self["@registry"])._at_(aString);
  995. return $1;
  996. }, function($ctx1) {$ctx1.fill(self,"classRegisteredFor:",{aString:aString},smalltalk.PackageHandler.klass)})},
  997. args: ["aString"],
  998. source: "classRegisteredFor: aString\x0a\x09^registry at: aString",
  999. messageSends: ["at:"],
  1000. referencedClasses: []
  1001. }),
  1002. smalltalk.PackageHandler.klass);
  1003. smalltalk.addMethod(
  1004. smalltalk.method({
  1005. selector: "for:",
  1006. category: 'accessing',
  1007. fn: function (aString){
  1008. var self=this;
  1009. return smalltalk.withContext(function($ctx1) {
  1010. var $1;
  1011. $1=_st(self._classRegisteredFor_(aString))._new();
  1012. return $1;
  1013. }, function($ctx1) {$ctx1.fill(self,"for:",{aString:aString},smalltalk.PackageHandler.klass)})},
  1014. args: ["aString"],
  1015. source: "for: aString\x0a\x09^(self classRegisteredFor: aString) new",
  1016. messageSends: ["new", "classRegisteredFor:"],
  1017. referencedClasses: []
  1018. }),
  1019. smalltalk.PackageHandler.klass);
  1020. smalltalk.addMethod(
  1021. smalltalk.method({
  1022. selector: "initialize",
  1023. category: 'initialization',
  1024. fn: function (){
  1025. var self=this;
  1026. return smalltalk.withContext(function($ctx1) {
  1027. smalltalk.PackageHandler.klass.superclass.fn.prototype._initialize.apply(_st(self), []);
  1028. self["@registry"]=smalltalk.HashedCollection._from_([]);
  1029. return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},smalltalk.PackageHandler.klass)})},
  1030. args: [],
  1031. source: "initialize\x0a\x09super initialize.\x0a\x09registry := #{}",
  1032. messageSends: ["initialize"],
  1033. referencedClasses: []
  1034. }),
  1035. smalltalk.PackageHandler.klass);
  1036. smalltalk.addMethod(
  1037. smalltalk.method({
  1038. selector: "register:for:",
  1039. category: 'registry',
  1040. fn: function (aClass,aString){
  1041. var self=this;
  1042. return smalltalk.withContext(function($ctx1) {
  1043. _st(self["@registry"])._at_put_(aString,aClass);
  1044. return self}, function($ctx1) {$ctx1.fill(self,"register:for:",{aClass:aClass,aString:aString},smalltalk.PackageHandler.klass)})},
  1045. args: ["aClass", "aString"],
  1046. source: "register: aClass for: aString\x0a\x09registry at: aString put: aClass",
  1047. messageSends: ["at:put:"],
  1048. referencedClasses: []
  1049. }),
  1050. smalltalk.PackageHandler.klass);
  1051. smalltalk.addMethod(
  1052. smalltalk.method({
  1053. selector: "registerFor:",
  1054. category: 'registry',
  1055. fn: function (aString){
  1056. var self=this;
  1057. function $PackageHandler(){return smalltalk.PackageHandler||(typeof PackageHandler=="undefined"?nil:PackageHandler)}
  1058. return smalltalk.withContext(function($ctx1) {
  1059. _st($PackageHandler())._register_for_(self,aString);
  1060. return self}, function($ctx1) {$ctx1.fill(self,"registerFor:",{aString:aString},smalltalk.PackageHandler.klass)})},
  1061. args: ["aString"],
  1062. source: "registerFor: aString\x0a\x09PackageHandler register: self for: aString",
  1063. messageSends: ["register:for:"],
  1064. referencedClasses: ["PackageHandler"]
  1065. }),
  1066. smalltalk.PackageHandler.klass);
  1067. smalltalk.addClass('AmdPackageHandler', smalltalk.PackageHandler, [], 'Importer-Exporter');
  1068. smalltalk.AmdPackageHandler.comment="I am responsible for handling package loading and committing.\x0d\x0a\x0d\x0aI should not be used directly. Instead, use the corresponding `Package` methods.";
  1069. smalltalk.addMethod(
  1070. smalltalk.method({
  1071. selector: "commitChannels",
  1072. category: 'committing',
  1073. fn: function (){
  1074. var self=this;
  1075. function $Exporter(){return smalltalk.Exporter||(typeof Exporter=="undefined"?nil:Exporter)}
  1076. function $StrippedExporter(){return smalltalk.StrippedExporter||(typeof StrippedExporter=="undefined"?nil:StrippedExporter)}
  1077. function $ChunkExporter(){return smalltalk.ChunkExporter||(typeof ChunkExporter=="undefined"?nil:ChunkExporter)}
  1078. return smalltalk.withContext(function($ctx1) {
  1079. var $1;
  1080. $1=[(function(pkg){
  1081. return smalltalk.withContext(function($ctx2) {
  1082. return _st(_st($Exporter())._amdRecipe()).__minus_gt(_st(_st(_st(_st(pkg)._commitPathJs()).__comma("/")).__comma(_st(pkg)._name())).__comma(".js"));
  1083. }, function($ctx2) {$ctx2.fillBlock({pkg:pkg},$ctx1)})}),(function(pkg){
  1084. return smalltalk.withContext(function($ctx2) {
  1085. return _st(_st($StrippedExporter())._amdRecipe()).__minus_gt(_st(_st(_st(_st(pkg)._commitPathJs()).__comma("/")).__comma(_st(pkg)._name())).__comma(".deploy.js"));
  1086. }, function($ctx2) {$ctx2.fillBlock({pkg:pkg},$ctx1)})}),(function(pkg){
  1087. return smalltalk.withContext(function($ctx2) {
  1088. return _st(_st($ChunkExporter())._recipe()).__minus_gt(_st(_st(_st(_st(pkg)._commitPathSt()).__comma("/")).__comma(_st(pkg)._name())).__comma(".st"));
  1089. }, function($ctx2) {$ctx2.fillBlock({pkg:pkg},$ctx1)})})];
  1090. return $1;
  1091. }, function($ctx1) {$ctx1.fill(self,"commitChannels",{},smalltalk.AmdPackageHandler)})},
  1092. args: [],
  1093. source: "commitChannels\x0a\x09^{ \x0a\x09\x09[ :pkg | Exporter amdRecipe -> (pkg commitPathJs, '/', pkg name, '.js') ].\x0a\x09\x09[ :pkg | StrippedExporter amdRecipe -> (pkg commitPathJs, '/', pkg name, '.deploy.js') ].\x0a\x09\x09[ :pkg | ChunkExporter recipe -> (pkg commitPathSt, '/', pkg name, '.st') ]\x0a\x09}",
  1094. messageSends: ["->", ",", "name", "commitPathJs", "amdRecipe", "commitPathSt", "recipe"],
  1095. referencedClasses: ["Exporter", "StrippedExporter", "ChunkExporter"]
  1096. }),
  1097. smalltalk.AmdPackageHandler);
  1098. smalltalk.addMethod(
  1099. smalltalk.method({
  1100. selector: "commitPathJsFor:",
  1101. category: 'committing',
  1102. fn: function (aPackage){
  1103. var self=this;
  1104. return smalltalk.withContext(function($ctx1) {
  1105. var $1;
  1106. $1=self._toUrl_(self._namespaceFor_(aPackage));
  1107. return $1;
  1108. }, function($ctx1) {$ctx1.fill(self,"commitPathJsFor:",{aPackage:aPackage},smalltalk.AmdPackageHandler)})},
  1109. args: ["aPackage"],
  1110. source: "commitPathJsFor: aPackage\x0a\x09^self toUrl: (self namespaceFor: aPackage)",
  1111. messageSends: ["toUrl:", "namespaceFor:"],
  1112. referencedClasses: []
  1113. }),
  1114. smalltalk.AmdPackageHandler);
  1115. smalltalk.addMethod(
  1116. smalltalk.method({
  1117. selector: "commitPathStFor:",
  1118. category: 'committing',
  1119. fn: function (aPackage){
  1120. var self=this;
  1121. return smalltalk.withContext(function($ctx1) {
  1122. var $1;
  1123. $1=self._toUrl_(_st(self._namespaceFor_(aPackage)).__comma("/_source"));
  1124. return $1;
  1125. }, function($ctx1) {$ctx1.fill(self,"commitPathStFor:",{aPackage:aPackage},smalltalk.AmdPackageHandler)})},
  1126. args: ["aPackage"],
  1127. source: "commitPathStFor: aPackage\x0a\x09\x22if _source is not mapped, .st commit will likely fail\x22\x0a\x09^self toUrl: (self namespaceFor: aPackage), '/_source'.",
  1128. messageSends: ["toUrl:", ",", "namespaceFor:"],
  1129. referencedClasses: []
  1130. }),
  1131. smalltalk.AmdPackageHandler);
  1132. smalltalk.addMethod(
  1133. smalltalk.method({
  1134. selector: "namespaceFor:",
  1135. category: 'committing',
  1136. fn: function (aPackage){
  1137. var self=this;
  1138. return smalltalk.withContext(function($ctx1) {
  1139. var $2,$3,$4,$1;
  1140. $2=_st(aPackage)._amdNamespace();
  1141. if(($receiver = $2) == nil || $receiver == undefined){
  1142. $3=aPackage;
  1143. _st($3)._amdNamespace_(_st(self._class())._defaultNamespace());
  1144. $4=_st($3)._amdNamespace();
  1145. $1=$4;
  1146. } else {
  1147. $1=$2;
  1148. };
  1149. return $1;
  1150. }, function($ctx1) {$ctx1.fill(self,"namespaceFor:",{aPackage:aPackage},smalltalk.AmdPackageHandler)})},
  1151. args: ["aPackage"],
  1152. source: "namespaceFor: aPackage\x0a\x09^aPackage amdNamespace\x0a\x09\x09ifNil: [ aPackage amdNamespace: self class defaultNamespace; amdNamespace ]",
  1153. messageSends: ["ifNil:", "amdNamespace:", "defaultNamespace", "class", "amdNamespace"],
  1154. referencedClasses: []
  1155. }),
  1156. smalltalk.AmdPackageHandler);
  1157. smalltalk.addMethod(
  1158. smalltalk.method({
  1159. selector: "toUrl:",
  1160. category: 'private',
  1161. fn: function (aString){
  1162. var self=this;
  1163. function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  1164. return smalltalk.withContext(function($ctx1) {
  1165. var $1,$2;
  1166. $1=_st(_st($Smalltalk())._current())._at_("_amd_require");
  1167. if(($receiver = $1) == nil || $receiver == undefined){
  1168. self._error_("AMD loader not present");
  1169. } else {
  1170. var require;
  1171. require=$receiver;
  1172. $2=_st(_st(require)._basicAt_("toUrl"))._value_(aString);
  1173. return $2;
  1174. };
  1175. return self}, function($ctx1) {$ctx1.fill(self,"toUrl:",{aString:aString},smalltalk.AmdPackageHandler)})},
  1176. args: ["aString"],
  1177. source: "toUrl: aString\x0a\x09(Smalltalk current at: '_amd_require')\x0a\x09\x09ifNil: [ self error: 'AMD loader not present' ]\x0a\x09\x09ifNotNil: [ :require | ^(require basicAt: 'toUrl') value: aString ]",
  1178. messageSends: ["ifNil:ifNotNil:", "error:", "value:", "basicAt:", "at:", "current"],
  1179. referencedClasses: ["Smalltalk"]
  1180. }),
  1181. smalltalk.AmdPackageHandler);
  1182. smalltalk.AmdPackageHandler.klass.iVarNames = ['defaultNamespace'];
  1183. smalltalk.addMethod(
  1184. smalltalk.method({
  1185. selector: "commitPathsFromLoader",
  1186. category: 'commit paths',
  1187. fn: function (){
  1188. var self=this;
  1189. return smalltalk.withContext(function($ctx1) {
  1190. return self}, function($ctx1) {$ctx1.fill(self,"commitPathsFromLoader",{},smalltalk.AmdPackageHandler.klass)})},
  1191. args: [],
  1192. source: "commitPathsFromLoader\x0a\x09\x22TODO\x22",
  1193. messageSends: [],
  1194. referencedClasses: []
  1195. }),
  1196. smalltalk.AmdPackageHandler.klass);
  1197. smalltalk.addMethod(
  1198. smalltalk.method({
  1199. selector: "defaultNamespace",
  1200. category: 'commit paths',
  1201. fn: function (){
  1202. var self=this;
  1203. return smalltalk.withContext(function($ctx1) {
  1204. var $2,$1;
  1205. $2=self["@defaultNamespace"];
  1206. if(($receiver = $2) == nil || $receiver == undefined){
  1207. $1=self._error_("AMD default namespace not set.");
  1208. } else {
  1209. $1=$2;
  1210. };
  1211. return $1;
  1212. }, function($ctx1) {$ctx1.fill(self,"defaultNamespace",{},smalltalk.AmdPackageHandler.klass)})},
  1213. args: [],
  1214. source: "defaultNamespace\x0a\x09^ defaultNamespace ifNil: [ self error: 'AMD default namespace not set.' ]",
  1215. messageSends: ["ifNil:", "error:"],
  1216. referencedClasses: []
  1217. }),
  1218. smalltalk.AmdPackageHandler.klass);
  1219. smalltalk.addMethod(
  1220. smalltalk.method({
  1221. selector: "defaultNamespace:",
  1222. category: 'commit paths',
  1223. fn: function (aString){
  1224. var self=this;
  1225. return smalltalk.withContext(function($ctx1) {
  1226. self["@defaultNamespace"]=aString;
  1227. return self}, function($ctx1) {$ctx1.fill(self,"defaultNamespace:",{aString:aString},smalltalk.AmdPackageHandler.klass)})},
  1228. args: ["aString"],
  1229. source: "defaultNamespace: aString\x0a\x09defaultNamespace := aString",
  1230. messageSends: [],
  1231. referencedClasses: []
  1232. }),
  1233. smalltalk.AmdPackageHandler.klass);
  1234. smalltalk.addMethod(
  1235. smalltalk.method({
  1236. selector: "initialize",
  1237. category: 'initialization',
  1238. fn: function (){
  1239. var self=this;
  1240. return smalltalk.withContext(function($ctx1) {
  1241. smalltalk.AmdPackageHandler.klass.superclass.fn.prototype._initialize.apply(_st(self), []);
  1242. self._registerFor_("amd");
  1243. self._commitPathsFromLoader();
  1244. return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},smalltalk.AmdPackageHandler.klass)})},
  1245. args: [],
  1246. source: "initialize\x0a\x09super initialize.\x0a\x09self registerFor: 'amd'.\x0a\x09self commitPathsFromLoader",
  1247. messageSends: ["initialize", "registerFor:", "commitPathsFromLoader"],
  1248. referencedClasses: []
  1249. }),
  1250. smalltalk.AmdPackageHandler.klass);
  1251. smalltalk.addMethod(
  1252. smalltalk.method({
  1253. selector: "resetCommitPaths",
  1254. category: 'commit paths',
  1255. fn: function (){
  1256. var self=this;
  1257. return smalltalk.withContext(function($ctx1) {
  1258. self["@defaultNamespace"]=nil;
  1259. return self}, function($ctx1) {$ctx1.fill(self,"resetCommitPaths",{},smalltalk.AmdPackageHandler.klass)})},
  1260. args: [],
  1261. source: "resetCommitPaths\x0a\x09defaultNamespace := nil",
  1262. messageSends: [],
  1263. referencedClasses: []
  1264. }),
  1265. smalltalk.AmdPackageHandler.klass);
  1266. smalltalk.addClass('LegacyPackageHandler', smalltalk.PackageHandler, [], 'Importer-Exporter');
  1267. smalltalk.LegacyPackageHandler.comment="I am responsible for handling package loading and committing.\x0d\x0a\x0d\x0aI should not be used directly. Instead, use the corresponding `Package` methods.";
  1268. smalltalk.addMethod(
  1269. smalltalk.method({
  1270. selector: "commitChannels",
  1271. category: 'committing',
  1272. fn: function (){
  1273. var self=this;
  1274. function $Exporter(){return smalltalk.Exporter||(typeof Exporter=="undefined"?nil:Exporter)}
  1275. function $StrippedExporter(){return smalltalk.StrippedExporter||(typeof StrippedExporter=="undefined"?nil:StrippedExporter)}
  1276. function $ChunkExporter(){return smalltalk.ChunkExporter||(typeof ChunkExporter=="undefined"?nil:ChunkExporter)}
  1277. return smalltalk.withContext(function($ctx1) {
  1278. var $1;
  1279. $1=[(function(pkg){
  1280. return smalltalk.withContext(function($ctx2) {
  1281. return _st(_st($Exporter())._recipe()).__minus_gt(_st(_st(_st(_st(pkg)._commitPathJs()).__comma("/")).__comma(_st(pkg)._name())).__comma(".js"));
  1282. }, function($ctx2) {$ctx2.fillBlock({pkg:pkg},$ctx1)})}),(function(pkg){
  1283. return smalltalk.withContext(function($ctx2) {
  1284. return _st(_st($StrippedExporter())._recipe()).__minus_gt(_st(_st(_st(_st(pkg)._commitPathJs()).__comma("/")).__comma(_st(pkg)._name())).__comma(".deploy.js"));
  1285. }, function($ctx2) {$ctx2.fillBlock({pkg:pkg},$ctx1)})}),(function(pkg){
  1286. return smalltalk.withContext(function($ctx2) {
  1287. return _st(_st($ChunkExporter())._recipe()).__minus_gt(_st(_st(_st(_st(pkg)._commitPathSt()).__comma("/")).__comma(_st(pkg)._name())).__comma(".st"));
  1288. }, function($ctx2) {$ctx2.fillBlock({pkg:pkg},$ctx1)})})];
  1289. return $1;
  1290. }, function($ctx1) {$ctx1.fill(self,"commitChannels",{},smalltalk.LegacyPackageHandler)})},
  1291. args: [],
  1292. source: "commitChannels\x0a\x09^{ \x0a\x09\x09[ :pkg | Exporter recipe -> (pkg commitPathJs, '/', pkg name, '.js') ].\x0a\x09\x09[ :pkg | StrippedExporter recipe -> (pkg commitPathJs, '/', pkg name, '.deploy.js') ].\x0a\x09\x09[ :pkg | ChunkExporter recipe -> (pkg commitPathSt, '/', pkg name, '.st') ]\x0a\x09}",
  1293. messageSends: ["->", ",", "name", "commitPathJs", "recipe", "commitPathSt"],
  1294. referencedClasses: ["Exporter", "StrippedExporter", "ChunkExporter"]
  1295. }),
  1296. smalltalk.LegacyPackageHandler);
  1297. smalltalk.addMethod(
  1298. smalltalk.method({
  1299. selector: "commitPathJsFor:",
  1300. category: 'committing',
  1301. fn: function (aPackage){
  1302. var self=this;
  1303. return smalltalk.withContext(function($ctx1) {
  1304. var $1;
  1305. $1=_st(self._class())._defaultCommitPathJs();
  1306. return $1;
  1307. }, function($ctx1) {$ctx1.fill(self,"commitPathJsFor:",{aPackage:aPackage},smalltalk.LegacyPackageHandler)})},
  1308. args: ["aPackage"],
  1309. source: "commitPathJsFor: aPackage\x0a\x09^self class defaultCommitPathJs",
  1310. messageSends: ["defaultCommitPathJs", "class"],
  1311. referencedClasses: []
  1312. }),
  1313. smalltalk.LegacyPackageHandler);
  1314. smalltalk.addMethod(
  1315. smalltalk.method({
  1316. selector: "commitPathStFor:",
  1317. category: 'committing',
  1318. fn: function (aPackage){
  1319. var self=this;
  1320. return smalltalk.withContext(function($ctx1) {
  1321. var $1;
  1322. $1=_st(self._class())._defaultCommitPathSt();
  1323. return $1;
  1324. }, function($ctx1) {$ctx1.fill(self,"commitPathStFor:",{aPackage:aPackage},smalltalk.LegacyPackageHandler)})},
  1325. args: ["aPackage"],
  1326. source: "commitPathStFor: aPackage\x0a\x09^self class defaultCommitPathSt",
  1327. messageSends: ["defaultCommitPathSt", "class"],
  1328. referencedClasses: []
  1329. }),
  1330. smalltalk.LegacyPackageHandler);
  1331. smalltalk.addMethod(
  1332. smalltalk.method({
  1333. selector: "loadPackage:prefix:",
  1334. category: 'loading',
  1335. fn: function (packageName,aString){
  1336. var self=this;
  1337. var url;
  1338. return smalltalk.withContext(function($ctx1) {
  1339. var $1;
  1340. url=_st(_st(_st("/".__comma(aString)).__comma("/js/")).__comma(packageName)).__comma(".js");
  1341. self._ajax_(smalltalk.HashedCollection._from_(["url".__minus_gt(url),"type".__minus_gt("GET"),"dataType".__minus_gt("script"),"complete".__minus_gt((function(jqXHR,textStatus){
  1342. return smalltalk.withContext(function($ctx2) {
  1343. $1=_st(_st(jqXHR)._readyState()).__eq((4));
  1344. if(smalltalk.assert($1)){
  1345. return self._setupPackageNamed_prefix_(packageName,aString);
  1346. };
  1347. }, function($ctx2) {$ctx2.fillBlock({jqXHR:jqXHR,textStatus:textStatus},$ctx1)})})),"error".__minus_gt((function(){
  1348. return smalltalk.withContext(function($ctx2) {
  1349. return self._alert_("Could not load package at: ".__comma(url));
  1350. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}))]));
  1351. return self}, function($ctx1) {$ctx1.fill(self,"loadPackage:prefix:",{packageName:packageName,aString:aString,url:url},smalltalk.LegacyPackageHandler)})},
  1352. args: ["packageName", "aString"],
  1353. source: "loadPackage: packageName prefix: aString\x0a\x09| url |\x0a\x09url := '/', aString, '/js/', packageName, '.js'.\x0a\x09self\x0a\x09\x09ajax: #{\x0a\x09\x09\x09'url' -> url.\x0a\x09\x09\x09'type' -> 'GET'.\x0a\x09\x09\x09'dataType' -> 'script'.\x0a\x09\x09\x09'complete' -> [ :jqXHR :textStatus |\x0a\x09\x09\x09\x09jqXHR readyState = 4\x0a\x09\x09\x09\x09\x09ifTrue: [ self setupPackageNamed: packageName prefix: aString ] ].\x0a\x09\x09\x09'error' -> [ self alert: 'Could not load package at: ', url ]\x0a\x09\x09}",
  1354. messageSends: [",", "ajax:", "->", "ifTrue:", "setupPackageNamed:prefix:", "=", "readyState", "alert:"],
  1355. referencedClasses: []
  1356. }),
  1357. smalltalk.LegacyPackageHandler);
  1358. smalltalk.addMethod(
  1359. smalltalk.method({
  1360. selector: "loadPackages:prefix:",
  1361. category: 'loading',
  1362. fn: function (aCollection,aString){
  1363. var self=this;
  1364. return smalltalk.withContext(function($ctx1) {
  1365. _st(aCollection)._do_((function(each){
  1366. return smalltalk.withContext(function($ctx2) {
  1367. return self._loadPackage_prefix_(each,aString);
  1368. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}));
  1369. return self}, function($ctx1) {$ctx1.fill(self,"loadPackages:prefix:",{aCollection:aCollection,aString:aString},smalltalk.LegacyPackageHandler)})},
  1370. args: ["aCollection", "aString"],
  1371. source: "loadPackages: aCollection prefix: aString\x0a\x09aCollection do: [ :each |\x0a\x09\x09self loadPackage: each prefix: aString ]",
  1372. messageSends: ["do:", "loadPackage:prefix:"],
  1373. referencedClasses: []
  1374. }),
  1375. smalltalk.LegacyPackageHandler);
  1376. smalltalk.addMethod(
  1377. smalltalk.method({
  1378. selector: "setupPackageNamed:prefix:",
  1379. category: 'private',
  1380. fn: function (packageName,aString){
  1381. var self=this;
  1382. function $Package(){return smalltalk.Package||(typeof Package=="undefined"?nil:Package)}
  1383. return smalltalk.withContext(function($ctx1) {
  1384. var $1,$2;
  1385. $1=_st($Package())._named_(packageName);
  1386. _st($1)._setupClasses();
  1387. _st($1)._commitPathJs_(_st("/".__comma(aString)).__comma("/js"));
  1388. $2=_st($1)._commitPathSt_(_st("/".__comma(aString)).__comma("/st"));
  1389. return self}, function($ctx1) {$ctx1.fill(self,"setupPackageNamed:prefix:",{packageName:packageName,aString:aString},smalltalk.LegacyPackageHandler)})},
  1390. args: ["packageName", "aString"],
  1391. source: "setupPackageNamed: packageName prefix: aString\x0a\x0a\x09(Package named: packageName)\x0a\x09\x09setupClasses;\x0a\x09\x09commitPathJs: '/', aString, '/js';\x0a\x09\x09commitPathSt: '/', aString, '/st'",
  1392. messageSends: ["setupClasses", "named:", "commitPathJs:", ",", "commitPathSt:"],
  1393. referencedClasses: ["Package"]
  1394. }),
  1395. smalltalk.LegacyPackageHandler);
  1396. smalltalk.LegacyPackageHandler.klass.iVarNames = ['defaultCommitPathJs','defaultCommitPathSt'];
  1397. smalltalk.addMethod(
  1398. smalltalk.method({
  1399. selector: "commitPathsFromLoader",
  1400. category: 'commit paths',
  1401. fn: function (){
  1402. var self=this;
  1403. return smalltalk.withContext(function($ctx1) {
  1404. var commitPath = typeof amber !== 'undefined' && amber.commitPath;
  1405. if (!commitPath) return;
  1406. if (commitPath.js) self._defaultCommitPathJs_(commitPath.js);
  1407. if (commitPath.st) self._defaultCommitPathSt_(commitPath.st);
  1408. ;
  1409. return self}, function($ctx1) {$ctx1.fill(self,"commitPathsFromLoader",{},smalltalk.LegacyPackageHandler.klass)})},
  1410. args: [],
  1411. source: "commitPathsFromLoader\x0a\x09<\x0a\x09\x09var commitPath = typeof amber !== 'undefined' && amber.commitPath;\x0a\x09\x09if (!commitPath) return;\x0a\x09\x09if (commitPath.js) self._defaultCommitPathJs_(commitPath.js);\x0a\x09\x09if (commitPath.st) self._defaultCommitPathSt_(commitPath.st);\x0a\x09>",
  1412. messageSends: [],
  1413. referencedClasses: []
  1414. }),
  1415. smalltalk.LegacyPackageHandler.klass);
  1416. smalltalk.addMethod(
  1417. smalltalk.method({
  1418. selector: "defaultCommitPathJs",
  1419. category: 'commit paths',
  1420. fn: function (){
  1421. var self=this;
  1422. return smalltalk.withContext(function($ctx1) {
  1423. var $2,$1;
  1424. $2=self["@defaultCommitPathJs"];
  1425. if(($receiver = $2) == nil || $receiver == undefined){
  1426. self["@defaultCommitPathJs"]="js";
  1427. $1=self["@defaultCommitPathJs"];
  1428. } else {
  1429. $1=$2;
  1430. };
  1431. return $1;
  1432. }, function($ctx1) {$ctx1.fill(self,"defaultCommitPathJs",{},smalltalk.LegacyPackageHandler.klass)})},
  1433. args: [],
  1434. source: "defaultCommitPathJs\x0a\x09^ defaultCommitPathJs ifNil: [ defaultCommitPathJs := 'js']",
  1435. messageSends: ["ifNil:"],
  1436. referencedClasses: []
  1437. }),
  1438. smalltalk.LegacyPackageHandler.klass);
  1439. smalltalk.addMethod(
  1440. smalltalk.method({
  1441. selector: "defaultCommitPathJs:",
  1442. category: 'commit paths',
  1443. fn: function (aString){
  1444. var self=this;
  1445. return smalltalk.withContext(function($ctx1) {
  1446. self["@defaultCommitPathJs"]=aString;
  1447. return self}, function($ctx1) {$ctx1.fill(self,"defaultCommitPathJs:",{aString:aString},smalltalk.LegacyPackageHandler.klass)})},
  1448. args: ["aString"],
  1449. source: "defaultCommitPathJs: aString\x0a\x09defaultCommitPathJs := aString",
  1450. messageSends: [],
  1451. referencedClasses: []
  1452. }),
  1453. smalltalk.LegacyPackageHandler.klass);
  1454. smalltalk.addMethod(
  1455. smalltalk.method({
  1456. selector: "defaultCommitPathSt",
  1457. category: 'commit paths',
  1458. fn: function (){
  1459. var self=this;
  1460. return smalltalk.withContext(function($ctx1) {
  1461. var $2,$1;
  1462. $2=self["@defaultCommitPathSt"];
  1463. if(($receiver = $2) == nil || $receiver == undefined){
  1464. self["@defaultCommitPathSt"]="st";
  1465. $1=self["@defaultCommitPathSt"];
  1466. } else {
  1467. $1=$2;
  1468. };
  1469. return $1;
  1470. }, function($ctx1) {$ctx1.fill(self,"defaultCommitPathSt",{},smalltalk.LegacyPackageHandler.klass)})},
  1471. args: [],
  1472. source: "defaultCommitPathSt\x0a\x09^ defaultCommitPathSt ifNil: [ defaultCommitPathSt := 'st']",
  1473. messageSends: ["ifNil:"],
  1474. referencedClasses: []
  1475. }),
  1476. smalltalk.LegacyPackageHandler.klass);
  1477. smalltalk.addMethod(
  1478. smalltalk.method({
  1479. selector: "defaultCommitPathSt:",
  1480. category: 'commit paths',
  1481. fn: function (aString){
  1482. var self=this;
  1483. return smalltalk.withContext(function($ctx1) {
  1484. self["@defaultCommitPathSt"]=aString;
  1485. return self}, function($ctx1) {$ctx1.fill(self,"defaultCommitPathSt:",{aString:aString},smalltalk.LegacyPackageHandler.klass)})},
  1486. args: ["aString"],
  1487. source: "defaultCommitPathSt: aString\x0a\x09defaultCommitPathSt := aString",
  1488. messageSends: [],
  1489. referencedClasses: []
  1490. }),
  1491. smalltalk.LegacyPackageHandler.klass);
  1492. smalltalk.addMethod(
  1493. smalltalk.method({
  1494. selector: "initialize",
  1495. category: 'initialization',
  1496. fn: function (){
  1497. var self=this;
  1498. return smalltalk.withContext(function($ctx1) {
  1499. smalltalk.LegacyPackageHandler.klass.superclass.fn.prototype._initialize.apply(_st(self), []);
  1500. self._registerFor_("unknown");
  1501. self._commitPathsFromLoader();
  1502. return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},smalltalk.LegacyPackageHandler.klass)})},
  1503. args: [],
  1504. source: "initialize\x0a\x09super initialize.\x0a\x09self registerFor: 'unknown'.\x0a\x09self commitPathsFromLoader",
  1505. messageSends: ["initialize", "registerFor:", "commitPathsFromLoader"],
  1506. referencedClasses: []
  1507. }),
  1508. smalltalk.LegacyPackageHandler.klass);
  1509. smalltalk.addMethod(
  1510. smalltalk.method({
  1511. selector: "loadPackages:prefix:",
  1512. category: 'loading',
  1513. fn: function (aCollection,aString){
  1514. var self=this;
  1515. return smalltalk.withContext(function($ctx1) {
  1516. var $1;
  1517. $1=_st(self._new())._loadPackages_prefix_(aCollection,aString);
  1518. return $1;
  1519. }, function($ctx1) {$ctx1.fill(self,"loadPackages:prefix:",{aCollection:aCollection,aString:aString},smalltalk.LegacyPackageHandler.klass)})},
  1520. args: ["aCollection", "aString"],
  1521. source: "loadPackages: aCollection prefix: aString\x0a\x09^ self new loadPackages: aCollection prefix: aString",
  1522. messageSends: ["loadPackages:prefix:", "new"],
  1523. referencedClasses: []
  1524. }),
  1525. smalltalk.LegacyPackageHandler.klass);
  1526. smalltalk.addMethod(
  1527. smalltalk.method({
  1528. selector: "resetCommitPaths",
  1529. category: 'commit paths',
  1530. fn: function (){
  1531. var self=this;
  1532. return smalltalk.withContext(function($ctx1) {
  1533. self["@defaultCommitPathJs"]=nil;
  1534. self["@defaultCommitPathSt"]=nil;
  1535. return self}, function($ctx1) {$ctx1.fill(self,"resetCommitPaths",{},smalltalk.LegacyPackageHandler.klass)})},
  1536. args: [],
  1537. source: "resetCommitPaths\x0a\x09defaultCommitPathJs := nil.\x0a\x09defaultCommitPathSt := nil",
  1538. messageSends: [],
  1539. referencedClasses: []
  1540. }),
  1541. smalltalk.LegacyPackageHandler.klass);
  1542. smalltalk.addClass('PluggableExporter', smalltalk.Object, ['recipe'], 'Importer-Exporter');
  1543. smalltalk.addMethod(
  1544. smalltalk.method({
  1545. selector: "export:usingRecipe:on:",
  1546. category: 'fileOut',
  1547. fn: function (anObject,anArray,aStream){
  1548. var self=this;
  1549. var args;
  1550. return smalltalk.withContext(function($ctx1) {
  1551. var $1;
  1552. args=[anObject,aStream];
  1553. _st(anArray)._do_((function(each){
  1554. var val;
  1555. return smalltalk.withContext(function($ctx2) {
  1556. val=_st(each)._value();
  1557. val;
  1558. $1=_st(val).__eq_eq(each);
  1559. if(smalltalk.assert($1)){
  1560. var selection;
  1561. selection=_st(_st(_st(each)._first())._key())._perform_withArguments_(_st(_st(each)._first())._value(),[anObject]);
  1562. selection;
  1563. return _st(selection)._do_((function(eachPart){
  1564. return smalltalk.withContext(function($ctx3) {
  1565. return self._export_usingRecipe_on_(eachPart,_st(each)._allButFirst(),aStream);
  1566. }, function($ctx3) {$ctx3.fillBlock({eachPart:eachPart},$ctx2)})}));
  1567. } else {
  1568. return _st(_st(each)._key())._perform_withArguments_(val,args);
  1569. };
  1570. }, function($ctx2) {$ctx2.fillBlock({each:each,val:val},$ctx1)})}));
  1571. return self}, function($ctx1) {$ctx1.fill(self,"export:usingRecipe:on:",{anObject:anObject,anArray:anArray,aStream:aStream,args:args},smalltalk.PluggableExporter)})},
  1572. args: ["anObject", "anArray", "aStream"],
  1573. source: "export: anObject usingRecipe: anArray on: aStream\x0a\x09| args |\x0a\x09args := { anObject. aStream }.\x0a\x09anArray do: [ :each | | val |\x0a\x09\x09val := each value.\x0a\x09\x09val == each\x0a\x09\x09\x09ifFalse: [ \x22association\x22\x0a\x09\x09\x09\x09each key perform: val withArguments: args ]\x0a\x09\x09\x09ifTrue: [ \x22sub-array\x22\x0a\x09\x09\x09\x09| selection |\x0a\x09\x09\x09\x09selection := each first key perform: each first value withArguments: { anObject }.\x0a\x09\x09\x09\x09selection do: [ :eachPart |\x09self export: eachPart usingRecipe: each allButFirst on: aStream ]]]",
  1574. messageSends: ["do:", "value", "ifFalse:ifTrue:", "perform:withArguments:", "key", "first", "export:usingRecipe:on:", "allButFirst", "=="],
  1575. referencedClasses: []
  1576. }),
  1577. smalltalk.PluggableExporter);
  1578. smalltalk.addMethod(
  1579. smalltalk.method({
  1580. selector: "exportAll",
  1581. category: 'fileOut',
  1582. fn: function (){
  1583. var self=this;
  1584. function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  1585. function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
  1586. return smalltalk.withContext(function($ctx1) {
  1587. var $1;
  1588. $1=_st($String())._streamContents_((function(stream){
  1589. return smalltalk.withContext(function($ctx2) {
  1590. return _st(_st(_st($Smalltalk())._current())._packages())._do_((function(pkg){
  1591. return smalltalk.withContext(function($ctx3) {
  1592. return self._exportPackage_on_(pkg,stream);
  1593. }, function($ctx3) {$ctx3.fillBlock({pkg:pkg},$ctx2)})}));
  1594. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1)})}));
  1595. return $1;
  1596. }, function($ctx1) {$ctx1.fill(self,"exportAll",{},smalltalk.PluggableExporter)})},
  1597. args: [],
  1598. source: "exportAll\x0a\x09\x22Export all packages in the system.\x22\x0a\x0a\x09^String streamContents: [:stream |\x0a\x09\x09Smalltalk current packages do: [:pkg |\x0a\x09\x09self exportPackage: pkg on: stream]]",
  1599. messageSends: ["streamContents:", "do:", "exportPackage:on:", "packages", "current"],
  1600. referencedClasses: ["Smalltalk", "String"]
  1601. }),
  1602. smalltalk.PluggableExporter);
  1603. smalltalk.addMethod(
  1604. smalltalk.method({
  1605. selector: "exportPackage:on:",
  1606. category: 'fileOut',
  1607. fn: function (aPackage,aStream){
  1608. var self=this;
  1609. return smalltalk.withContext(function($ctx1) {
  1610. self._export_usingRecipe_on_(aPackage,self._recipe(),aStream);
  1611. return self}, function($ctx1) {$ctx1.fill(self,"exportPackage:on:",{aPackage:aPackage,aStream:aStream},smalltalk.PluggableExporter)})},
  1612. args: ["aPackage", "aStream"],
  1613. source: "exportPackage: aPackage on: aStream\x0a\x09self export: aPackage usingRecipe: self recipe on: aStream",
  1614. messageSends: ["export:usingRecipe:on:", "recipe"],
  1615. referencedClasses: []
  1616. }),
  1617. smalltalk.PluggableExporter);
  1618. smalltalk.addMethod(
  1619. smalltalk.method({
  1620. selector: "recipe",
  1621. category: 'accessing',
  1622. fn: function (){
  1623. var self=this;
  1624. return smalltalk.withContext(function($ctx1) {
  1625. var $1;
  1626. $1=self["@recipe"];
  1627. return $1;
  1628. }, function($ctx1) {$ctx1.fill(self,"recipe",{},smalltalk.PluggableExporter)})},
  1629. args: [],
  1630. source: "recipe\x0a\x09^recipe",
  1631. messageSends: [],
  1632. referencedClasses: []
  1633. }),
  1634. smalltalk.PluggableExporter);
  1635. smalltalk.addMethod(
  1636. smalltalk.method({
  1637. selector: "recipe:",
  1638. category: 'accessing',
  1639. fn: function (anArray){
  1640. var self=this;
  1641. return smalltalk.withContext(function($ctx1) {
  1642. self["@recipe"]=anArray;
  1643. return self}, function($ctx1) {$ctx1.fill(self,"recipe:",{anArray:anArray},smalltalk.PluggableExporter)})},
  1644. args: ["anArray"],
  1645. source: "recipe: anArray\x0a\x09recipe := anArray",
  1646. messageSends: [],
  1647. referencedClasses: []
  1648. }),
  1649. smalltalk.PluggableExporter);
  1650. smalltalk.addMethod(
  1651. smalltalk.method({
  1652. selector: "newUsing:",
  1653. category: 'exporting-accessing',
  1654. fn: function (recipe){
  1655. var self=this;
  1656. return smalltalk.withContext(function($ctx1) {
  1657. var $2,$3,$1;
  1658. $2=self._new();
  1659. _st($2)._recipe_(recipe);
  1660. $3=_st($2)._yourself();
  1661. $1=$3;
  1662. return $1;
  1663. }, function($ctx1) {$ctx1.fill(self,"newUsing:",{recipe:recipe},smalltalk.PluggableExporter.klass)})},
  1664. args: ["recipe"],
  1665. source: "newUsing: recipe\x0a\x09^self new recipe: recipe; yourself",
  1666. messageSends: ["recipe:", "new", "yourself"],
  1667. referencedClasses: []
  1668. }),
  1669. smalltalk.PluggableExporter.klass);
  1670. smalltalk.addMethod(
  1671. smalltalk.method({
  1672. selector: "ownClassesOfPackage:",
  1673. category: 'exporting-accessing',
  1674. fn: function (package_){
  1675. var self=this;
  1676. return smalltalk.withContext(function($ctx1) {
  1677. var $1;
  1678. $1=_st(_st(package_)._sortedClasses())._asSet();
  1679. return $1;
  1680. }, function($ctx1) {$ctx1.fill(self,"ownClassesOfPackage:",{package_:package_},smalltalk.PluggableExporter.klass)})},
  1681. args: ["package"],
  1682. source: "ownClassesOfPackage: package\x0a\x09\x22Export classes in dependency order.\x0a\x09Update (issue #171): Remove duplicates for export\x22\x0a\x09^package sortedClasses asSet",
  1683. messageSends: ["asSet", "sortedClasses"],
  1684. referencedClasses: []
  1685. }),
  1686. smalltalk.PluggableExporter.klass);
  1687. smalltalk.addMethod(
  1688. smalltalk.method({
  1689. selector: "amdNamespace",
  1690. category: '*Importer-Exporter',
  1691. fn: function (){
  1692. var self=this;
  1693. return smalltalk.withContext(function($ctx1) {
  1694. return (self.transport && self.transport.amdNamespace) || nil;
  1695. return self}, function($ctx1) {$ctx1.fill(self,"amdNamespace",{},smalltalk.Package)})},
  1696. args: [],
  1697. source: "amdNamespace\x0a<return (self.transport && self.transport.amdNamespace) || nil>",
  1698. messageSends: [],
  1699. referencedClasses: []
  1700. }),
  1701. smalltalk.Package);
  1702. smalltalk.addMethod(
  1703. smalltalk.method({
  1704. selector: "amdNamespace:",
  1705. category: '*Importer-Exporter',
  1706. fn: function (aString){
  1707. var self=this;
  1708. return smalltalk.withContext(function($ctx1) {
  1709. if (!self.transport) { self.transport = { type: 'amd' }; }
  1710. if (self.transport.type !== 'amd') { throw new Error('Package '+self._name()+' has transport type '+self.transport.type+', not "amd".'); }
  1711. self.transport.amdNamespace = aString;;
  1712. return self}, function($ctx1) {$ctx1.fill(self,"amdNamespace:",{aString:aString},smalltalk.Package)})},
  1713. args: ["aString"],
  1714. source: "amdNamespace: aString\x0a<\x0a\x09if (!self.transport) { self.transport = { type: 'amd' }; }\x0a\x09if (self.transport.type !== 'amd') { throw new Error('Package '+self._name()+' has transport type '+self.transport.type+', not \x22amd\x22.'); }\x0a\x09self.transport.amdNamespace = aString;\x0a>",
  1715. messageSends: [],
  1716. referencedClasses: []
  1717. }),
  1718. smalltalk.Package);
  1719. smalltalk.addMethod(
  1720. smalltalk.method({
  1721. selector: "commit",
  1722. category: '*Importer-Exporter',
  1723. fn: function (){
  1724. var self=this;
  1725. return smalltalk.withContext(function($ctx1) {
  1726. var $1;
  1727. $1=_st(self._transport())._commit_(self);
  1728. return $1;
  1729. }, function($ctx1) {$ctx1.fill(self,"commit",{},smalltalk.Package)})},
  1730. args: [],
  1731. source: "commit\x0a\x09^ self transport commit: self",
  1732. messageSends: ["commit:", "transport"],
  1733. referencedClasses: []
  1734. }),
  1735. smalltalk.Package);
  1736. smalltalk.addMethod(
  1737. smalltalk.method({
  1738. selector: "commitPathJs",
  1739. category: '*Importer-Exporter',
  1740. fn: function (){
  1741. var self=this;
  1742. return smalltalk.withContext(function($ctx1) {
  1743. var $3,$2,$1;
  1744. $3=self["@extension"];
  1745. if(($receiver = $3) == nil || $receiver == undefined){
  1746. self["@extension"]=smalltalk.HashedCollection._from_([]);
  1747. $2=self["@extension"];
  1748. } else {
  1749. $2=$3;
  1750. };
  1751. $1=_st($2)._at_ifAbsent_("commitPathJs",(function(){
  1752. return smalltalk.withContext(function($ctx2) {
  1753. return _st(self._transport())._commitPathJsFor_(self);
  1754. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  1755. return $1;
  1756. }, function($ctx1) {$ctx1.fill(self,"commitPathJs",{},smalltalk.Package)})},
  1757. args: [],
  1758. source: "commitPathJs\x0a\x09^ (extension ifNil: [ extension := #{} ]) at: #commitPathJs ifAbsent: [self transport commitPathJsFor: self]",
  1759. messageSends: ["at:ifAbsent:", "commitPathJsFor:", "transport", "ifNil:"],
  1760. referencedClasses: []
  1761. }),
  1762. smalltalk.Package);
  1763. smalltalk.addMethod(
  1764. smalltalk.method({
  1765. selector: "commitPathJs:",
  1766. category: '*Importer-Exporter',
  1767. fn: function (aString){
  1768. var self=this;
  1769. return smalltalk.withContext(function($ctx1) {
  1770. var $3,$2,$1;
  1771. $3=self["@extension"];
  1772. if(($receiver = $3) == nil || $receiver == undefined){
  1773. self["@extension"]=smalltalk.HashedCollection._from_([]);
  1774. $2=self["@extension"];
  1775. } else {
  1776. $2=$3;
  1777. };
  1778. $1=_st($2)._at_put_("commitPathJs",aString);
  1779. return $1;
  1780. }, function($ctx1) {$ctx1.fill(self,"commitPathJs:",{aString:aString},smalltalk.Package)})},
  1781. args: ["aString"],
  1782. source: "commitPathJs: aString\x0a\x09^ (extension ifNil: [ extension := #{} ]) at: #commitPathJs put: aString",
  1783. messageSends: ["at:put:", "ifNil:"],
  1784. referencedClasses: []
  1785. }),
  1786. smalltalk.Package);
  1787. smalltalk.addMethod(
  1788. smalltalk.method({
  1789. selector: "commitPathSt",
  1790. category: '*Importer-Exporter',
  1791. fn: function (){
  1792. var self=this;
  1793. return smalltalk.withContext(function($ctx1) {
  1794. var $3,$2,$1;
  1795. $3=self["@extension"];
  1796. if(($receiver = $3) == nil || $receiver == undefined){
  1797. self["@extension"]=smalltalk.HashedCollection._from_([]);
  1798. $2=self["@extension"];
  1799. } else {
  1800. $2=$3;
  1801. };
  1802. $1=_st($2)._at_ifAbsent_("commitPathSt",(function(){
  1803. return smalltalk.withContext(function($ctx2) {
  1804. return _st(self._transport())._commitPathStFor_(self);
  1805. }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
  1806. return $1;
  1807. }, function($ctx1) {$ctx1.fill(self,"commitPathSt",{},smalltalk.Package)})},
  1808. args: [],
  1809. source: "commitPathSt\x0a\x09^ (extension ifNil: [ extension := #{} ]) at: #commitPathSt ifAbsent: [self transport commitPathStFor: self]",
  1810. messageSends: ["at:ifAbsent:", "commitPathStFor:", "transport", "ifNil:"],
  1811. referencedClasses: []
  1812. }),
  1813. smalltalk.Package);
  1814. smalltalk.addMethod(
  1815. smalltalk.method({
  1816. selector: "commitPathSt:",
  1817. category: '*Importer-Exporter',
  1818. fn: function (aString){
  1819. var self=this;
  1820. return smalltalk.withContext(function($ctx1) {
  1821. var $3,$2,$1;
  1822. $3=self["@extension"];
  1823. if(($receiver = $3) == nil || $receiver == undefined){
  1824. self["@extension"]=smalltalk.HashedCollection._from_([]);
  1825. $2=self["@extension"];
  1826. } else {
  1827. $2=$3;
  1828. };
  1829. $1=_st($2)._at_put_("commitPathSt",aString);
  1830. return $1;
  1831. }, function($ctx1) {$ctx1.fill(self,"commitPathSt:",{aString:aString},smalltalk.Package)})},
  1832. args: ["aString"],
  1833. source: "commitPathSt: aString\x0a\x09^ (extension ifNil: [ extension := #{} ]) at: #commitPathSt put: aString",
  1834. messageSends: ["at:put:", "ifNil:"],
  1835. referencedClasses: []
  1836. }),
  1837. smalltalk.Package);
  1838. smalltalk.addMethod(
  1839. smalltalk.method({
  1840. selector: "loadDependencies",
  1841. category: '*Importer-Exporter',
  1842. fn: function (){
  1843. var self=this;
  1844. var root;
  1845. function $Object(){return smalltalk.Object||(typeof Object=="undefined"?nil:Object)}
  1846. return smalltalk.withContext(function($ctx1) {
  1847. var $1,$2,$3;
  1848. root=_st($Object())._package();
  1849. $1=self.__eq_eq(root);
  1850. if(smalltalk.assert($1)){
  1851. $2=[];
  1852. return $2;
  1853. } else {
  1854. $3=[root];
  1855. return $3;
  1856. };
  1857. return self}, function($ctx1) {$ctx1.fill(self,"loadDependencies",{root:root},smalltalk.Package)})},
  1858. args: [],
  1859. source: "loadDependencies\x0a\x09\x22Returns list of packages that need to be present\x0a\x09before loading this package.\x0a\x09These are determined as set of packages covering\x0a\x09all classes used either for subclassing or for defining\x0a\x09extension methods on.\x22\x0a\x09\x0a\x09\x22Fake one for now. TODO\x22\x0a\x09| root |\x0a\x09root := Object package.\x0a\x09self == root ifTrue: [ ^#() ] ifFalse: [ ^{root} ]",
  1860. messageSends: ["package", "ifTrue:ifFalse:", "=="],
  1861. referencedClasses: ["Object"]
  1862. }),
  1863. smalltalk.Package);
  1864. smalltalk.addMethod(
  1865. smalltalk.method({
  1866. selector: "transport",
  1867. category: '*Importer-Exporter',
  1868. fn: function (){
  1869. var self=this;
  1870. function $PackageHandler(){return smalltalk.PackageHandler||(typeof PackageHandler=="undefined"?nil:PackageHandler)}
  1871. return smalltalk.withContext(function($ctx1) {
  1872. var $1;
  1873. $1=_st($PackageHandler())._for_(self._transportType());
  1874. return $1;
  1875. }, function($ctx1) {$ctx1.fill(self,"transport",{},smalltalk.Package)})},
  1876. args: [],
  1877. source: "transport\x0a\x09^ PackageHandler for: self transportType",
  1878. messageSends: ["for:", "transportType"],
  1879. referencedClasses: ["PackageHandler"]
  1880. }),
  1881. smalltalk.Package);
  1882. smalltalk.addMethod(
  1883. smalltalk.method({
  1884. selector: "transportJson",
  1885. category: '*Importer-Exporter',
  1886. fn: function (){
  1887. var self=this;
  1888. return smalltalk.withContext(function($ctx1) {
  1889. return JSON.stringify(self.transport || null);;
  1890. return self}, function($ctx1) {$ctx1.fill(self,"transportJson",{},smalltalk.Package)})},
  1891. args: [],
  1892. source: "transportJson\x0a\x09<return JSON.stringify(self.transport || null);>",
  1893. messageSends: [],
  1894. referencedClasses: []
  1895. }),
  1896. smalltalk.Package);
  1897. smalltalk.addMethod(
  1898. smalltalk.method({
  1899. selector: "transportType",
  1900. category: '*Importer-Exporter',
  1901. fn: function (){
  1902. var self=this;
  1903. return smalltalk.withContext(function($ctx1) {
  1904. return (self.transport && self.transport.type) || 'unknown';;
  1905. return self}, function($ctx1) {$ctx1.fill(self,"transportType",{},smalltalk.Package)})},
  1906. args: [],
  1907. source: "transportType\x0a\x09<return (self.transport && self.transport.type) || 'unknown';>",
  1908. messageSends: [],
  1909. referencedClasses: []
  1910. }),
  1911. smalltalk.Package);
  1912. });