1
0

Compiler.js 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206
  1. smalltalk.addClass('Node', smalltalk.Object, ['nodes'], 'Compiler');
  2. smalltalk.addMethod(
  3. '_nodes',
  4. smalltalk.method({
  5. selector: 'nodes',
  6. category: 'accessing',
  7. fn: function (){
  8. var self=this;
  9. return smalltalk.send(self['@nodes'], "_ifNil_", [(function(){return self['@nodes']=smalltalk.send(smalltalk.Array, "_new", []);})]);
  10. return self;},
  11. source: unescape('nodes%0A%09%5Enodes%20ifNil%3A%20%5Bnodes%20%3A%3D%20Array%20new%5D%0A')}),
  12. smalltalk.Node);
  13. smalltalk.addMethod(
  14. '_nodes_',
  15. smalltalk.method({
  16. selector: 'nodes:',
  17. category: 'building',
  18. fn: function (aCollection){
  19. var self=this;
  20. self['@nodes']=aCollection;
  21. return self;},
  22. source: unescape('nodes%3A%20aCollection%0A%09nodes%20%3A%3D%20aCollection%0A')}),
  23. smalltalk.Node);
  24. smalltalk.addMethod(
  25. '_addNode_',
  26. smalltalk.method({
  27. selector: 'addNode:',
  28. category: 'accessing',
  29. fn: function (aNode){
  30. var self=this;
  31. smalltalk.send(smalltalk.send(self, "_nodes", []), "_add_", [aNode]);
  32. return self;},
  33. source: unescape('addNode%3A%20aNode%0A%09self%20nodes%20add%3A%20aNode%0A')}),
  34. smalltalk.Node);
  35. smalltalk.addMethod(
  36. '_accept_',
  37. smalltalk.method({
  38. selector: 'accept:',
  39. category: 'visiting',
  40. fn: function (aVisitor){
  41. var self=this;
  42. smalltalk.send(aVisitor, "_visitNode_", [self]);
  43. return self;},
  44. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitNode%3A%20self%0A')}),
  45. smalltalk.Node);
  46. smalltalk.addClass('MethodNode', smalltalk.Node, ['selector', 'arguments', 'source'], 'Compiler');
  47. smalltalk.addMethod(
  48. '_selector',
  49. smalltalk.method({
  50. selector: 'selector',
  51. category: 'accessing',
  52. fn: function (){
  53. var self=this;
  54. return self['@selector'];
  55. return self;},
  56. source: unescape('selector%0A%09%5Eselector%0A')}),
  57. smalltalk.MethodNode);
  58. smalltalk.addMethod(
  59. '_selector_',
  60. smalltalk.method({
  61. selector: 'selector:',
  62. category: 'accessing',
  63. fn: function (aString){
  64. var self=this;
  65. self['@selector']=aString;
  66. return self;},
  67. source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString%0A')}),
  68. smalltalk.MethodNode);
  69. smalltalk.addMethod(
  70. '_arguments',
  71. smalltalk.method({
  72. selector: 'arguments',
  73. category: 'accessing',
  74. fn: function (){
  75. var self=this;
  76. return smalltalk.send(self['@arguments'], "_ifNil_", [(function(){return [];})]);
  77. return self;},
  78. source: unescape('arguments%0A%09%5Earguments%20ifNil%3A%20%5B%23%28%29%5D%0A')}),
  79. smalltalk.MethodNode);
  80. smalltalk.addMethod(
  81. '_arguments_',
  82. smalltalk.method({
  83. selector: 'arguments:',
  84. category: 'accessing',
  85. fn: function (aCollection){
  86. var self=this;
  87. self['@arguments']=aCollection;
  88. return self;},
  89. source: unescape('arguments%3A%20aCollection%0A%09arguments%20%3A%3D%20aCollection%0A')}),
  90. smalltalk.MethodNode);
  91. smalltalk.addMethod(
  92. '_source',
  93. smalltalk.method({
  94. selector: 'source',
  95. category: 'accessing',
  96. fn: function (){
  97. var self=this;
  98. return self['@source'];
  99. return self;},
  100. source: unescape('source%0A%09%5Esource%0A')}),
  101. smalltalk.MethodNode);
  102. smalltalk.addMethod(
  103. '_source_',
  104. smalltalk.method({
  105. selector: 'source:',
  106. category: 'accessing',
  107. fn: function (aString){
  108. var self=this;
  109. self['@source']=aString;
  110. return self;},
  111. source: unescape('source%3A%20aString%0A%09source%20%3A%3D%20aString%0A')}),
  112. smalltalk.MethodNode);
  113. smalltalk.addMethod(
  114. '_accept_',
  115. smalltalk.method({
  116. selector: 'accept:',
  117. category: 'visiting',
  118. fn: function (aVisitor){
  119. var self=this;
  120. smalltalk.send(aVisitor, "_visitMethodNode_", [self]);
  121. return self;},
  122. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitMethodNode%3A%20self%0A')}),
  123. smalltalk.MethodNode);
  124. smalltalk.addClass('SendNode', smalltalk.Node, ['selector', 'arguments', 'receiver'], 'Compiler');
  125. smalltalk.addMethod(
  126. '_selector',
  127. smalltalk.method({
  128. selector: 'selector',
  129. category: 'accessing',
  130. fn: function (){
  131. var self=this;
  132. return self['@selector'];
  133. return self;},
  134. source: unescape('selector%0A%09%5Eselector%0A')}),
  135. smalltalk.SendNode);
  136. smalltalk.addMethod(
  137. '_selector_',
  138. smalltalk.method({
  139. selector: 'selector:',
  140. category: 'accessing',
  141. fn: function (aString){
  142. var self=this;
  143. self['@selector']=aString;
  144. return self;},
  145. source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString%0A')}),
  146. smalltalk.SendNode);
  147. smalltalk.addMethod(
  148. '_arguments',
  149. smalltalk.method({
  150. selector: 'arguments',
  151. category: 'accessing',
  152. fn: function (){
  153. var self=this;
  154. return smalltalk.send(self['@arguments'], "_ifNil_", [(function(){return self['@arguments']=[];})]);
  155. return self;},
  156. source: unescape('arguments%0A%09%5Earguments%20ifNil%3A%20%5Barguments%20%3A%3D%20%23%28%29%5D%0A')}),
  157. smalltalk.SendNode);
  158. smalltalk.addMethod(
  159. '_arguments_',
  160. smalltalk.method({
  161. selector: 'arguments:',
  162. category: 'accessing',
  163. fn: function (aCollection){
  164. var self=this;
  165. self['@arguments']=aCollection;
  166. return self;},
  167. source: unescape('arguments%3A%20aCollection%0A%09arguments%20%3A%3D%20aCollection%0A')}),
  168. smalltalk.SendNode);
  169. smalltalk.addMethod(
  170. '_receiver',
  171. smalltalk.method({
  172. selector: 'receiver',
  173. category: 'accessing',
  174. fn: function (){
  175. var self=this;
  176. return self['@receiver'];
  177. return self;},
  178. source: unescape('receiver%0A%09%5Ereceiver%0A')}),
  179. smalltalk.SendNode);
  180. smalltalk.addMethod(
  181. '_receiver_',
  182. smalltalk.method({
  183. selector: 'receiver:',
  184. category: 'accessing',
  185. fn: function (aNode){
  186. var self=this;
  187. self['@receiver']=aNode;
  188. return self;},
  189. source: unescape('receiver%3A%20aNode%0A%09receiver%20%3A%3D%20aNode%0A')}),
  190. smalltalk.SendNode);
  191. smalltalk.addMethod(
  192. '_valueForReceiver_',
  193. smalltalk.method({
  194. selector: 'valueForReceiver:',
  195. category: 'accessing',
  196. fn: function (anObject){
  197. var self=this;
  198. return (function($rec){smalltalk.send($rec, "_receiver_", [smalltalk.send(smalltalk.send(self, "_receiver", []), "_ifNil_ifNotNil_", [(function(){return anObject;}), (function(){return smalltalk.send(smalltalk.send(self, "_receiver", []), "_valueForReceiver_", [anObject]);})])]);smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.SendNode, "_new", []));
  199. return self;},
  200. source: unescape('valueForReceiver%3A%20anObject%0A%09%5ESendNode%20new%0A%09%20%20%20%20receiver%3A%20%28self%20receiver%20%0A%09%09ifNil%3A%20%5BanObject%5D%0A%09%09ifNotNil%3A%20%5Bself%20receiver%20valueForReceiver%3A%20anObject%5D%29%3B%0A%09%20%20%20%20selector%3A%20self%20selector%3B%0A%09%20%20%20%20arguments%3A%20self%20arguments%3B%0A%09%20%20%20%20yourself%0A')}),
  201. smalltalk.SendNode);
  202. smalltalk.addMethod(
  203. '_cascadeNodeWithMessages_',
  204. smalltalk.method({
  205. selector: 'cascadeNodeWithMessages:',
  206. category: 'accessing',
  207. fn: function (aCollection){
  208. var self=this;
  209. var first=nil;
  210. first=(function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.SendNode, "_new", []));
  211. return (function($rec){smalltalk.send($rec, "_receiver_", [smalltalk.send(self, "_receiver", [])]);smalltalk.send($rec, "_nodes_", [smalltalk.send(smalltalk.send(smalltalk.Array, "_with_", [first]), "__comma", [aCollection])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.CascadeNode, "_new", []));
  212. return self;},
  213. source: unescape('cascadeNodeWithMessages%3A%20aCollection%0A%09%7C%20first%20%7C%0A%09first%20%3A%3D%20SendNode%20new%0A%09%20%20%20%20selector%3A%20self%20selector%3B%0A%09%20%20%20%20arguments%3A%20self%20arguments%3B%0A%09%20%20%20%20yourself.%0A%09%5ECascadeNode%20new%0A%09%20%20%20%20receiver%3A%20self%20receiver%3B%0A%09%20%20%20%20nodes%3A%20%28Array%20with%3A%20first%29%2C%20aCollection%3B%0A%09%20%20%20%20yourself%0A')}),
  214. smalltalk.SendNode);
  215. smalltalk.addMethod(
  216. '_accept_',
  217. smalltalk.method({
  218. selector: 'accept:',
  219. category: 'visiting',
  220. fn: function (aVisitor){
  221. var self=this;
  222. smalltalk.send(aVisitor, "_visitSendNode_", [self]);
  223. return self;},
  224. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitSendNode%3A%20self%0A')}),
  225. smalltalk.SendNode);
  226. smalltalk.addClass('CascadeNode', smalltalk.Node, ['receiver'], 'Compiler');
  227. smalltalk.addMethod(
  228. '_receiver',
  229. smalltalk.method({
  230. selector: 'receiver',
  231. category: 'accessing',
  232. fn: function (){
  233. var self=this;
  234. return self['@receiver'];
  235. return self;},
  236. source: unescape('receiver%0A%09%5Ereceiver%0A')}),
  237. smalltalk.CascadeNode);
  238. smalltalk.addMethod(
  239. '_receiver_',
  240. smalltalk.method({
  241. selector: 'receiver:',
  242. category: 'accessing',
  243. fn: function (aNode){
  244. var self=this;
  245. self['@receiver']=aNode;
  246. return self;},
  247. source: unescape('receiver%3A%20aNode%0A%09receiver%20%3A%3D%20aNode%0A')}),
  248. smalltalk.CascadeNode);
  249. smalltalk.addMethod(
  250. '_accept_',
  251. smalltalk.method({
  252. selector: 'accept:',
  253. category: 'visiting',
  254. fn: function (aVisitor){
  255. var self=this;
  256. smalltalk.send(aVisitor, "_visitCascadeNode_", [self]);
  257. return self;},
  258. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitCascadeNode%3A%20self%0A')}),
  259. smalltalk.CascadeNode);
  260. smalltalk.addClass('AssignmentNode', smalltalk.Node, ['left', 'right'], 'Compiler');
  261. smalltalk.addMethod(
  262. '_left',
  263. smalltalk.method({
  264. selector: 'left',
  265. category: 'accessing',
  266. fn: function (){
  267. var self=this;
  268. return self['@left'];
  269. return self;},
  270. source: unescape('left%0A%09%5Eleft%0A')}),
  271. smalltalk.AssignmentNode);
  272. smalltalk.addMethod(
  273. '_left_',
  274. smalltalk.method({
  275. selector: 'left:',
  276. category: 'accessing',
  277. fn: function (aNode){
  278. var self=this;
  279. self['@left']=aNode;
  280. return self;},
  281. source: unescape('left%3A%20aNode%0A%09left%20%3A%3D%20aNode%0A')}),
  282. smalltalk.AssignmentNode);
  283. smalltalk.addMethod(
  284. '_right',
  285. smalltalk.method({
  286. selector: 'right',
  287. category: 'accessing',
  288. fn: function (){
  289. var self=this;
  290. return self['@right'];
  291. return self;},
  292. source: unescape('right%0A%09%5Eright%0A')}),
  293. smalltalk.AssignmentNode);
  294. smalltalk.addMethod(
  295. '_right_',
  296. smalltalk.method({
  297. selector: 'right:',
  298. category: 'accessing',
  299. fn: function (aNode){
  300. var self=this;
  301. self['@right']=aNode;
  302. return self;},
  303. source: unescape('right%3A%20aNode%0A%09right%20%3A%3D%20aNode%0A')}),
  304. smalltalk.AssignmentNode);
  305. smalltalk.addMethod(
  306. '_accept_',
  307. smalltalk.method({
  308. selector: 'accept:',
  309. category: 'visiting',
  310. fn: function (aVisitor){
  311. var self=this;
  312. smalltalk.send(aVisitor, "_visitAssignmentNode_", [self]);
  313. return self;},
  314. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitAssignmentNode%3A%20self%0A')}),
  315. smalltalk.AssignmentNode);
  316. smalltalk.addClass('BlockNode', smalltalk.Node, ['parameters'], 'Compiler');
  317. smalltalk.addMethod(
  318. '_parameters',
  319. smalltalk.method({
  320. selector: 'parameters',
  321. category: 'accessing',
  322. fn: function (){
  323. var self=this;
  324. return smalltalk.send(self['@parameters'], "_ifNil_", [(function(){return self['@parameters']=smalltalk.send(smalltalk.Array, "_new", []);})]);
  325. return self;},
  326. source: unescape('parameters%0A%09%5Eparameters%20ifNil%3A%20%5Bparameters%20%3A%3D%20Array%20new%5D%0A')}),
  327. smalltalk.BlockNode);
  328. smalltalk.addMethod(
  329. '_parameters_',
  330. smalltalk.method({
  331. selector: 'parameters:',
  332. category: 'accessing',
  333. fn: function (aCollection){
  334. var self=this;
  335. self['@parameters']=aCollection;
  336. return self;},
  337. source: unescape('parameters%3A%20aCollection%0A%09parameters%20%3A%3D%20aCollection%0A')}),
  338. smalltalk.BlockNode);
  339. smalltalk.addMethod(
  340. '_accept_',
  341. smalltalk.method({
  342. selector: 'accept:',
  343. category: 'visiting',
  344. fn: function (aVisitor){
  345. var self=this;
  346. smalltalk.send(aVisitor, "_visitBlockNode_", [self]);
  347. return self;},
  348. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitBlockNode%3A%20self%0A')}),
  349. smalltalk.BlockNode);
  350. smalltalk.addClass('SequenceNode', smalltalk.Node, ['temps'], 'Compiler');
  351. smalltalk.addMethod(
  352. '_temps',
  353. smalltalk.method({
  354. selector: 'temps',
  355. category: 'accessing',
  356. fn: function (){
  357. var self=this;
  358. return smalltalk.send(self['@temps'], "_ifNil_", [(function(){return [];})]);
  359. return self;},
  360. source: unescape('temps%0A%09%5Etemps%20ifNil%3A%20%5B%23%28%29%5D%0A')}),
  361. smalltalk.SequenceNode);
  362. smalltalk.addMethod(
  363. '_temps_',
  364. smalltalk.method({
  365. selector: 'temps:',
  366. category: 'accessing',
  367. fn: function (aCollection){
  368. var self=this;
  369. self['@temps']=aCollection;
  370. return self;},
  371. source: unescape('temps%3A%20aCollection%0A%09temps%20%3A%3D%20aCollection%0A')}),
  372. smalltalk.SequenceNode);
  373. smalltalk.addMethod(
  374. '_asBlockSequenceNode',
  375. smalltalk.method({
  376. selector: 'asBlockSequenceNode',
  377. category: 'testing',
  378. fn: function (){
  379. var self=this;
  380. return (function($rec){smalltalk.send($rec, "_nodes_", [smalltalk.send(self, "_nodes", [])]);smalltalk.send($rec, "_temps_", [smalltalk.send(self, "_temps", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.BlockSequenceNode, "_new", []));
  381. return self;},
  382. source: unescape('asBlockSequenceNode%0A%09%5EBlockSequenceNode%20new%0A%09%20%20%20%20nodes%3A%20self%20nodes%3B%0A%09%20%20%20%20temps%3A%20self%20temps%3B%0A%09%20%20%20%20yourself%0A')}),
  383. smalltalk.SequenceNode);
  384. smalltalk.addMethod(
  385. '_accept_',
  386. smalltalk.method({
  387. selector: 'accept:',
  388. category: 'visiting',
  389. fn: function (aVisitor){
  390. var self=this;
  391. smalltalk.send(aVisitor, "_visitSequenceNode_", [self]);
  392. return self;},
  393. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitSequenceNode%3A%20self%0A')}),
  394. smalltalk.SequenceNode);
  395. smalltalk.addClass('BlockSequenceNode', smalltalk.SequenceNode, [], 'Compiler');
  396. smalltalk.addMethod(
  397. '_accept_',
  398. smalltalk.method({
  399. selector: 'accept:',
  400. category: 'visiting',
  401. fn: function (aVisitor){
  402. var self=this;
  403. smalltalk.send(aVisitor, "_visitBlockSequenceNode_", [self]);
  404. return self;},
  405. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitBlockSequenceNode%3A%20self%0A')}),
  406. smalltalk.BlockSequenceNode);
  407. smalltalk.addClass('ReturnNode', smalltalk.Node, [], 'Compiler');
  408. smalltalk.addMethod(
  409. '_accept_',
  410. smalltalk.method({
  411. selector: 'accept:',
  412. category: 'visiting',
  413. fn: function (aVisitor){
  414. var self=this;
  415. smalltalk.send(aVisitor, "_visitReturnNode_", [self]);
  416. return self;},
  417. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitReturnNode%3A%20self%0A')}),
  418. smalltalk.ReturnNode);
  419. smalltalk.addClass('ValueNode', smalltalk.Node, ['value'], 'Compiler');
  420. smalltalk.addMethod(
  421. '_value',
  422. smalltalk.method({
  423. selector: 'value',
  424. category: 'accessing',
  425. fn: function (){
  426. var self=this;
  427. return self['@value'];
  428. return self;},
  429. source: unescape('value%0A%09%5Evalue%0A')}),
  430. smalltalk.ValueNode);
  431. smalltalk.addMethod(
  432. '_value_',
  433. smalltalk.method({
  434. selector: 'value:',
  435. category: 'accessing',
  436. fn: function (anObject){
  437. var self=this;
  438. self['@value']=anObject;
  439. return self;},
  440. source: unescape('value%3A%20anObject%0A%09value%20%3A%3D%20anObject%0A')}),
  441. smalltalk.ValueNode);
  442. smalltalk.addMethod(
  443. '_accept_',
  444. smalltalk.method({
  445. selector: 'accept:',
  446. category: 'visiting',
  447. fn: function (aVisitor){
  448. var self=this;
  449. smalltalk.send(aVisitor, "_visitValueNode_", [self]);
  450. return self;},
  451. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitValueNode%3A%20self%0A')}),
  452. smalltalk.ValueNode);
  453. smalltalk.addClass('VariableNode', smalltalk.ValueNode, [], 'Compiler');
  454. smalltalk.addMethod(
  455. '_accept_',
  456. smalltalk.method({
  457. selector: 'accept:',
  458. category: 'visiting',
  459. fn: function (aVisitor){
  460. var self=this;
  461. smalltalk.send(aVisitor, "_visitVariableNode_", [self]);
  462. return self;},
  463. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitVariableNode%3A%20self%0A')}),
  464. smalltalk.VariableNode);
  465. smalltalk.addClass('ClassReferenceNode', smalltalk.VariableNode, [], 'Compiler');
  466. smalltalk.addMethod(
  467. '_accept_',
  468. smalltalk.method({
  469. selector: 'accept:',
  470. category: 'visiting',
  471. fn: function (aVisitor){
  472. var self=this;
  473. smalltalk.send(aVisitor, "_visitClassReferenceNode_", [self]);
  474. return self;},
  475. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitClassReferenceNode%3A%20self%0A')}),
  476. smalltalk.ClassReferenceNode);
  477. smalltalk.addClass('JSStatementNode', smalltalk.Node, ['source'], 'Compiler');
  478. smalltalk.addMethod(
  479. '_source',
  480. smalltalk.method({
  481. selector: 'source',
  482. category: 'accessing',
  483. fn: function (){
  484. var self=this;
  485. return smalltalk.send(self['@source'], "_ifNil_", [(function(){return "";})]);
  486. return self;},
  487. source: unescape('source%0A%09%5Esource%20ifNil%3A%20%5B%27%27%5D%0A')}),
  488. smalltalk.JSStatementNode);
  489. smalltalk.addMethod(
  490. '_source_',
  491. smalltalk.method({
  492. selector: 'source:',
  493. category: 'accessing',
  494. fn: function (aString){
  495. var self=this;
  496. self['@source']=aString;
  497. return self;},
  498. source: unescape('source%3A%20aString%0A%09source%20%3A%3D%20aString%0A')}),
  499. smalltalk.JSStatementNode);
  500. smalltalk.addMethod(
  501. '_accept_',
  502. smalltalk.method({
  503. selector: 'accept:',
  504. category: 'visiting',
  505. fn: function (aVisitor){
  506. var self=this;
  507. smalltalk.send(aVisitor, "_visitJSStatementNode_", [self]);
  508. return self;},
  509. source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitJSStatementNode%3A%20self%0A')}),
  510. smalltalk.JSStatementNode);
  511. smalltalk.addClass('NodeVisitor', smalltalk.Object, [], 'Compiler');
  512. smalltalk.addMethod(
  513. '_visit_',
  514. smalltalk.method({
  515. selector: 'visit:',
  516. category: 'visiting',
  517. fn: function (aNode){
  518. var self=this;
  519. smalltalk.send(aNode, "_accept_", [self]);
  520. return self;},
  521. source: unescape('visit%3A%20aNode%0A%09aNode%20accept%3A%20self%0A')}),
  522. smalltalk.NodeVisitor);
  523. smalltalk.addMethod(
  524. '_visitNode_',
  525. smalltalk.method({
  526. selector: 'visitNode:',
  527. category: 'visiting',
  528. fn: function (aNode){
  529. var self=this;
  530. return self;},
  531. source: unescape('visitNode%3A%20aNode%0A')}),
  532. smalltalk.NodeVisitor);
  533. smalltalk.addMethod(
  534. '_visitMethodNode_',
  535. smalltalk.method({
  536. selector: 'visitMethodNode:',
  537. category: 'visiting',
  538. fn: function (aNode){
  539. var self=this;
  540. smalltalk.send(self, "_visitNode_", [aNode]);
  541. return self;},
  542. source: unescape('visitMethodNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode%0A')}),
  543. smalltalk.NodeVisitor);
  544. smalltalk.addMethod(
  545. '_visitSequenceNode_',
  546. smalltalk.method({
  547. selector: 'visitSequenceNode:',
  548. category: 'visiting',
  549. fn: function (aNode){
  550. var self=this;
  551. smalltalk.send(self, "_visitNode_", [aNode]);
  552. return self;},
  553. source: unescape('visitSequenceNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode%0A')}),
  554. smalltalk.NodeVisitor);
  555. smalltalk.addMethod(
  556. '_visitBlockSequenceNode_',
  557. smalltalk.method({
  558. selector: 'visitBlockSequenceNode:',
  559. category: 'visiting',
  560. fn: function (aNode){
  561. var self=this;
  562. smalltalk.send(self, "_visitSequenceNode_", [aNode]);
  563. return self;},
  564. source: unescape('visitBlockSequenceNode%3A%20aNode%0A%09self%20visitSequenceNode%3A%20aNode%0A')}),
  565. smalltalk.NodeVisitor);
  566. smalltalk.addMethod(
  567. '_visitBlockNode_',
  568. smalltalk.method({
  569. selector: 'visitBlockNode:',
  570. category: 'visiting',
  571. fn: function (aNode){
  572. var self=this;
  573. smalltalk.send(self, "_visitNode_", [aNode]);
  574. return self;},
  575. source: unescape('visitBlockNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode%0A')}),
  576. smalltalk.NodeVisitor);
  577. smalltalk.addMethod(
  578. '_visitReturnNode_',
  579. smalltalk.method({
  580. selector: 'visitReturnNode:',
  581. category: 'visiting',
  582. fn: function (aNode){
  583. var self=this;
  584. smalltalk.send(self, "_visitNode_", [aNode]);
  585. return self;},
  586. source: unescape('visitReturnNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode%0A')}),
  587. smalltalk.NodeVisitor);
  588. smalltalk.addMethod(
  589. '_visitSendNode_',
  590. smalltalk.method({
  591. selector: 'visitSendNode:',
  592. category: 'visiting',
  593. fn: function (aNode){
  594. var self=this;
  595. smalltalk.send(self, "_visitNode_", [aNode]);
  596. return self;},
  597. source: unescape('visitSendNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode%0A')}),
  598. smalltalk.NodeVisitor);
  599. smalltalk.addMethod(
  600. '_visitCascadeNode_',
  601. smalltalk.method({
  602. selector: 'visitCascadeNode:',
  603. category: 'visiting',
  604. fn: function (aNode){
  605. var self=this;
  606. smalltalk.send(self, "_visitNode_", [aNode]);
  607. return self;},
  608. source: unescape('visitCascadeNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode%0A')}),
  609. smalltalk.NodeVisitor);
  610. smalltalk.addMethod(
  611. '_visitValueNode_',
  612. smalltalk.method({
  613. selector: 'visitValueNode:',
  614. category: 'visiting',
  615. fn: function (aNode){
  616. var self=this;
  617. smalltalk.send(self, "_visitNode_", [aNode]);
  618. return self;},
  619. source: unescape('visitValueNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode%0A')}),
  620. smalltalk.NodeVisitor);
  621. smalltalk.addMethod(
  622. '_visitVariableNode_',
  623. smalltalk.method({
  624. selector: 'visitVariableNode:',
  625. category: 'visiting',
  626. fn: function (aNode){
  627. var self=this;
  628. return self;},
  629. source: unescape('visitVariableNode%3A%20aNode%0A')}),
  630. smalltalk.NodeVisitor);
  631. smalltalk.addMethod(
  632. '_visitAssignmentNode_',
  633. smalltalk.method({
  634. selector: 'visitAssignmentNode:',
  635. category: 'visiting',
  636. fn: function (aNode){
  637. var self=this;
  638. smalltalk.send(self, "_visitNode_", [aNode]);
  639. return self;},
  640. source: unescape('visitAssignmentNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode%0A')}),
  641. smalltalk.NodeVisitor);
  642. smalltalk.addMethod(
  643. '_visitClassReferenceNode_',
  644. smalltalk.method({
  645. selector: 'visitClassReferenceNode:',
  646. category: 'visiting',
  647. fn: function (aNode){
  648. var self=this;
  649. (function($rec){smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_value", [])]);})(self);
  650. return self;},
  651. source: unescape('visitClassReferenceNode%3A%20aNode%0A%09self%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aNode%20value%0A')}),
  652. smalltalk.NodeVisitor);
  653. smalltalk.addMethod(
  654. '_visitJSStatementNode_',
  655. smalltalk.method({
  656. selector: 'visitJSStatementNode:',
  657. category: 'visiting',
  658. fn: function (aNode){
  659. var self=this;
  660. (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("function%28%29%7B")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_source", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%28%29")]);})(self);
  661. return self;},
  662. source: unescape('visitJSStatementNode%3A%20aNode%0A%09self%20%0A%09%20%20%20%20nextPutAll%3A%20%27function%28%29%7B%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aNode%20source%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%7D%29%28%29%27%0A')}),
  663. smalltalk.NodeVisitor);
  664. smalltalk.addClass('Compiler', smalltalk.NodeVisitor, ['stream', 'nestedBlocks', 'earlyReturn', 'currentClass', 'currentSelector', 'unknownVariables', 'tempVariables'], 'Compiler');
  665. smalltalk.addMethod(
  666. '_initialize',
  667. smalltalk.method({
  668. selector: 'initialize',
  669. category: 'initialization',
  670. fn: function (){
  671. var self=this;
  672. self.klass.superclass.fn.prototype['_initialize'].apply(self, []);
  673. self['@stream']=smalltalk.send("", "_writeStream", []);
  674. self['@unknownVariables']=[];
  675. self['@tempVariables']=[];
  676. return self;},
  677. source: unescape('initialize%0A%09super%20initialize.%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09unknownVariables%20%3A%3D%20%23%28%29.%0A%09tempVariables%20%3A%3D%20%23%28%29%0A')}),
  678. smalltalk.Compiler);
  679. smalltalk.addMethod(
  680. '_parser',
  681. smalltalk.method({
  682. selector: 'parser',
  683. category: 'accessing',
  684. fn: function (){
  685. var self=this;
  686. return smalltalk.send(smalltalk.SmalltalkParser, "_new", []);
  687. return self;},
  688. source: unescape('parser%0A%09%5ESmalltalkParser%20new%0A')}),
  689. smalltalk.Compiler);
  690. smalltalk.addMethod(
  691. '_currentClass',
  692. smalltalk.method({
  693. selector: 'currentClass',
  694. category: 'accessing',
  695. fn: function (){
  696. var self=this;
  697. return self['@currentClass'];
  698. return self;},
  699. source: unescape('currentClass%0A%09%5EcurrentClass%0A')}),
  700. smalltalk.Compiler);
  701. smalltalk.addMethod(
  702. '_currentClass_',
  703. smalltalk.method({
  704. selector: 'currentClass:',
  705. category: 'accessing',
  706. fn: function (aClass){
  707. var self=this;
  708. self['@currentClass']=aClass;
  709. return self;},
  710. source: unescape('currentClass%3A%20aClass%0A%09currentClass%20%3A%3D%20aClass%0A')}),
  711. smalltalk.Compiler);
  712. smalltalk.addMethod(
  713. '_loadExpression_',
  714. smalltalk.method({
  715. selector: 'loadExpression:',
  716. category: 'compiling',
  717. fn: function (aString){
  718. var self=this;
  719. smalltalk.send(smalltalk.DoIt, "_addCompiledMethod_", [smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compileExpression_", [aString])])]);
  720. return smalltalk.send(smalltalk.send(smalltalk.DoIt, "_new", []), "_doIt", []);
  721. return self;},
  722. source: unescape('loadExpression%3A%20aString%0A%09DoIt%20addCompiledMethod%3A%20%28self%20eval%3A%20%28self%20compileExpression%3A%20aString%29%29.%0A%09%5EDoIt%20new%20doIt%0A')}),
  723. smalltalk.Compiler);
  724. smalltalk.addMethod(
  725. '_load_forClass_',
  726. smalltalk.method({
  727. selector: 'load:forClass:',
  728. category: 'compiling',
  729. fn: function (aString, aClass){
  730. var self=this;
  731. return smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compile_forClass_", [aString, aClass])]);
  732. return self;},
  733. source: unescape('load%3A%20aString%20forClass%3A%20aClass%0A%09%5Eself%20eval%3A%20%28self%20compile%3A%20aString%20forClass%3A%20aClass%29%0A')}),
  734. smalltalk.Compiler);
  735. smalltalk.addMethod(
  736. '_compile_forClass_',
  737. smalltalk.method({
  738. selector: 'compile:forClass:',
  739. category: 'compiling',
  740. fn: function (aString, aClass){
  741. var self=this;
  742. smalltalk.send(self, "_currentClass_", [aClass]);
  743. return smalltalk.send(self, "_compile_", [aString]);
  744. return self;},
  745. source: unescape('compile%3A%20aString%20forClass%3A%20aClass%0A%09self%20currentClass%3A%20aClass.%0A%09%5Eself%20compile%3A%20aString%0A')}),
  746. smalltalk.Compiler);
  747. smalltalk.addMethod(
  748. '_compileExpression_',
  749. smalltalk.method({
  750. selector: 'compileExpression:',
  751. category: 'compiling',
  752. fn: function (aString){
  753. var self=this;
  754. smalltalk.send(self, "_currentClass_", [smalltalk.DoIt]);
  755. return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parseExpression_", [aString])]);
  756. return self;},
  757. source: unescape('compileExpression%3A%20aString%0A%09self%20currentClass%3A%20DoIt.%0A%09%5Eself%20compileNode%3A%20%28self%20parseExpression%3A%20aString%29%0A')}),
  758. smalltalk.Compiler);
  759. smalltalk.addMethod(
  760. '_eval_',
  761. smalltalk.method({
  762. selector: 'eval:',
  763. category: 'compiling',
  764. fn: function (aString){
  765. var self=this;
  766. return eval(aString);
  767. return self;},
  768. source: unescape('eval%3A%20aString%0A%09%7B%27return%20eval%28aString%29%27%7D')}),
  769. smalltalk.Compiler);
  770. smalltalk.addMethod(
  771. '_compile_',
  772. smalltalk.method({
  773. selector: 'compile:',
  774. category: 'compiling',
  775. fn: function (aString){
  776. var self=this;
  777. return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [aString])]);
  778. return self;},
  779. source: unescape('compile%3A%20aString%0A%09%5Eself%20compileNode%3A%20%28self%20parse%3A%20aString%29%0A')}),
  780. smalltalk.Compiler);
  781. smalltalk.addMethod(
  782. '_compileNode_',
  783. smalltalk.method({
  784. selector: 'compileNode:',
  785. category: 'compiling',
  786. fn: function (aNode){
  787. var self=this;
  788. self['@stream']=smalltalk.send("", "_writeStream", []);
  789. smalltalk.send(self, "_visit_", [aNode]);
  790. return smalltalk.send(self['@stream'], "_contents", []);
  791. return self;},
  792. source: unescape('compileNode%3A%20aNode%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09self%20visit%3A%20aNode.%0A%09%5Estream%20contents%0A')}),
  793. smalltalk.Compiler);
  794. smalltalk.addMethod(
  795. '_visit_',
  796. smalltalk.method({
  797. selector: 'visit:',
  798. category: 'visiting',
  799. fn: function (aNode){
  800. var self=this;
  801. smalltalk.send(aNode, "_accept_", [self]);
  802. return self;},
  803. source: unescape('visit%3A%20aNode%0A%09aNode%20accept%3A%20self%0A')}),
  804. smalltalk.Compiler);
  805. smalltalk.addMethod(
  806. '_visitMethodNode_',
  807. smalltalk.method({
  808. selector: 'visitMethodNode:',
  809. category: 'visiting',
  810. fn: function (aNode){
  811. var self=this;
  812. var str=nil;
  813. var currentSelector=nil;
  814. self['@currentSelector']=smalltalk.send(smalltalk.send(aNode, "_selector", []), "_asSelector", []);
  815. self['@nestedBlocks']=(0);
  816. self['@earlyReturn']=false;
  817. self['@unknownVariables']=[];
  818. self['@tempVariables']=[];
  819. (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("smalltalk.method%28%7B"), "__comma", [smalltalk.send(smalltalk.String, "_cr", [])])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(unescape("selector%3A%20%22"), "__comma", [smalltalk.send(aNode, "_selector", [])]), "__comma", [unescape("%22%2C")]), "__comma", [smalltalk.send(smalltalk.String, "_cr", [])])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%22"), "__comma", [smalltalk.send(smalltalk.send(aNode, "_source", []), "_escaped", [])]), "__comma", [unescape("%22%29%2C")]), "__comma", [smalltalk.send(smalltalk.String, "_cr", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("fn%3A%20function%28")]);})(self['@stream']);
  820. smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@tempVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]);
  821. (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%29%7B"), "__comma", [smalltalk.send(smalltalk.String, "_cr", [])])]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("var%20self%3Dthis%3B"), "__comma", [smalltalk.send(smalltalk.String, "_cr", [])])]);})(self['@stream']);
  822. str=self['@stream'];
  823. self['@stream']=smalltalk.send("", "_writeStream", []);
  824. smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]);
  825. smalltalk.send(self['@earlyReturn'], "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})]);
  826. smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self['@stream'], "_contents", [])]);
  827. self['@stream']=str;
  828. (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.String, "_cr", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("return%20self%3B")]);})(self['@stream']);
  829. smalltalk.send(self['@earlyReturn'], "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.String, "_cr", []), "__comma", [unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20")]), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})]);
  830. (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%7D"), "__comma", [smalltalk.send(smalltalk.String, "_cr", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29")]);})(self['@stream']);
  831. return self;},
  832. source: unescape('visitMethodNode%3A%20aNode%0A%09%7C%20str%20currentSelector%20%7C%0A%09currentSelector%20%3A%3D%20aNode%20selector%20asSelector.%0A%09nestedBlocks%20%3A%3D%200.%0A%09earlyReturn%20%3A%3D%20false.%0A%09unknownVariables%20%3A%3D%20%23%28%29.%0A%09tempVariables%20%3A%3D%20%23%28%29.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.method%28%7B%27%2C%20String%20cr%3B%0A%09%20%20%20%20nextPutAll%3A%20%27selector%3A%20%22%27%2C%20aNode%20selector%2C%20%27%22%2C%27%2C%20String%20cr%3B%0A%09%20%20%20%20nextPutAll%3A%20%27source%3A%20unescape%28%22%27%2C%20aNode%20source%20escaped%2C%20%27%22%29%2C%27%2C%20String%20cr%3B%0A%09%20%20%20%20nextPutAll%3A%20%27fn%3A%20function%28%27.%0A%09aNode%20arguments%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09tempVariables%20add%3A%20each.%0A%09%09stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20%27%29%7B%27%2C%20String%20cr%3B%0A%09%20%20%20%20nextPutAll%3A%20%27var%20self%3Dthis%3B%27%2C%20String%20cr.%0A%09str%20%3A%3D%20stream.%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each%5D.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20str%20nextPutAll%3A%20%27try%7B%27%5D.%0A%09str%20nextPutAll%3A%20stream%20contents.%0A%09stream%20%3A%3D%20str.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20String%20cr%3B%20%0A%09%20%20%20%20nextPutAll%3A%20%27return%20self%3B%27.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20stream%20nextPutAll%3A%20String%20cr%2C%20%27%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27%27stReturn%27%27%20%26%26%20e.selector%20%3D%3D%3D%20%27%2C%20currentSelector%20printString%2C%20%27%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D%27%5D.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20%27%7D%27%2C%20String%20cr%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%7D%29%27%0A')}),
  833. smalltalk.Compiler);
  834. smalltalk.addMethod(
  835. '_visitBlockNode_',
  836. smalltalk.method({
  837. selector: 'visitBlockNode:',
  838. category: 'visiting',
  839. fn: function (aNode){
  840. var self=this;
  841. smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28")]);
  842. smalltalk.send(smalltalk.send(aNode, "_parameters", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@tempVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]);
  843. smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29%7B")]);
  844. smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]);
  845. smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]);
  846. return self;},
  847. source: unescape('visitBlockNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27%28function%28%27.%0A%09aNode%20parameters%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%0A%09%09tempVariables%20add%3A%20each.%0A%09%09stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09stream%20nextPutAll%3A%20%27%29%7B%27.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D.%0A%09stream%20nextPutAll%3A%20%27%7D%29%27%0A')}),
  848. smalltalk.Compiler);
  849. smalltalk.addMethod(
  850. '_visitSequenceNode_',
  851. smalltalk.method({
  852. selector: 'visitSequenceNode:',
  853. category: 'visiting',
  854. fn: function (aNode){
  855. var self=this;
  856. smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){smalltalk.send(self['@tempVariables'], "_add_", [each]);smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [each]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.String, "_cr", [])]);})]);
  857. smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.String, "_cr", [])]);})]);
  858. return self;},
  859. source: unescape('visitSequenceNode%3A%20aNode%0A%09aNode%20temps%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20tempVariables%20add%3A%20each.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27var%20%27%2C%20each%2C%20%27%3Dnil%3B%27.%0A%09%20%20%20%20stream%20nextPutAll%3A%20String%20cr%5D.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20String%20cr%5D%0A')}),
  860. smalltalk.Compiler);
  861. smalltalk.addMethod(
  862. '_visitBlockSequenceNode_',
  863. smalltalk.method({
  864. selector: 'visitBlockSequenceNode:',
  865. category: 'visiting',
  866. fn: function (aNode){
  867. var self=this;
  868. var index=nil;
  869. self['@nestedBlocks']=smalltalk.send(self['@nestedBlocks'], "__plus", [(1)]);
  870. smalltalk.send(smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_isEmpty", []), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);}), (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){smalltalk.send(self['@tempVariables'], "_add_", [each]);smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [each]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.String, "_cr", [])]);})]);index=(0);return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){index=smalltalk.send(index, "__plus", [(1)]);smalltalk.send(smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])]), "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]);smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})]);
  871. self['@nestedBlocks']=smalltalk.send(self['@nestedBlocks'], "__minus", [(1)]);
  872. return self;},
  873. source: unescape('visitBlockSequenceNode%3A%20aNode%0A%09%7C%20index%20%7C%0A%09nestedBlocks%20%3A%3D%20nestedBlocks%20+%201.%0A%09aNode%20nodes%20isEmpty%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09stream%20nextPutAll%3A%20%27return%20nil%3B%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aNode%20temps%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%20%20%20%20tempVariables%20add%3A%20each.%0A%09%09%20%20%20%20stream%20nextPutAll%3A%20%27var%20%27%2C%20each%2C%20%27%3Dnil%3B%27.%0A%09%09%20%20%20%20stream%20nextPutAll%3A%20String%20cr%5D.%0A%09%09index%20%3A%3D%200.%0A%09%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%20%20%20%20index%20%3A%3D%20index%20+%201.%0A%09%09%20%20%20%20index%20%3D%20aNode%20nodes%20size%20ifTrue%3A%20%5B%0A%09%09%09stream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09%09%20%20%20%20self%20visit%3A%20each.%0A%09%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D%5D.%0A%09nestedBlocks%20%3A%3D%20nestedBlocks%20-%201%0A')}),
  874. smalltalk.Compiler);
  875. smalltalk.addMethod(
  876. '_visitReturnNode_',
  877. smalltalk.method({
  878. selector: 'visitReturnNode:',
  879. category: 'visiting',
  880. fn: function (aNode){
  881. var self=this;
  882. smalltalk.send(smalltalk.send(self['@nestedBlocks'], "__gt", [(0)]), "_ifTrue_", [(function(){return self['@earlyReturn']=true;})]);
  883. smalltalk.send(self['@earlyReturn'], "_ifTrue_ifFalse_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]);
  884. smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]);
  885. smalltalk.send(self['@earlyReturn'], "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})]);
  886. return self;},
  887. source: unescape('visitReturnNode%3A%20aNode%0A%09nestedBlocks%20%3E%200%20ifTrue%3A%20%5B%0A%09%20%20%20%20earlyReturn%20%3A%3D%20true%5D.%0A%09earlyReturn%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09stream%0A%09%09%20%20%20%20nextPutAll%3A%20%27%28function%28%29%7Bthrow%28%27%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%7Bname%3A%20%27%27stReturn%27%27%2C%20selector%3A%20%27%3B%0A%09%09%20%20%20%20nextPutAll%3A%20currentSelector%20printString%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%2C%20fn%3A%20function%28%29%7Breturn%20%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each%5D.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%7D%7D%29%7D%29%28%29%27%5D%0A')}),
  888. smalltalk.Compiler);
  889. smalltalk.addMethod(
  890. '_visitSendNode_',
  891. smalltalk.method({
  892. selector: 'visitSendNode:',
  893. category: 'visiting',
  894. fn: function (aNode){
  895. var self=this;
  896. var str=nil;
  897. str=self['@stream'];
  898. self['@stream']=smalltalk.send("", "_writeStream", []);
  899. smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]);
  900. smalltalk.send(smalltalk.send(smalltalk.send(self['@stream'], "_contents", []), "__eq", ["super"]), "_ifTrue_ifFalse_", [(function(){self['@stream']=str;(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("self.klass.superclass.fn.prototype%5B%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_selector", []), "_asSelector", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%27%5D.apply%28self%2C%20%5B")]);})(self['@stream']);smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D%29")]);}), (function(){smalltalk.send(str, "_nextPutAll_", [unescape("smalltalk.send%28")]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self['@stream'], "_contents", [])]);self['@stream']=str;smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C%20%22"), "__comma", [smalltalk.send(smalltalk.send(aNode, "_selector", []), "_asSelector", [])]), "__comma", [unescape("%22%2C%20%5B")])]);smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D%29")]);})]);
  901. return self;},
  902. source: unescape('visitSendNode%3A%20aNode%0A%09%7C%20str%20%7C%0A%09str%20%3A%3D%20stream.%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09self%20visit%3A%20aNode%20receiver.%0A%09stream%20contents%20%3D%20%27super%27%20%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09stream%20%3A%3D%20str.%0A%09%09stream%20%0A%09%09%20%20%20%20nextPutAll%3A%20%27self.klass.superclass.fn.prototype%5B%27%27%27%3B%0A%09%09%20%20%20%20nextPutAll%3A%20aNode%20selector%20asSelector%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%27%27%5D.apply%28self%2C%20%5B%27.%0A%09%09aNode%20arguments%20%0A%09%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D%0A%09%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09%09stream%20nextPutAll%3A%20%27%5D%29%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09str%20nextPutAll%3A%20%27smalltalk.send%28%27.%0A%09%09str%20nextPutAll%3A%20stream%20contents.%0A%09%09stream%20%3A%3D%20str.%0A%09%09stream%20nextPutAll%3A%20%27%2C%20%22%27%2C%20aNode%20selector%20asSelector%2C%20%27%22%2C%20%5B%27.%0A%09%09aNode%20arguments%20%0A%09%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D%0A%09%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09%09stream%20nextPutAll%3A%20%27%5D%29%27%5D')}),
  903. smalltalk.Compiler);
  904. smalltalk.addMethod(
  905. '_visitCascadeNode_',
  906. smalltalk.method({
  907. selector: 'visitCascadeNode:',
  908. category: 'visiting',
  909. fn: function (aNode){
  910. var self=this;
  911. var index=nil;
  912. index=(0);
  913. smalltalk.send(smalltalk.send(self['@tempVariables'], "_includes_", ["$rec"]), "_ifFalse_", [(function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})]);
  914. smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28%24rec%29%7B")]);
  915. smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){index=smalltalk.send(index, "__plus", [(1)]);smalltalk.send(smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])]), "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]);smalltalk.send(each, "_receiver_", [smalltalk.send(smalltalk.send(smalltalk.VariableNode, "_new", []), "_value_", ["$rec"])]);smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);
  916. smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29%28")]);
  917. smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]);
  918. smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]);
  919. return self;},
  920. source: unescape('visitCascadeNode%3A%20aNode%0A%09%7C%20index%20%7C%0A%09index%20%3A%3D%200.%0A%09%28tempVariables%20includes%3A%20%27%24rec%27%29%20ifFalse%3A%20%5B%0A%09%09tempVariables%20add%3A%20%27%24rec%27%5D.%0A%09stream%20nextPutAll%3A%20%27%28function%28%24rec%29%7B%27.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20index%20%3A%3D%20index%20+%201.%0A%09%20%20%20%20index%20%3D%20aNode%20nodes%20size%20ifTrue%3A%20%5B%0A%09%09stream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09%20%20%20%20each%20receiver%3A%20%28VariableNode%20new%20value%3A%20%27%24rec%27%29.%0A%09%20%20%20%20self%20visit%3A%20each.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D.%0A%09stream%20nextPutAll%3A%20%27%7D%29%28%27.%0A%09self%20visit%3A%20aNode%20receiver.%0A%09stream%20nextPutAll%3A%20%27%29%27%0A')}),
  921. smalltalk.Compiler);
  922. smalltalk.addMethod(
  923. '_visitValueNode_',
  924. smalltalk.method({
  925. selector: 'visitValueNode:',
  926. category: 'visiting',
  927. fn: function (aNode){
  928. var self=this;
  929. smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_value", []), "_asJavascript", [])]);
  930. return self;},
  931. source: unescape('visitValueNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20aNode%20value%20asJavascript%0A')}),
  932. smalltalk.Compiler);
  933. smalltalk.addMethod(
  934. '_visitAssignmentNode_',
  935. smalltalk.method({
  936. selector: 'visitAssignmentNode:',
  937. category: 'visiting',
  938. fn: function (aNode){
  939. var self=this;
  940. smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_left", [])]);
  941. smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3D")]);
  942. smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_right", [])]);
  943. return self;},
  944. source: unescape('visitAssignmentNode%3A%20aNode%0A%09self%20visit%3A%20aNode%20left.%0A%09stream%20nextPutAll%3A%20%27%3D%27.%0A%09self%20visit%3A%20aNode%20right%0A')}),
  945. smalltalk.Compiler);
  946. smalltalk.addMethod(
  947. '_visitClassReferenceNode_',
  948. smalltalk.method({
  949. selector: 'visitClassReferenceNode:',
  950. category: 'visiting',
  951. fn: function (aNode){
  952. var self=this;
  953. (function($rec){smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_value", [])]);})(self['@stream']);
  954. return self;},
  955. source: unescape('visitClassReferenceNode%3A%20aNode%0A%09stream%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aNode%20value%0A')}),
  956. smalltalk.Compiler);
  957. smalltalk.addMethod(
  958. '_visitVariableNode_',
  959. smalltalk.method({
  960. selector: 'visitVariableNode:',
  961. category: 'visiting',
  962. fn: function (aNode){
  963. var self=this;
  964. smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_currentClass", []), "_instanceVariableNames", []), "_includes_", [smalltalk.send(aNode, "_value", [])]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);}), (function(){smalltalk.send(smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [smalltalk.send(aNode, "_value", [])]), "_ifFalse_", [(function(){return smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);})]);return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(aNode, "_value", [])]);})]);
  965. return self;},
  966. source: unescape('visitVariableNode%3A%20aNode%0A%09%28self%20currentClass%20instanceVariableNames%20includes%3A%20aNode%20value%29%20%0A%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20%27self%5B%27%27@%27%2C%20aNode%20value%2C%20%27%27%27%5D%27%5D%0A%09%09ifFalse%3A%20%5B%0A%09%09%09%28self%20knownVariables%20includes%3A%20aNode%20value%29%20ifFalse%3A%20%5B%0A%09%09%09%09unknownVariables%20add%3A%20aNode%20value%5D.%0A%09%09%09stream%20nextPutAll%3A%20aNode%20value%5D%0A')}),
  967. smalltalk.Compiler);
  968. smalltalk.addMethod(
  969. '_visitJSStatementNode_',
  970. smalltalk.method({
  971. selector: 'visitJSStatementNode:',
  972. category: 'visiting',
  973. fn: function (aNode){
  974. var self=this;
  975. smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(aNode, "_source", []), "_value", []), "_replace_with_", [unescape("%27%27"), unescape("%27")])]);
  976. return self;},
  977. source: unescape('visitJSStatementNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%28aNode%20source%20value%20replace%3A%20%27%27%27%27%27%27%20with%3A%20%27%27%27%27%29')}),
  978. smalltalk.Compiler);
  979. smalltalk.addMethod(
  980. '_parse_',
  981. smalltalk.method({
  982. selector: 'parse:',
  983. category: 'compiling',
  984. fn: function (aString){
  985. var self=this;
  986. return smalltalk.send(smalltalk.send(self, "_parser", []), "_parse_", [smalltalk.send(aString, "_readStream", [])]);
  987. return self;},
  988. source: unescape('parse%3A%20aString%0A%20%20%20%20%5Eself%20parser%20parse%3A%20aString%20readStream%0A')}),
  989. smalltalk.Compiler);
  990. smalltalk.addMethod(
  991. '_parseExpression_',
  992. smalltalk.method({
  993. selector: 'parseExpression:',
  994. category: 'compiling',
  995. fn: function (aString){
  996. var self=this;
  997. return smalltalk.send(self, "_parse_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]);
  998. return self;},
  999. source: unescape('parseExpression%3A%20aString%0A%20%20%20%20%5Eself%20parse%3A%20%27doIt%20%5E%5B%27%2C%20aString%2C%20%27%5D%20value%27%0A')}),
  1000. smalltalk.Compiler);
  1001. smalltalk.addMethod(
  1002. '_unknownVariables',
  1003. smalltalk.method({
  1004. selector: 'unknownVariables',
  1005. category: 'accessing',
  1006. fn: function (){
  1007. var self=this;
  1008. return smalltalk.send(self['@unknownVariables'], "_copy", []);
  1009. return self;},
  1010. source: unescape('unknownVariables%0A%09%5EunknownVariables%20copy')}),
  1011. smalltalk.Compiler);
  1012. smalltalk.addMethod(
  1013. '_pseudoVariables',
  1014. smalltalk.method({
  1015. selector: 'pseudoVariables',
  1016. category: 'accessing',
  1017. fn: function (){
  1018. var self=this;
  1019. return ["self", "super", "true", "false", "nil", "thisContext"];
  1020. return self;},
  1021. source: unescape('pseudoVariables%0A%09%5E%23%28%27self%27%20%27super%27%20%27true%27%20%27false%27%20%27nil%27%20%27thisContext%27%29')}),
  1022. smalltalk.Compiler);
  1023. smalltalk.addMethod(
  1024. '_tempVariables',
  1025. smalltalk.method({
  1026. selector: 'tempVariables',
  1027. category: 'accessing',
  1028. fn: function (){
  1029. var self=this;
  1030. return smalltalk.send(self['@tempVariables'], "_copy", []);
  1031. return self;},
  1032. source: unescape('tempVariables%0A%09%5EtempVariables%20copy')}),
  1033. smalltalk.Compiler);
  1034. smalltalk.addMethod(
  1035. '_knownVariables',
  1036. smalltalk.method({
  1037. selector: 'knownVariables',
  1038. category: 'accessing',
  1039. fn: function (){
  1040. var self=this;
  1041. return (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_tempVariables", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_pseudoVariables", []));
  1042. return self;},
  1043. source: unescape('knownVariables%0A%09%5Eself%20pseudoVariables%20%0A%09%09addAll%3A%20self%20tempVariables%3B%0A%09%09yourself')}),
  1044. smalltalk.Compiler);
  1045. smalltalk.addMethod(
  1046. '_recompile_',
  1047. smalltalk.method({
  1048. selector: 'recompile:',
  1049. category: 'compiling',
  1050. fn: function (aClass){
  1051. var self=this;
  1052. smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){var method=nil;
  1053. method=smalltalk.send(self, "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]);smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]);
  1054. smalltalk.send(smalltalk.send(aClass, "_isMetaclass", []), "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})]);
  1055. return self;},
  1056. source: unescape('recompile%3A%20aClass%0A%09aClass%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%7C%20method%20%7C%0A%09%09method%20%3A%3D%20self%20load%3A%20each%20source%20forClass%3A%20aClass.%0A%09%09method%20category%3A%20each%20category.%0A%09%09aClass%20addCompiledMethod%3A%20method%5D.%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20recompile%3A%20aClass%20class%5D')}),
  1057. smalltalk.Compiler);
  1058. smalltalk.addMethod(
  1059. '_recompileAll',
  1060. smalltalk.method({
  1061. selector: 'recompileAll',
  1062. category: 'compiling',
  1063. fn: function (){
  1064. var self=this;
  1065. smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk, "_current", []), "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_recompile_", [each]);})]);
  1066. return self;},
  1067. source: unescape('recompileAll%0A%09Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09self%20recompile%3A%20each%5D')}),
  1068. smalltalk.Compiler);
  1069. smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler');
  1070. smalltalk.addMethod(
  1071. '_doIt',
  1072. smalltalk.method({
  1073. selector: 'doIt',
  1074. category: '',
  1075. fn: function (){
  1076. var self=this;
  1077. return smalltalk.send((function(){return smalltalk.send(smalltalk.send(smalltalk.Compiler, "_new", []), "_recompileAll", []);}), "_value", []);
  1078. return self;},
  1079. source: unescape('doIt%20%5E%5BCompiler%20new%20recompileAll%5D%20value')}),
  1080. smalltalk.DoIt);