resin 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. data/amber/css/amber-normalize.css +73 -73
  2. data/amber/css/amber-normalize.less +1 -1
  3. data/amber/css/amber.css +106 -106
  4. data/amber/css/helios.css +242 -0
  5. data/amber/images/hsplitter.png +0 -0
  6. data/amber/images/vsplitter.png +0 -0
  7. data/amber/js/Benchfib.deploy.js +116 -38
  8. data/amber/js/Benchfib.js +120 -42
  9. data/amber/js/Canvas.deploy.js +674 -403
  10. data/amber/js/Canvas.js +682 -411
  11. data/amber/js/Compiler-AST.deploy.js +1150 -0
  12. data/amber/js/Compiler-AST.js +1591 -0
  13. data/amber/js/Compiler-Core.deploy.js +1562 -0
  14. data/amber/js/Compiler-Core.js +1972 -0
  15. data/amber/js/Compiler-Exceptions.deploy.js +114 -0
  16. data/amber/js/Compiler-Exceptions.js +161 -0
  17. data/amber/js/Compiler-IR.deploy.js +2326 -0
  18. data/amber/js/Compiler-IR.js +3146 -0
  19. data/amber/js/Compiler-Inlining.deploy.js +1147 -0
  20. data/amber/js/Compiler-Inlining.js +1514 -0
  21. data/amber/js/Compiler-Semantic.deploy.js +1207 -0
  22. data/amber/js/Compiler-Semantic.js +1628 -0
  23. data/amber/js/Compiler-Tests.deploy.js +646 -60
  24. data/amber/js/Compiler-Tests.js +843 -82
  25. data/amber/js/Compiler.deploy.js +1097 -159
  26. data/amber/js/Compiler.js +1414 -161
  27. data/amber/js/Examples.deploy.js +31 -15
  28. data/amber/js/Examples.js +33 -17
  29. data/amber/js/Helios-Announcements.deploy.js +127 -0
  30. data/amber/js/Helios-Announcements.js +157 -0
  31. data/amber/js/Helios-Browser.deploy.js +1473 -0
  32. data/amber/js/Helios-Browser.js +1953 -0
  33. data/amber/js/Helios-Commands.deploy.js +403 -0
  34. data/amber/js/Helios-Commands.js +563 -0
  35. data/amber/js/Helios-Core.deploy.js +1070 -0
  36. data/amber/js/Helios-Core.js +1445 -0
  37. data/amber/js/Helios-Environments.deploy.js +132 -0
  38. data/amber/js/Helios-Environments.js +179 -0
  39. data/amber/js/Helios-Inspector.deploy.js +855 -0
  40. data/amber/js/Helios-Inspector.js +1155 -0
  41. data/amber/js/Helios-KeyBindings.deploy.js +753 -0
  42. data/amber/js/Helios-KeyBindings.js +1023 -0
  43. data/amber/js/Helios-Layout.deploy.js +383 -0
  44. data/amber/js/Helios-Layout.js +523 -0
  45. data/amber/js/Helios-Workspace.deploy.js +799 -0
  46. data/amber/js/Helios-Workspace.js +1074 -0
  47. data/amber/js/IDE.deploy.js +2541 -1490
  48. data/amber/js/IDE.js +2721 -1660
  49. data/amber/js/Importer-Exporter.deploy.js +671 -0
  50. data/amber/js/Importer-Exporter.js +816 -0
  51. data/amber/js/Kernel-Announcements.deploy.js +137 -20
  52. data/amber/js/Kernel-Announcements.js +176 -22
  53. data/amber/js/Kernel-Classes.deploy.js +555 -168
  54. data/amber/js/Kernel-Classes.js +662 -205
  55. data/amber/js/Kernel-Collections.deploy.js +1403 -618
  56. data/amber/js/Kernel-Collections.js +1545 -690
  57. data/amber/js/Kernel-Exceptions.deploy.js +109 -45
  58. data/amber/js/Kernel-Exceptions.js +123 -49
  59. data/amber/js/Kernel-Methods.deploy.js +196 -81
  60. data/amber/js/Kernel-Methods.js +214 -89
  61. data/amber/js/Kernel-Objects.deploy.js +1542 -1117
  62. data/amber/js/Kernel-Objects.js +1593 -1148
  63. data/amber/js/Kernel-Tests.deploy.js +1725 -772
  64. data/amber/js/Kernel-Tests.js +2301 -1123
  65. data/amber/js/Kernel-Transcript.deploy.js +23 -25
  66. data/amber/js/Kernel-Transcript.js +24 -26
  67. data/amber/js/SUnit.deploy.js +204 -131
  68. data/amber/js/SUnit.js +222 -139
  69. data/amber/js/Spaces.deploy.js +240 -0
  70. data/amber/js/Spaces.js +326 -0
  71. data/amber/js/amber.js +26 -7
  72. data/amber/js/boot.js +65 -47
  73. data/amber/js/init.js +1 -1
  74. data/amber/js/lib/CodeMirror/amber.css +21 -21
  75. data/amber/js/lib/CodeMirror/codemirror.css +119 -13
  76. data/amber/js/lib/CodeMirror/codemirror.js +2219 -1220
  77. data/amber/js/lib/CodeMirror/smalltalk.js +134 -129
  78. data/amber/js/lib/bootstrap/css/bootstrap.css +5837 -0
  79. data/amber/js/lib/bootstrap/css/bootstrap.min.css +841 -0
  80. data/amber/js/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  81. data/amber/js/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  82. data/amber/js/lib/bootstrap/js/bootstrap.js +2038 -0
  83. data/amber/js/lib/bootstrap/js/bootstrap.min.js +7 -0
  84. data/amber/js/lib/jQuery/jquery-1.8.2.min.js +2 -0
  85. data/amber/js/lib/jQuery/jquery-ui-1.8.24.custom.min.js +125 -0
  86. data/amber/st/Compiler-AST.st +505 -0
  87. data/amber/st/Compiler-Core.st +835 -0
  88. data/amber/st/Compiler-Exceptions.st +87 -0
  89. data/amber/st/Compiler-IR.st +1097 -0
  90. data/amber/st/Compiler-Inlining.st +650 -0
  91. data/amber/st/Compiler-Semantic.st +558 -0
  92. data/amber/st/Compiler-Tests.st +285 -381
  93. data/amber/st/Compiler.st +725 -2
  94. data/amber/st/Helios-Announcements.st +104 -0
  95. data/amber/st/Helios-Browser.st +708 -0
  96. data/amber/st/Helios-Commands.st +223 -0
  97. data/amber/st/Helios-Core.st +532 -0
  98. data/amber/st/Helios-Environments.st +98 -0
  99. data/amber/st/Helios-Inspector.st +367 -0
  100. data/amber/st/Helios-KeyBindings.st +337 -0
  101. data/amber/st/Helios-Layout.st +199 -0
  102. data/amber/st/Helios-Workspace.st +367 -0
  103. data/amber/st/IDE.st +75 -53
  104. data/amber/st/Importer-Exporter.st +386 -0
  105. data/amber/st/Kernel-Announcements.st +92 -0
  106. data/amber/st/Kernel-Classes.st +137 -15
  107. data/amber/st/Kernel-Collections.st +137 -47
  108. data/amber/st/Kernel-Exceptions.st +14 -0
  109. data/amber/st/Kernel-Methods.st +9 -1
  110. data/amber/st/Kernel-Objects.st +29 -5
  111. data/amber/st/Kernel-Tests.st +545 -199
  112. data/amber/st/SUnit.st +10 -0
  113. data/amber/st/Spaces.st +142 -0
  114. data/lib/resin/app.rb +1 -1
  115. metadata +86 -31
  116. data/amber/js/lib/jQuery/jquery-1.4.4.min.js +0 -167
  117. data/amber/js/lib/jQuery/jquery-1.6.4.min.js +0 -4
@@ -0,0 +1,1972 @@
1
+ smalltalk.addPackage('Compiler-Core', {});
2
+ smalltalk.addClass('Compiler', smalltalk.Object, ['currentClass', 'source', 'unknownVariables', 'codeGeneratorClass'], 'Compiler-Core');
3
+ smalltalk.Compiler.comment="I provide the public interface for compiling Amber source code into JavaScript.\x0a\x0aThe code generator used to produce JavaScript can be plugged with `#codeGeneratorClass`. \x0aThe default code generator is an instance of `InlinedCodeGenerator`"
4
+ smalltalk.addMethod(
5
+ "_codeGeneratorClass",
6
+ smalltalk.method({
7
+ selector: "codeGeneratorClass",
8
+ category: 'accessing',
9
+ fn: function (){
10
+ var self=this;
11
+ var $1;
12
+ if(($receiver = self["@codeGeneratorClass"]) == nil || $receiver == undefined){
13
+ $1=(smalltalk.InliningCodeGenerator || InliningCodeGenerator);
14
+ } else {
15
+ $1=self["@codeGeneratorClass"];
16
+ };
17
+ return $1;
18
+ },
19
+ args: [],
20
+ source: "codeGeneratorClass\x0a\x09^codeGeneratorClass ifNil: [InliningCodeGenerator]",
21
+ messageSends: ["ifNil:"],
22
+ referencedClasses: ["InliningCodeGenerator"]
23
+ }),
24
+ smalltalk.Compiler);
25
+
26
+ smalltalk.addMethod(
27
+ "_codeGeneratorClass_",
28
+ smalltalk.method({
29
+ selector: "codeGeneratorClass:",
30
+ category: 'accessing',
31
+ fn: function (aClass){
32
+ var self=this;
33
+ self["@codeGeneratorClass"]=aClass;
34
+ return self},
35
+ args: ["aClass"],
36
+ source: "codeGeneratorClass: aClass\x0a\x09codeGeneratorClass := aClass",
37
+ messageSends: [],
38
+ referencedClasses: []
39
+ }),
40
+ smalltalk.Compiler);
41
+
42
+ smalltalk.addMethod(
43
+ "_compile_",
44
+ smalltalk.method({
45
+ selector: "compile:",
46
+ category: 'compiling',
47
+ fn: function (aString){
48
+ var self=this;
49
+ var $1;
50
+ $1=smalltalk.send(self,"_compileNode_",[smalltalk.send(self,"_parse_",[aString])]);
51
+ return $1;
52
+ },
53
+ args: ["aString"],
54
+ source: "compile: aString\x0a\x09^self compileNode: (self parse: aString)",
55
+ messageSends: ["compileNode:", "parse:"],
56
+ referencedClasses: []
57
+ }),
58
+ smalltalk.Compiler);
59
+
60
+ smalltalk.addMethod(
61
+ "_compile_forClass_",
62
+ smalltalk.method({
63
+ selector: "compile:forClass:",
64
+ category: 'compiling',
65
+ fn: function (aString,aClass){
66
+ var self=this;
67
+ var $1;
68
+ smalltalk.send(self,"_currentClass_",[aClass]);
69
+ smalltalk.send(self,"_source_",[aString]);
70
+ $1=smalltalk.send(self,"_compile_",[aString]);
71
+ return $1;
72
+ },
73
+ args: ["aString", "aClass"],
74
+ source: "compile: aString forClass: aClass\x0a\x09self currentClass: aClass.\x0a\x09self source: aString.\x0a\x09^self compile: aString",
75
+ messageSends: ["currentClass:", "source:", "compile:"],
76
+ referencedClasses: []
77
+ }),
78
+ smalltalk.Compiler);
79
+
80
+ smalltalk.addMethod(
81
+ "_compileExpression_",
82
+ smalltalk.method({
83
+ selector: "compileExpression:",
84
+ category: 'compiling',
85
+ fn: function (aString){
86
+ var self=this;
87
+ var $1;
88
+ smalltalk.send(self,"_currentClass_",[(smalltalk.DoIt || DoIt)]);
89
+ smalltalk.send(self,"_source_",[smalltalk.send(smalltalk.send("doIt ^[","__comma",[aString]),"__comma",["] value"])]);
90
+ $1=smalltalk.send(self,"_compileNode_",[smalltalk.send(self,"_parse_",[smalltalk.send(self,"_source",[])])]);
91
+ return $1;
92
+ },
93
+ args: ["aString"],
94
+ source: "compileExpression: aString\x0a\x09self currentClass: DoIt.\x0a\x09self source: 'doIt ^[', aString, '] value'.\x0a\x09^self compileNode: (self parse: self source)",
95
+ messageSends: ["currentClass:", "source:", ",", "compileNode:", "parse:", "source"],
96
+ referencedClasses: ["DoIt"]
97
+ }),
98
+ smalltalk.Compiler);
99
+
100
+ smalltalk.addMethod(
101
+ "_compileNode_",
102
+ smalltalk.method({
103
+ selector: "compileNode:",
104
+ category: 'compiling',
105
+ fn: function (aNode){
106
+ var self=this;
107
+ var $1;
108
+ var generator;
109
+ var result;
110
+ generator=smalltalk.send(smalltalk.send(self,"_codeGeneratorClass",[]),"_new",[]);
111
+ smalltalk.send(generator,"_source_",[smalltalk.send(self,"_source",[])]);
112
+ $1=smalltalk.send(generator,"_currentClass_",[smalltalk.send(self,"_currentClass",[])]);
113
+ result=smalltalk.send(generator,"_compileNode_",[aNode]);
114
+ smalltalk.send(self,"_unknownVariables_",[[]]);
115
+ return result;
116
+ },
117
+ args: ["aNode"],
118
+ source: "compileNode: aNode\x0a\x09| generator result |\x0a\x09generator := self codeGeneratorClass new.\x0a\x09generator\x0a\x09\x09source: self source;\x0a\x09\x09currentClass: self currentClass.\x0a\x09result := generator compileNode: aNode.\x0a\x09self unknownVariables: #().\x0a\x09^result",
119
+ messageSends: ["new", "codeGeneratorClass", "source:", "source", "currentClass:", "currentClass", "compileNode:", "unknownVariables:"],
120
+ referencedClasses: []
121
+ }),
122
+ smalltalk.Compiler);
123
+
124
+ smalltalk.addMethod(
125
+ "_currentClass",
126
+ smalltalk.method({
127
+ selector: "currentClass",
128
+ category: 'accessing',
129
+ fn: function (){
130
+ var self=this;
131
+ return self["@currentClass"];
132
+ },
133
+ args: [],
134
+ source: "currentClass\x0a\x09^currentClass",
135
+ messageSends: [],
136
+ referencedClasses: []
137
+ }),
138
+ smalltalk.Compiler);
139
+
140
+ smalltalk.addMethod(
141
+ "_currentClass_",
142
+ smalltalk.method({
143
+ selector: "currentClass:",
144
+ category: 'accessing',
145
+ fn: function (aClass){
146
+ var self=this;
147
+ self["@currentClass"]=aClass;
148
+ return self},
149
+ args: ["aClass"],
150
+ source: "currentClass: aClass\x0a\x09currentClass := aClass",
151
+ messageSends: [],
152
+ referencedClasses: []
153
+ }),
154
+ smalltalk.Compiler);
155
+
156
+ smalltalk.addMethod(
157
+ "_eval_",
158
+ smalltalk.method({
159
+ selector: "eval:",
160
+ category: 'compiling',
161
+ fn: function (aString){
162
+ var self=this;
163
+ return eval(aString);
164
+ ;
165
+ return self},
166
+ args: ["aString"],
167
+ source: "eval: aString\x0a\x09<return eval(aString)>",
168
+ messageSends: [],
169
+ referencedClasses: []
170
+ }),
171
+ smalltalk.Compiler);
172
+
173
+ smalltalk.addMethod(
174
+ "_evaluateExpression_",
175
+ smalltalk.method({
176
+ selector: "evaluateExpression:",
177
+ category: 'compiling',
178
+ fn: function (aString){
179
+ var self=this;
180
+ var result;
181
+ smalltalk.send((smalltalk.DoIt || DoIt),"_addCompiledMethod_",[smalltalk.send(self,"_eval_",[smalltalk.send(self,"_compileExpression_",[aString])])]);
182
+ result=smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt),"_new",[]),"_doIt",[]);
183
+ smalltalk.send((smalltalk.DoIt || DoIt),"_removeCompiledMethod_",[smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt),"_methodDictionary",[]),"_at_",["doIt"])]);
184
+ return result;
185
+ },
186
+ args: ["aString"],
187
+ source: "evaluateExpression: aString\x0a\x09\x22Unlike #eval: evaluate a Smalltalk expression and answer the returned object\x22\x0a\x09| result |\x0a\x09DoIt addCompiledMethod: (self eval: (self compileExpression: aString)).\x0a\x09result := DoIt new doIt.\x0a\x09DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt').\x0a\x09^result",
188
+ messageSends: ["addCompiledMethod:", "eval:", "compileExpression:", "doIt", "new", "removeCompiledMethod:", "at:", "methodDictionary"],
189
+ referencedClasses: ["DoIt"]
190
+ }),
191
+ smalltalk.Compiler);
192
+
193
+ smalltalk.addMethod(
194
+ "_install_forClass_category_",
195
+ smalltalk.method({
196
+ selector: "install:forClass:category:",
197
+ category: 'compiling',
198
+ fn: function (aString,aBehavior,anotherString){
199
+ var self=this;
200
+ var compiled;
201
+ compiled=smalltalk.send(self,"_eval_",[smalltalk.send(self,"_compile_forClass_",[aString,aBehavior])]);
202
+ smalltalk.send(compiled,"_category_",[anotherString]);
203
+ smalltalk.send(aBehavior,"_addCompiledMethod_",[compiled]);
204
+ smalltalk.send(self,"_setupClass_",[aBehavior]);
205
+ return compiled;
206
+ },
207
+ args: ["aString", "aBehavior", "anotherString"],
208
+ source: "install: aString forClass: aBehavior category: anotherString\x0a\x09| compiled |\x0a\x09compiled := self eval: (self compile: aString forClass: aBehavior).\x0a\x09compiled category: anotherString.\x0a\x09aBehavior addCompiledMethod: compiled.\x0a self setupClass: aBehavior.\x0a\x09^compiled",
209
+ messageSends: ["eval:", "compile:forClass:", "category:", "addCompiledMethod:", "setupClass:"],
210
+ referencedClasses: []
211
+ }),
212
+ smalltalk.Compiler);
213
+
214
+ smalltalk.addMethod(
215
+ "_parse_",
216
+ smalltalk.method({
217
+ selector: "parse:",
218
+ category: 'compiling',
219
+ fn: function (aString){
220
+ var self=this;
221
+ var $1;
222
+ $1=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk),"_current",[]),"_parse_",[aString]);
223
+ return $1;
224
+ },
225
+ args: ["aString"],
226
+ source: "parse: aString\x0a ^Smalltalk current parse: aString",
227
+ messageSends: ["parse:", "current"],
228
+ referencedClasses: ["Smalltalk"]
229
+ }),
230
+ smalltalk.Compiler);
231
+
232
+ smalltalk.addMethod(
233
+ "_parseExpression_",
234
+ smalltalk.method({
235
+ selector: "parseExpression:",
236
+ category: 'compiling',
237
+ fn: function (aString){
238
+ var self=this;
239
+ var $1;
240
+ $1=smalltalk.send(self,"_parse_",[smalltalk.send(smalltalk.send("doIt ^[","__comma",[aString]),"__comma",["] value"])]);
241
+ return $1;
242
+ },
243
+ args: ["aString"],
244
+ source: "parseExpression: aString\x0a ^self parse: 'doIt ^[', aString, '] value'",
245
+ messageSends: ["parse:", ","],
246
+ referencedClasses: []
247
+ }),
248
+ smalltalk.Compiler);
249
+
250
+ smalltalk.addMethod(
251
+ "_recompile_",
252
+ smalltalk.method({
253
+ selector: "recompile:",
254
+ category: 'compiling',
255
+ fn: function (aClass){
256
+ var self=this;
257
+ var $1;
258
+ smalltalk.send(smalltalk.send(aClass,"_methodDictionary",[]),"_do_",[(function(each){
259
+ smalltalk.send(console,"_log_",[smalltalk.send(smalltalk.send(smalltalk.send(aClass,"_name",[]),"__comma",[" >> "]),"__comma",[smalltalk.send(each,"_selector",[])])]);
260
+ return smalltalk.send(self,"_install_forClass_category_",[smalltalk.send(each,"_source",[]),aClass,smalltalk.send(each,"_category",[])]);
261
+ })]);
262
+ smalltalk.send(self,"_setupClass_",[aClass]);
263
+ $1=smalltalk.send(aClass,"_isMetaclass",[]);
264
+ if(! smalltalk.assert($1)){
265
+ smalltalk.send(self,"_recompile_",[smalltalk.send(aClass,"_class",[])]);
266
+ };
267
+ return self},
268
+ args: ["aClass"],
269
+ source: "recompile: aClass\x0a\x09aClass methodDictionary do: [:each |\x0a\x09\x09console log: aClass name, ' >> ', each selector.\x0a\x09\x09self install: each source forClass: aClass category: each category].\x0a\x09self setupClass: aClass.\x0a\x09aClass isMetaclass ifFalse: [self recompile: aClass class]",
270
+ messageSends: ["do:", "log:", ",", "selector", "name", "install:forClass:category:", "source", "category", "methodDictionary", "setupClass:", "ifFalse:", "recompile:", "class", "isMetaclass"],
271
+ referencedClasses: []
272
+ }),
273
+ smalltalk.Compiler);
274
+
275
+ smalltalk.addMethod(
276
+ "_recompileAll",
277
+ smalltalk.method({
278
+ selector: "recompileAll",
279
+ category: 'compiling',
280
+ fn: function (){
281
+ var self=this;
282
+ var $1;
283
+ smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk),"_current",[]),"_classes",[]),"_do_",[(function(each){
284
+ smalltalk.send((smalltalk.Transcript || Transcript),"_show_",[each]);
285
+ $1=smalltalk.send((smalltalk.Transcript || Transcript),"_cr",[]);
286
+ $1;
287
+ return smalltalk.send((function(){
288
+ return smalltalk.send(self,"_recompile_",[each]);
289
+ }),"_valueWithTimeout_",[(100)]);
290
+ })]);
291
+ return self},
292
+ args: [],
293
+ source: "recompileAll\x0a\x09Smalltalk current classes do: [:each |\x0a\x09\x09Transcript show: each; cr.\x0a\x09\x09[self recompile: each] valueWithTimeout: 100]",
294
+ messageSends: ["do:", "show:", "cr", "valueWithTimeout:", "recompile:", "classes", "current"],
295
+ referencedClasses: ["Transcript", "Smalltalk"]
296
+ }),
297
+ smalltalk.Compiler);
298
+
299
+ smalltalk.addMethod(
300
+ "_setupClass_",
301
+ smalltalk.method({
302
+ selector: "setupClass:",
303
+ category: 'compiling',
304
+ fn: function (aClass){
305
+ var self=this;
306
+ smalltalk.init(aClass);
307
+ ;
308
+ return self},
309
+ args: ["aClass"],
310
+ source: "setupClass: aClass\x0a\x09<smalltalk.init(aClass)>",
311
+ messageSends: [],
312
+ referencedClasses: []
313
+ }),
314
+ smalltalk.Compiler);
315
+
316
+ smalltalk.addMethod(
317
+ "_source",
318
+ smalltalk.method({
319
+ selector: "source",
320
+ category: 'accessing',
321
+ fn: function (){
322
+ var self=this;
323
+ var $1;
324
+ if(($receiver = self["@source"]) == nil || $receiver == undefined){
325
+ $1="";
326
+ } else {
327
+ $1=self["@source"];
328
+ };
329
+ return $1;
330
+ },
331
+ args: [],
332
+ source: "source\x0a\x09^source ifNil: ['']",
333
+ messageSends: ["ifNil:"],
334
+ referencedClasses: []
335
+ }),
336
+ smalltalk.Compiler);
337
+
338
+ smalltalk.addMethod(
339
+ "_source_",
340
+ smalltalk.method({
341
+ selector: "source:",
342
+ category: 'accessing',
343
+ fn: function (aString){
344
+ var self=this;
345
+ self["@source"]=aString;
346
+ return self},
347
+ args: ["aString"],
348
+ source: "source: aString\x0a\x09source := aString",
349
+ messageSends: [],
350
+ referencedClasses: []
351
+ }),
352
+ smalltalk.Compiler);
353
+
354
+ smalltalk.addMethod(
355
+ "_unknownVariables",
356
+ smalltalk.method({
357
+ selector: "unknownVariables",
358
+ category: 'accessing',
359
+ fn: function (){
360
+ var self=this;
361
+ return self["@unknownVariables"];
362
+ },
363
+ args: [],
364
+ source: "unknownVariables\x0a\x09^unknownVariables",
365
+ messageSends: [],
366
+ referencedClasses: []
367
+ }),
368
+ smalltalk.Compiler);
369
+
370
+ smalltalk.addMethod(
371
+ "_unknownVariables_",
372
+ smalltalk.method({
373
+ selector: "unknownVariables:",
374
+ category: 'accessing',
375
+ fn: function (aCollection){
376
+ var self=this;
377
+ self["@unknownVariables"]=aCollection;
378
+ return self},
379
+ args: ["aCollection"],
380
+ source: "unknownVariables: aCollection\x0a\x09unknownVariables := aCollection",
381
+ messageSends: [],
382
+ referencedClasses: []
383
+ }),
384
+ smalltalk.Compiler);
385
+
386
+
387
+ smalltalk.addMethod(
388
+ "_recompile_",
389
+ smalltalk.method({
390
+ selector: "recompile:",
391
+ category: 'compiling',
392
+ fn: function (aClass){
393
+ var self=this;
394
+ smalltalk.send(smalltalk.send(self,"_new",[]),"_recompile_",[aClass]);
395
+ return self},
396
+ args: ["aClass"],
397
+ source: "recompile: aClass\x0a\x09self new recompile: aClass",
398
+ messageSends: ["recompile:", "new"],
399
+ referencedClasses: []
400
+ }),
401
+ smalltalk.Compiler.klass);
402
+
403
+ smalltalk.addMethod(
404
+ "_recompileAll",
405
+ smalltalk.method({
406
+ selector: "recompileAll",
407
+ category: 'compiling',
408
+ fn: function (){
409
+ var self=this;
410
+ smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk),"_current",[]),"_classes",[]),"_do_",[(function(each){
411
+ return smalltalk.send(self,"_recompile_",[each]);
412
+ })]);
413
+ return self},
414
+ args: [],
415
+ source: "recompileAll\x0a\x09Smalltalk current classes do: [:each |\x0a\x09\x09self recompile: each]",
416
+ messageSends: ["do:", "recompile:", "classes", "current"],
417
+ referencedClasses: ["Smalltalk"]
418
+ }),
419
+ smalltalk.Compiler.klass);
420
+
421
+
422
+ smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler-Core');
423
+ smalltalk.DoIt.comment="`DoIt` is the class used to compile and evaluate expressions. See `Compiler >> evaluateExpression:`."
424
+
425
+
426
+ smalltalk.addClass('NodeVisitor', smalltalk.Object, [], 'Compiler-Core');
427
+ smalltalk.NodeVisitor.comment="I am the abstract super class of all AST node visitors."
428
+ smalltalk.addMethod(
429
+ "_visit_",
430
+ smalltalk.method({
431
+ selector: "visit:",
432
+ category: 'visiting',
433
+ fn: function (aNode){
434
+ var self=this;
435
+ var $1;
436
+ $1=smalltalk.send(aNode,"_accept_",[self]);
437
+ return $1;
438
+ },
439
+ args: ["aNode"],
440
+ source: "visit: aNode\x0a\x09^ aNode accept: self",
441
+ messageSends: ["accept:"],
442
+ referencedClasses: []
443
+ }),
444
+ smalltalk.NodeVisitor);
445
+
446
+ smalltalk.addMethod(
447
+ "_visitAll_",
448
+ smalltalk.method({
449
+ selector: "visitAll:",
450
+ category: 'visiting',
451
+ fn: function (aCollection){
452
+ var self=this;
453
+ var $1;
454
+ $1=smalltalk.send(aCollection,"_do_",[(function(each){
455
+ return smalltalk.send(self,"_visit_",[each]);
456
+ })]);
457
+ return $1;
458
+ },
459
+ args: ["aCollection"],
460
+ source: "visitAll: aCollection\x0a\x09^ aCollection do: [ :each | self visit: each ]",
461
+ messageSends: ["do:", "visit:"],
462
+ referencedClasses: []
463
+ }),
464
+ smalltalk.NodeVisitor);
465
+
466
+ smalltalk.addMethod(
467
+ "_visitAssignmentNode_",
468
+ smalltalk.method({
469
+ selector: "visitAssignmentNode:",
470
+ category: 'visiting',
471
+ fn: function (aNode){
472
+ var self=this;
473
+ var $1;
474
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
475
+ return $1;
476
+ },
477
+ args: ["aNode"],
478
+ source: "visitAssignmentNode: aNode\x0a\x09^ self visitNode: aNode",
479
+ messageSends: ["visitNode:"],
480
+ referencedClasses: []
481
+ }),
482
+ smalltalk.NodeVisitor);
483
+
484
+ smalltalk.addMethod(
485
+ "_visitBlockNode_",
486
+ smalltalk.method({
487
+ selector: "visitBlockNode:",
488
+ category: 'visiting',
489
+ fn: function (aNode){
490
+ var self=this;
491
+ var $1;
492
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
493
+ return $1;
494
+ },
495
+ args: ["aNode"],
496
+ source: "visitBlockNode: aNode\x0a\x09^ self visitNode: aNode",
497
+ messageSends: ["visitNode:"],
498
+ referencedClasses: []
499
+ }),
500
+ smalltalk.NodeVisitor);
501
+
502
+ smalltalk.addMethod(
503
+ "_visitBlockSequenceNode_",
504
+ smalltalk.method({
505
+ selector: "visitBlockSequenceNode:",
506
+ category: 'visiting',
507
+ fn: function (aNode){
508
+ var self=this;
509
+ var $1;
510
+ $1=smalltalk.send(self,"_visitSequenceNode_",[aNode]);
511
+ return $1;
512
+ },
513
+ args: ["aNode"],
514
+ source: "visitBlockSequenceNode: aNode\x0a\x09^ self visitSequenceNode: aNode",
515
+ messageSends: ["visitSequenceNode:"],
516
+ referencedClasses: []
517
+ }),
518
+ smalltalk.NodeVisitor);
519
+
520
+ smalltalk.addMethod(
521
+ "_visitCascadeNode_",
522
+ smalltalk.method({
523
+ selector: "visitCascadeNode:",
524
+ category: 'visiting',
525
+ fn: function (aNode){
526
+ var self=this;
527
+ var $1;
528
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
529
+ return $1;
530
+ },
531
+ args: ["aNode"],
532
+ source: "visitCascadeNode: aNode\x0a\x09^ self visitNode: aNode",
533
+ messageSends: ["visitNode:"],
534
+ referencedClasses: []
535
+ }),
536
+ smalltalk.NodeVisitor);
537
+
538
+ smalltalk.addMethod(
539
+ "_visitClassReferenceNode_",
540
+ smalltalk.method({
541
+ selector: "visitClassReferenceNode:",
542
+ category: 'visiting',
543
+ fn: function (aNode){
544
+ var self=this;
545
+ var $1;
546
+ $1=smalltalk.send(self,"_visitVariableNode_",[aNode]);
547
+ return $1;
548
+ },
549
+ args: ["aNode"],
550
+ source: "visitClassReferenceNode: aNode\x0a\x09^ self visitVariableNode: aNode",
551
+ messageSends: ["visitVariableNode:"],
552
+ referencedClasses: []
553
+ }),
554
+ smalltalk.NodeVisitor);
555
+
556
+ smalltalk.addMethod(
557
+ "_visitDynamicArrayNode_",
558
+ smalltalk.method({
559
+ selector: "visitDynamicArrayNode:",
560
+ category: 'visiting',
561
+ fn: function (aNode){
562
+ var self=this;
563
+ var $1;
564
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
565
+ return $1;
566
+ },
567
+ args: ["aNode"],
568
+ source: "visitDynamicArrayNode: aNode\x0a\x09^ self visitNode: aNode",
569
+ messageSends: ["visitNode:"],
570
+ referencedClasses: []
571
+ }),
572
+ smalltalk.NodeVisitor);
573
+
574
+ smalltalk.addMethod(
575
+ "_visitDynamicDictionaryNode_",
576
+ smalltalk.method({
577
+ selector: "visitDynamicDictionaryNode:",
578
+ category: 'visiting',
579
+ fn: function (aNode){
580
+ var self=this;
581
+ var $1;
582
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
583
+ return $1;
584
+ },
585
+ args: ["aNode"],
586
+ source: "visitDynamicDictionaryNode: aNode\x0a\x09^ self visitNode: aNode",
587
+ messageSends: ["visitNode:"],
588
+ referencedClasses: []
589
+ }),
590
+ smalltalk.NodeVisitor);
591
+
592
+ smalltalk.addMethod(
593
+ "_visitJSStatementNode_",
594
+ smalltalk.method({
595
+ selector: "visitJSStatementNode:",
596
+ category: 'visiting',
597
+ fn: function (aNode){
598
+ var self=this;
599
+ var $1;
600
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
601
+ return $1;
602
+ },
603
+ args: ["aNode"],
604
+ source: "visitJSStatementNode: aNode\x0a\x09^ self visitNode: aNode",
605
+ messageSends: ["visitNode:"],
606
+ referencedClasses: []
607
+ }),
608
+ smalltalk.NodeVisitor);
609
+
610
+ smalltalk.addMethod(
611
+ "_visitMethodNode_",
612
+ smalltalk.method({
613
+ selector: "visitMethodNode:",
614
+ category: 'visiting',
615
+ fn: function (aNode){
616
+ var self=this;
617
+ var $1;
618
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
619
+ return $1;
620
+ },
621
+ args: ["aNode"],
622
+ source: "visitMethodNode: aNode\x0a\x09^ self visitNode: aNode",
623
+ messageSends: ["visitNode:"],
624
+ referencedClasses: []
625
+ }),
626
+ smalltalk.NodeVisitor);
627
+
628
+ smalltalk.addMethod(
629
+ "_visitNode_",
630
+ smalltalk.method({
631
+ selector: "visitNode:",
632
+ category: 'visiting',
633
+ fn: function (aNode){
634
+ var self=this;
635
+ var $1;
636
+ $1=smalltalk.send(self,"_visitAll_",[smalltalk.send(aNode,"_nodes",[])]);
637
+ return $1;
638
+ },
639
+ args: ["aNode"],
640
+ source: "visitNode: aNode\x0a\x09^ self visitAll: aNode nodes",
641
+ messageSends: ["visitAll:", "nodes"],
642
+ referencedClasses: []
643
+ }),
644
+ smalltalk.NodeVisitor);
645
+
646
+ smalltalk.addMethod(
647
+ "_visitReturnNode_",
648
+ smalltalk.method({
649
+ selector: "visitReturnNode:",
650
+ category: 'visiting',
651
+ fn: function (aNode){
652
+ var self=this;
653
+ var $1;
654
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
655
+ return $1;
656
+ },
657
+ args: ["aNode"],
658
+ source: "visitReturnNode: aNode\x0a\x09^ self visitNode: aNode",
659
+ messageSends: ["visitNode:"],
660
+ referencedClasses: []
661
+ }),
662
+ smalltalk.NodeVisitor);
663
+
664
+ smalltalk.addMethod(
665
+ "_visitSendNode_",
666
+ smalltalk.method({
667
+ selector: "visitSendNode:",
668
+ category: 'visiting',
669
+ fn: function (aNode){
670
+ var self=this;
671
+ var $1;
672
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
673
+ return $1;
674
+ },
675
+ args: ["aNode"],
676
+ source: "visitSendNode: aNode\x0a\x09^ self visitNode: aNode",
677
+ messageSends: ["visitNode:"],
678
+ referencedClasses: []
679
+ }),
680
+ smalltalk.NodeVisitor);
681
+
682
+ smalltalk.addMethod(
683
+ "_visitSequenceNode_",
684
+ smalltalk.method({
685
+ selector: "visitSequenceNode:",
686
+ category: 'visiting',
687
+ fn: function (aNode){
688
+ var self=this;
689
+ var $1;
690
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
691
+ return $1;
692
+ },
693
+ args: ["aNode"],
694
+ source: "visitSequenceNode: aNode\x0a\x09^ self visitNode: aNode",
695
+ messageSends: ["visitNode:"],
696
+ referencedClasses: []
697
+ }),
698
+ smalltalk.NodeVisitor);
699
+
700
+ smalltalk.addMethod(
701
+ "_visitValueNode_",
702
+ smalltalk.method({
703
+ selector: "visitValueNode:",
704
+ category: 'visiting',
705
+ fn: function (aNode){
706
+ var self=this;
707
+ var $1;
708
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
709
+ return $1;
710
+ },
711
+ args: ["aNode"],
712
+ source: "visitValueNode: aNode\x0a\x09^ self visitNode: aNode",
713
+ messageSends: ["visitNode:"],
714
+ referencedClasses: []
715
+ }),
716
+ smalltalk.NodeVisitor);
717
+
718
+ smalltalk.addMethod(
719
+ "_visitVariableNode_",
720
+ smalltalk.method({
721
+ selector: "visitVariableNode:",
722
+ category: 'visiting',
723
+ fn: function (aNode){
724
+ var self=this;
725
+ var $1;
726
+ $1=smalltalk.send(self,"_visitNode_",[aNode]);
727
+ return $1;
728
+ },
729
+ args: ["aNode"],
730
+ source: "visitVariableNode: aNode\x0a\x09^ self visitNode: aNode",
731
+ messageSends: ["visitNode:"],
732
+ referencedClasses: []
733
+ }),
734
+ smalltalk.NodeVisitor);
735
+
736
+
737
+
738
+ smalltalk.addClass('AbstractCodeGenerator', smalltalk.NodeVisitor, ['currentClass', 'source'], 'Compiler-Core');
739
+ smalltalk.AbstractCodeGenerator.comment="I am the abstract super class of all code generators and provide their common API."
740
+ smalltalk.addMethod(
741
+ "_classNameFor_",
742
+ smalltalk.method({
743
+ selector: "classNameFor:",
744
+ category: 'accessing',
745
+ fn: function (aClass){
746
+ var self=this;
747
+ var $2,$3,$1;
748
+ $2=smalltalk.send(aClass,"_isMetaclass",[]);
749
+ if(smalltalk.assert($2)){
750
+ $1=smalltalk.send(smalltalk.send(smalltalk.send(aClass,"_instanceClass",[]),"_name",[]),"__comma",[".klass"]);
751
+ } else {
752
+ $3=smalltalk.send(aClass,"_isNil",[]);
753
+ if(smalltalk.assert($3)){
754
+ $1="nil";
755
+ } else {
756
+ $1=smalltalk.send(aClass,"_name",[]);
757
+ };
758
+ };
759
+ return $1;
760
+ },
761
+ args: ["aClass"],
762
+ source: "classNameFor: aClass\x0a\x09^aClass isMetaclass\x0a\x09 ifTrue: [aClass instanceClass name, '.klass']\x0a\x09 ifFalse: [\x0a\x09\x09aClass isNil\x0a\x09\x09 ifTrue: ['nil']\x0a\x09\x09 ifFalse: [aClass name]]",
763
+ messageSends: ["ifTrue:ifFalse:", ",", "name", "instanceClass", "isNil", "isMetaclass"],
764
+ referencedClasses: []
765
+ }),
766
+ smalltalk.AbstractCodeGenerator);
767
+
768
+ smalltalk.addMethod(
769
+ "_compileNode_",
770
+ smalltalk.method({
771
+ selector: "compileNode:",
772
+ category: 'compiling',
773
+ fn: function (aNode){
774
+ var self=this;
775
+ smalltalk.send(self,"_subclassResponsibility",[]);
776
+ return self},
777
+ args: ["aNode"],
778
+ source: "compileNode: aNode\x0a\x09self subclassResponsibility",
779
+ messageSends: ["subclassResponsibility"],
780
+ referencedClasses: []
781
+ }),
782
+ smalltalk.AbstractCodeGenerator);
783
+
784
+ smalltalk.addMethod(
785
+ "_currentClass",
786
+ smalltalk.method({
787
+ selector: "currentClass",
788
+ category: 'accessing',
789
+ fn: function (){
790
+ var self=this;
791
+ return self["@currentClass"];
792
+ },
793
+ args: [],
794
+ source: "currentClass\x0a\x09^currentClass",
795
+ messageSends: [],
796
+ referencedClasses: []
797
+ }),
798
+ smalltalk.AbstractCodeGenerator);
799
+
800
+ smalltalk.addMethod(
801
+ "_currentClass_",
802
+ smalltalk.method({
803
+ selector: "currentClass:",
804
+ category: 'accessing',
805
+ fn: function (aClass){
806
+ var self=this;
807
+ self["@currentClass"]=aClass;
808
+ return self},
809
+ args: ["aClass"],
810
+ source: "currentClass: aClass\x0a\x09currentClass := aClass",
811
+ messageSends: [],
812
+ referencedClasses: []
813
+ }),
814
+ smalltalk.AbstractCodeGenerator);
815
+
816
+ smalltalk.addMethod(
817
+ "_pseudoVariables",
818
+ smalltalk.method({
819
+ selector: "pseudoVariables",
820
+ category: 'accessing',
821
+ fn: function (){
822
+ var self=this;
823
+ return ["self", "super", "true", "false", "nil", "thisContext"];
824
+ },
825
+ args: [],
826
+ source: "pseudoVariables\x0a\x09^#('self' 'super' 'true' 'false' 'nil' 'thisContext')",
827
+ messageSends: [],
828
+ referencedClasses: []
829
+ }),
830
+ smalltalk.AbstractCodeGenerator);
831
+
832
+ smalltalk.addMethod(
833
+ "_safeVariableNameFor_",
834
+ smalltalk.method({
835
+ selector: "safeVariableNameFor:",
836
+ category: 'accessing',
837
+ fn: function (aString){
838
+ var self=this;
839
+ var $2,$1;
840
+ $2=smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk),"_current",[]),"_reservedWords",[]),"_includes_",[aString]);
841
+ if(smalltalk.assert($2)){
842
+ $1=smalltalk.send(aString,"__comma",["_"]);
843
+ } else {
844
+ $1=aString;
845
+ };
846
+ return $1;
847
+ },
848
+ args: ["aString"],
849
+ source: "safeVariableNameFor: aString\x0a\x09^(Smalltalk current reservedWords includes: aString)\x0a\x09\x09ifTrue: [aString, '_']\x0a\x09\x09ifFalse: [aString]",
850
+ messageSends: ["ifTrue:ifFalse:", ",", "includes:", "reservedWords", "current"],
851
+ referencedClasses: ["Smalltalk"]
852
+ }),
853
+ smalltalk.AbstractCodeGenerator);
854
+
855
+ smalltalk.addMethod(
856
+ "_source",
857
+ smalltalk.method({
858
+ selector: "source",
859
+ category: 'accessing',
860
+ fn: function (){
861
+ var self=this;
862
+ var $1;
863
+ if(($receiver = self["@source"]) == nil || $receiver == undefined){
864
+ $1="";
865
+ } else {
866
+ $1=self["@source"];
867
+ };
868
+ return $1;
869
+ },
870
+ args: [],
871
+ source: "source\x0a\x09^source ifNil: ['']",
872
+ messageSends: ["ifNil:"],
873
+ referencedClasses: []
874
+ }),
875
+ smalltalk.AbstractCodeGenerator);
876
+
877
+ smalltalk.addMethod(
878
+ "_source_",
879
+ smalltalk.method({
880
+ selector: "source:",
881
+ category: 'accessing',
882
+ fn: function (aString){
883
+ var self=this;
884
+ self["@source"]=aString;
885
+ return self},
886
+ args: ["aString"],
887
+ source: "source: aString\x0a\x09source := aString",
888
+ messageSends: [],
889
+ referencedClasses: []
890
+ }),
891
+ smalltalk.AbstractCodeGenerator);
892
+
893
+
894
+
895
+ smalltalk.addClass('CodeGenerator', smalltalk.AbstractCodeGenerator, [], 'Compiler-Core');
896
+ smalltalk.CodeGenerator.comment="I am a basic code generator. I generate a valid JavaScript output, but no not perform any inlining.\x0aSee `InliningCodeGenerator` for an optimized JavaScript code generation."
897
+ smalltalk.addMethod(
898
+ "_compileNode_",
899
+ smalltalk.method({
900
+ selector: "compileNode:",
901
+ category: 'compiling',
902
+ fn: function (aNode){
903
+ var self=this;
904
+ var $2,$3,$1;
905
+ var ir;
906
+ var stream;
907
+ smalltalk.send(smalltalk.send(self,"_semanticAnalyzer",[]),"_visit_",[aNode]);
908
+ ir=smalltalk.send(smalltalk.send(self,"_translator",[]),"_visit_",[aNode]);
909
+ $2=smalltalk.send(self,"_irTranslator",[]);
910
+ smalltalk.send($2,"_visit_",[ir]);
911
+ $3=smalltalk.send($2,"_contents",[]);
912
+ $1=$3;
913
+ return $1;
914
+ },
915
+ args: ["aNode"],
916
+ source: "compileNode: aNode\x0a\x09| ir stream |\x0a\x09self semanticAnalyzer visit: aNode.\x0a\x09ir := self translator visit: aNode.\x0a\x09^ self irTranslator\x0a\x09\x09visit: ir;\x0a\x09\x09contents",
917
+ messageSends: ["visit:", "semanticAnalyzer", "translator", "irTranslator", "contents"],
918
+ referencedClasses: []
919
+ }),
920
+ smalltalk.CodeGenerator);
921
+
922
+ smalltalk.addMethod(
923
+ "_irTranslator",
924
+ smalltalk.method({
925
+ selector: "irTranslator",
926
+ category: 'compiling',
927
+ fn: function (){
928
+ var self=this;
929
+ var $1;
930
+ $1=smalltalk.send((smalltalk.IRJSTranslator || IRJSTranslator),"_new",[]);
931
+ return $1;
932
+ },
933
+ args: [],
934
+ source: "irTranslator\x0a\x09^ IRJSTranslator new",
935
+ messageSends: ["new"],
936
+ referencedClasses: ["IRJSTranslator"]
937
+ }),
938
+ smalltalk.CodeGenerator);
939
+
940
+ smalltalk.addMethod(
941
+ "_semanticAnalyzer",
942
+ smalltalk.method({
943
+ selector: "semanticAnalyzer",
944
+ category: 'compiling',
945
+ fn: function (){
946
+ var self=this;
947
+ var $1;
948
+ $1=smalltalk.send((smalltalk.SemanticAnalyzer || SemanticAnalyzer),"_on_",[smalltalk.send(self,"_currentClass",[])]);
949
+ return $1;
950
+ },
951
+ args: [],
952
+ source: "semanticAnalyzer\x0a\x09^ SemanticAnalyzer on: self currentClass",
953
+ messageSends: ["on:", "currentClass"],
954
+ referencedClasses: ["SemanticAnalyzer"]
955
+ }),
956
+ smalltalk.CodeGenerator);
957
+
958
+ smalltalk.addMethod(
959
+ "_translator",
960
+ smalltalk.method({
961
+ selector: "translator",
962
+ category: 'compiling',
963
+ fn: function (){
964
+ var self=this;
965
+ var $2,$3,$1;
966
+ $2=smalltalk.send((smalltalk.IRASTTranslator || IRASTTranslator),"_new",[]);
967
+ smalltalk.send($2,"_source_",[smalltalk.send(self,"_source",[])]);
968
+ smalltalk.send($2,"_theClass_",[smalltalk.send(self,"_currentClass",[])]);
969
+ $3=smalltalk.send($2,"_yourself",[]);
970
+ $1=$3;
971
+ return $1;
972
+ },
973
+ args: [],
974
+ source: "translator\x0a\x09^ IRASTTranslator new\x0a\x09\x09source: self source;\x0a\x09\x09theClass: self currentClass;\x0a\x09\x09yourself",
975
+ messageSends: ["source:", "source", "new", "theClass:", "currentClass", "yourself"],
976
+ referencedClasses: ["IRASTTranslator"]
977
+ }),
978
+ smalltalk.CodeGenerator);
979
+
980
+
981
+
982
+ smalltalk.addClass('FunCodeGenerator', smalltalk.AbstractCodeGenerator, ['stream', 'nestedBlocks', 'earlyReturn', 'currentSelector', 'unknownVariables', 'tempVariables', 'messageSends', 'referencedClasses', 'classReferenced', 'argVariables'], 'Compiler-Core');
983
+ smalltalk.addMethod(
984
+ "_argVariables",
985
+ smalltalk.method({
986
+ selector: "argVariables",
987
+ category: 'accessing',
988
+ fn: function (){
989
+ var self=this;
990
+ var $1;
991
+ $1=smalltalk.send(self["@argVariables"],"_copy",[]);
992
+ return $1;
993
+ },
994
+ args: [],
995
+ source: "argVariables\x0a\x09^argVariables copy",
996
+ messageSends: ["copy"],
997
+ referencedClasses: []
998
+ }),
999
+ smalltalk.FunCodeGenerator);
1000
+
1001
+ smalltalk.addMethod(
1002
+ "_checkClass_for_",
1003
+ smalltalk.method({
1004
+ selector: "checkClass:for:",
1005
+ category: 'optimizations',
1006
+ fn: function (aClassName,receiver){
1007
+ var self=this;
1008
+ smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("((($receiver = ","__comma",[receiver]),"__comma",[").klass === smalltalk."]),"__comma",[aClassName]),"__comma",[") ? "])]);
1009
+ return self},
1010
+ args: ["aClassName", "receiver"],
1011
+ source: "checkClass: aClassName for: receiver\x0a stream nextPutAll: '((($receiver = ', receiver, ').klass === smalltalk.', aClassName, ') ? '",
1012
+ messageSends: ["nextPutAll:", ","],
1013
+ referencedClasses: []
1014
+ }),
1015
+ smalltalk.FunCodeGenerator);
1016
+
1017
+ smalltalk.addMethod(
1018
+ "_compileNode_",
1019
+ smalltalk.method({
1020
+ selector: "compileNode:",
1021
+ category: 'compiling',
1022
+ fn: function (aNode){
1023
+ var self=this;
1024
+ var $1;
1025
+ self["@stream"]=smalltalk.send("","_writeStream",[]);
1026
+ smalltalk.send(self,"_visit_",[aNode]);
1027
+ $1=smalltalk.send(self["@stream"],"_contents",[]);
1028
+ return $1;
1029
+ },
1030
+ args: ["aNode"],
1031
+ source: "compileNode: aNode\x0a\x09stream := '' writeStream.\x0a\x09self visit: aNode.\x0a\x09^stream contents",
1032
+ messageSends: ["writeStream", "visit:", "contents"],
1033
+ referencedClasses: []
1034
+ }),
1035
+ smalltalk.FunCodeGenerator);
1036
+
1037
+ smalltalk.addMethod(
1038
+ "_initialize",
1039
+ smalltalk.method({
1040
+ selector: "initialize",
1041
+ category: 'initialization',
1042
+ fn: function (){
1043
+ var self=this;
1044
+ smalltalk.send(self,"_initialize",[],smalltalk.AbstractCodeGenerator);
1045
+ self["@stream"]=smalltalk.send("","_writeStream",[]);
1046
+ self["@unknownVariables"]=[];
1047
+ self["@tempVariables"]=[];
1048
+ self["@argVariables"]=[];
1049
+ self["@messageSends"]=[];
1050
+ self["@classReferenced"]=[];
1051
+ return self},
1052
+ args: [],
1053
+ source: "initialize\x0a\x09super initialize.\x0a\x09stream := '' writeStream. \x0a\x09unknownVariables := #().\x0a\x09tempVariables := #().\x0a\x09argVariables := #().\x0a\x09messageSends := #().\x0a\x09classReferenced := #()",
1054
+ messageSends: ["initialize", "writeStream"],
1055
+ referencedClasses: []
1056
+ }),
1057
+ smalltalk.FunCodeGenerator);
1058
+
1059
+ smalltalk.addMethod(
1060
+ "_inline_receiver_argumentNodes_",
1061
+ smalltalk.method({
1062
+ selector: "inline:receiver:argumentNodes:",
1063
+ category: 'optimizations',
1064
+ fn: function (aSelector,receiver,aCollection){
1065
+ var self=this;
1066
+ var $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16;
1067
+ var inlined;
1068
+ inlined=false;
1069
+ $1=smalltalk.send(aSelector,"__eq",["ifFalse:"]);
1070
+ if(smalltalk.assert($1)){
1071
+ $2=smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]);
1072
+ if(smalltalk.assert($2)){
1073
+ smalltalk.send(self,"_checkClass_for_",["Boolean",receiver]);
1074
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(! $receiver ? "]);
1075
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1076
+ smalltalk.send(self["@stream"],"_nextPutAll_",["() : nil)"]);
1077
+ inlined=true;
1078
+ inlined;
1079
+ };
1080
+ };
1081
+ $3=smalltalk.send(aSelector,"__eq",["ifTrue:"]);
1082
+ if(smalltalk.assert($3)){
1083
+ $4=smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]);
1084
+ if(smalltalk.assert($4)){
1085
+ smalltalk.send(self,"_checkClass_for_",["Boolean",receiver]);
1086
+ smalltalk.send(self["@stream"],"_nextPutAll_",["($receiver ? "]);
1087
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1088
+ smalltalk.send(self["@stream"],"_nextPutAll_",["() : nil)"]);
1089
+ inlined=true;
1090
+ inlined;
1091
+ };
1092
+ };
1093
+ $5=smalltalk.send(aSelector,"__eq",["ifTrue:ifFalse:"]);
1094
+ if(smalltalk.assert($5)){
1095
+ $6=smalltalk.send(smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]),"_and_",[(function(){
1096
+ return smalltalk.send(smalltalk.send(aCollection,"_second",[]),"_isBlockNode",[]);
1097
+ })]);
1098
+ if(smalltalk.assert($6)){
1099
+ smalltalk.send(self,"_checkClass_for_",["Boolean",receiver]);
1100
+ smalltalk.send(self["@stream"],"_nextPutAll_",["($receiver ? "]);
1101
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1102
+ smalltalk.send(self["@stream"],"_nextPutAll_",["() : "]);
1103
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_second",[])]);
1104
+ smalltalk.send(self["@stream"],"_nextPutAll_",["())"]);
1105
+ inlined=true;
1106
+ inlined;
1107
+ };
1108
+ };
1109
+ $7=smalltalk.send(aSelector,"__eq",["ifFalse:ifTrue:"]);
1110
+ if(smalltalk.assert($7)){
1111
+ $8=smalltalk.send(smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]),"_and_",[(function(){
1112
+ return smalltalk.send(smalltalk.send(aCollection,"_second",[]),"_isBlockNode",[]);
1113
+ })]);
1114
+ if(smalltalk.assert($8)){
1115
+ smalltalk.send(self,"_checkClass_for_",["Boolean",receiver]);
1116
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(! $receiver ? "]);
1117
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1118
+ smalltalk.send(self["@stream"],"_nextPutAll_",["() : "]);
1119
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_second",[])]);
1120
+ smalltalk.send(self["@stream"],"_nextPutAll_",["())"]);
1121
+ inlined=true;
1122
+ inlined;
1123
+ };
1124
+ };
1125
+ $9=smalltalk.send(aSelector,"__eq",["<"]);
1126
+ if(smalltalk.assert($9)){
1127
+ smalltalk.send(self,"_checkClass_for_",["Number",receiver]);
1128
+ smalltalk.send(self["@stream"],"_nextPutAll_",["$receiver <"]);
1129
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1130
+ inlined=true;
1131
+ inlined;
1132
+ };
1133
+ $10=smalltalk.send(aSelector,"__eq",["<="]);
1134
+ if(smalltalk.assert($10)){
1135
+ smalltalk.send(self,"_checkClass_for_",["Number",receiver]);
1136
+ smalltalk.send(self["@stream"],"_nextPutAll_",["$receiver <="]);
1137
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1138
+ inlined=true;
1139
+ inlined;
1140
+ };
1141
+ $11=smalltalk.send(aSelector,"__eq",[">"]);
1142
+ if(smalltalk.assert($11)){
1143
+ smalltalk.send(self,"_checkClass_for_",["Number",receiver]);
1144
+ smalltalk.send(self["@stream"],"_nextPutAll_",["$receiver >"]);
1145
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1146
+ inlined=true;
1147
+ inlined;
1148
+ };
1149
+ $12=smalltalk.send(aSelector,"__eq",[">="]);
1150
+ if(smalltalk.assert($12)){
1151
+ smalltalk.send(self,"_checkClass_for_",["Number",receiver]);
1152
+ smalltalk.send(self["@stream"],"_nextPutAll_",["$receiver >="]);
1153
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1154
+ inlined=true;
1155
+ inlined;
1156
+ };
1157
+ $13=smalltalk.send(aSelector,"__eq",["+"]);
1158
+ if(smalltalk.assert($13)){
1159
+ smalltalk.send(self,"_checkClass_for_",["Number",receiver]);
1160
+ smalltalk.send(self["@stream"],"_nextPutAll_",["$receiver +"]);
1161
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1162
+ inlined=true;
1163
+ inlined;
1164
+ };
1165
+ $14=smalltalk.send(aSelector,"__eq",["-"]);
1166
+ if(smalltalk.assert($14)){
1167
+ smalltalk.send(self,"_checkClass_for_",["Number",receiver]);
1168
+ smalltalk.send(self["@stream"],"_nextPutAll_",["$receiver -"]);
1169
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1170
+ inlined=true;
1171
+ inlined;
1172
+ };
1173
+ $15=smalltalk.send(aSelector,"__eq",["*"]);
1174
+ if(smalltalk.assert($15)){
1175
+ smalltalk.send(self,"_checkClass_for_",["Number",receiver]);
1176
+ smalltalk.send(self["@stream"],"_nextPutAll_",["$receiver *"]);
1177
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1178
+ inlined=true;
1179
+ inlined;
1180
+ };
1181
+ $16=smalltalk.send(aSelector,"__eq",["/"]);
1182
+ if(smalltalk.assert($16)){
1183
+ smalltalk.send(self,"_checkClass_for_",["Number",receiver]);
1184
+ smalltalk.send(self["@stream"],"_nextPutAll_",["$receiver /"]);
1185
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1186
+ inlined=true;
1187
+ inlined;
1188
+ };
1189
+ return inlined;
1190
+ },
1191
+ args: ["aSelector", "receiver", "aCollection"],
1192
+ source: "inline: aSelector receiver: receiver argumentNodes: aCollection\x0a | inlined |\x0a inlined := false.\x0a\x0a\x09\x22-- Booleans --\x22\x0a\x0a\x09(aSelector = 'ifFalse:') ifTrue: [\x0a\x09\x09aCollection first isBlockNode ifTrue: [\x0a \x09self checkClass: 'Boolean' for: receiver.\x0a \x09stream nextPutAll: '(! $receiver ? '.\x0a \x09self visit: aCollection first.\x0a \x09\x09stream nextPutAll: '() : nil)'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'ifTrue:') ifTrue: [\x0a\x09\x09aCollection first isBlockNode ifTrue: [\x0a \x09self checkClass: 'Boolean' for: receiver.\x0a \x09stream nextPutAll: '($receiver ? '.\x0a \x09self visit: aCollection first.\x0a \x09\x09stream nextPutAll: '() : nil)'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'ifTrue:ifFalse:') ifTrue: [\x0a\x09\x09(aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [\x0a \x09self checkClass: 'Boolean' for: receiver.\x0a \x09stream nextPutAll: '($receiver ? '.\x0a \x09self visit: aCollection first.\x0a \x09\x09stream nextPutAll: '() : '.\x0a \x09\x09self visit: aCollection second.\x0a \x09\x09stream nextPutAll: '())'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'ifFalse:ifTrue:') ifTrue: [\x0a\x09\x09(aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [\x0a \x09self checkClass: 'Boolean' for: receiver.\x0a \x09stream nextPutAll: '(! $receiver ? '.\x0a \x09self visit: aCollection first.\x0a \x09\x09stream nextPutAll: '() : '.\x0a \x09\x09self visit: aCollection second.\x0a \x09\x09stream nextPutAll: '())'.\x0a \x09inlined := true]].\x0a\x0a\x09\x22-- Numbers --\x22\x0a\x0a\x09(aSelector = '<') ifTrue: [\x0a self checkClass: 'Number' for: receiver.\x0a stream nextPutAll: '$receiver <'.\x0a self visit: aCollection first.\x0a inlined := true].\x0a\x0a\x09(aSelector = '<=') ifTrue: [\x0a self checkClass: 'Number' for: receiver.\x0a stream nextPutAll: '$receiver <='.\x0a self visit: aCollection first.\x0a inlined := true].\x0a\x0a\x09(aSelector = '>') ifTrue: [ \x0a self checkClass: 'Number' for: receiver.\x0a stream nextPutAll: '$receiver >'.\x0a self visit: aCollection first.\x0a inlined := true].\x0a\x0a\x09(aSelector = '>=') ifTrue: [\x0a self checkClass: 'Number' for: receiver.\x0a stream nextPutAll: '$receiver >='.\x0a self visit: aCollection first.\x0a inlined := true].\x0a\x0a (aSelector = '+') ifTrue: [\x0a self checkClass: 'Number' for: receiver.\x0a stream nextPutAll: '$receiver +'.\x0a self visit: aCollection first.\x0a inlined := true].\x0a\x0a (aSelector = '-') ifTrue: [\x0a self checkClass: 'Number' for: receiver.\x0a stream nextPutAll: '$receiver -'.\x0a self visit: aCollection first.\x0a inlined := true].\x0a\x0a (aSelector = '*') ifTrue: [\x0a self checkClass: 'Number' for: receiver.\x0a stream nextPutAll: '$receiver *'.\x0a self visit: aCollection first.\x0a inlined := true].\x0a\x0a (aSelector = '/') ifTrue: [\x0a self checkClass: 'Number' for: receiver.\x0a stream nextPutAll: '$receiver /'.\x0a self visit: aCollection first.\x0a inlined := true].\x0a\x0a ^inlined",
1193
+ messageSends: ["ifTrue:", "checkClass:for:", "nextPutAll:", "visit:", "first", "isBlockNode", "=", "second", "and:"],
1194
+ referencedClasses: []
1195
+ }),
1196
+ smalltalk.FunCodeGenerator);
1197
+
1198
+ smalltalk.addMethod(
1199
+ "_inlineLiteral_receiverNode_argumentNodes_",
1200
+ smalltalk.method({
1201
+ selector: "inlineLiteral:receiverNode:argumentNodes:",
1202
+ category: 'optimizations',
1203
+ fn: function (aSelector,anObject,aCollection){
1204
+ var self=this;
1205
+ var $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32;
1206
+ var inlined;
1207
+ inlined=false;
1208
+ $1=smalltalk.send(aSelector,"__eq",["whileTrue:"]);
1209
+ if(smalltalk.assert($1)){
1210
+ $2=smalltalk.send(smalltalk.send(anObject,"_isBlockNode",[]),"_and_",[(function(){
1211
+ return smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]);
1212
+ })]);
1213
+ if(smalltalk.assert($2)){
1214
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(function(){while("]);
1215
+ smalltalk.send(self,"_visit_",[anObject]);
1216
+ smalltalk.send(self["@stream"],"_nextPutAll_",["()) {"]);
1217
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1218
+ smalltalk.send(self["@stream"],"_nextPutAll_",["()}})()"]);
1219
+ inlined=true;
1220
+ inlined;
1221
+ };
1222
+ };
1223
+ $3=smalltalk.send(aSelector,"__eq",["whileFalse:"]);
1224
+ if(smalltalk.assert($3)){
1225
+ $4=smalltalk.send(smalltalk.send(anObject,"_isBlockNode",[]),"_and_",[(function(){
1226
+ return smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]);
1227
+ })]);
1228
+ if(smalltalk.assert($4)){
1229
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(function(){while(!"]);
1230
+ smalltalk.send(self,"_visit_",[anObject]);
1231
+ smalltalk.send(self["@stream"],"_nextPutAll_",["()) {"]);
1232
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1233
+ smalltalk.send(self["@stream"],"_nextPutAll_",["()}})()"]);
1234
+ inlined=true;
1235
+ inlined;
1236
+ };
1237
+ };
1238
+ $5=smalltalk.send(aSelector,"__eq",["whileTrue"]);
1239
+ if(smalltalk.assert($5)){
1240
+ $6=smalltalk.send(anObject,"_isBlockNode",[]);
1241
+ if(smalltalk.assert($6)){
1242
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(function(){while("]);
1243
+ smalltalk.send(self,"_visit_",[anObject]);
1244
+ smalltalk.send(self["@stream"],"_nextPutAll_",["()) {}})()"]);
1245
+ inlined=true;
1246
+ inlined;
1247
+ };
1248
+ };
1249
+ $7=smalltalk.send(aSelector,"__eq",["whileFalse"]);
1250
+ if(smalltalk.assert($7)){
1251
+ $8=smalltalk.send(anObject,"_isBlockNode",[]);
1252
+ if(smalltalk.assert($8)){
1253
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(function(){while(!"]);
1254
+ smalltalk.send(self,"_visit_",[anObject]);
1255
+ smalltalk.send(self["@stream"],"_nextPutAll_",["()) {}})()"]);
1256
+ inlined=true;
1257
+ inlined;
1258
+ };
1259
+ };
1260
+ $9=smalltalk.send(aSelector,"__eq",["+"]);
1261
+ if(smalltalk.assert($9)){
1262
+ $10=smalltalk.send(self,"_isNode_ofClass_",[anObject,(smalltalk.Number || Number)]);
1263
+ if(smalltalk.assert($10)){
1264
+ smalltalk.send(self,"_visit_",[anObject]);
1265
+ smalltalk.send(self["@stream"],"_nextPutAll_",[" + "]);
1266
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1267
+ inlined=true;
1268
+ inlined;
1269
+ };
1270
+ };
1271
+ $11=smalltalk.send(aSelector,"__eq",["-"]);
1272
+ if(smalltalk.assert($11)){
1273
+ $12=smalltalk.send(self,"_isNode_ofClass_",[anObject,(smalltalk.Number || Number)]);
1274
+ if(smalltalk.assert($12)){
1275
+ smalltalk.send(self,"_visit_",[anObject]);
1276
+ smalltalk.send(self["@stream"],"_nextPutAll_",[" - "]);
1277
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1278
+ inlined=true;
1279
+ inlined;
1280
+ };
1281
+ };
1282
+ $13=smalltalk.send(aSelector,"__eq",["*"]);
1283
+ if(smalltalk.assert($13)){
1284
+ $14=smalltalk.send(self,"_isNode_ofClass_",[anObject,(smalltalk.Number || Number)]);
1285
+ if(smalltalk.assert($14)){
1286
+ smalltalk.send(self,"_visit_",[anObject]);
1287
+ smalltalk.send(self["@stream"],"_nextPutAll_",[" * "]);
1288
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1289
+ inlined=true;
1290
+ inlined;
1291
+ };
1292
+ };
1293
+ $15=smalltalk.send(aSelector,"__eq",["/"]);
1294
+ if(smalltalk.assert($15)){
1295
+ $16=smalltalk.send(self,"_isNode_ofClass_",[anObject,(smalltalk.Number || Number)]);
1296
+ if(smalltalk.assert($16)){
1297
+ smalltalk.send(self,"_visit_",[anObject]);
1298
+ smalltalk.send(self["@stream"],"_nextPutAll_",[" / "]);
1299
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1300
+ inlined=true;
1301
+ inlined;
1302
+ };
1303
+ };
1304
+ $17=smalltalk.send(aSelector,"__eq",["<"]);
1305
+ if(smalltalk.assert($17)){
1306
+ $18=smalltalk.send(self,"_isNode_ofClass_",[anObject,(smalltalk.Number || Number)]);
1307
+ if(smalltalk.assert($18)){
1308
+ smalltalk.send(self,"_visit_",[anObject]);
1309
+ smalltalk.send(self["@stream"],"_nextPutAll_",[" < "]);
1310
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1311
+ inlined=true;
1312
+ inlined;
1313
+ };
1314
+ };
1315
+ $19=smalltalk.send(aSelector,"__eq",["<="]);
1316
+ if(smalltalk.assert($19)){
1317
+ $20=smalltalk.send(self,"_isNode_ofClass_",[anObject,(smalltalk.Number || Number)]);
1318
+ if(smalltalk.assert($20)){
1319
+ smalltalk.send(self,"_visit_",[anObject]);
1320
+ smalltalk.send(self["@stream"],"_nextPutAll_",[" <= "]);
1321
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1322
+ inlined=true;
1323
+ inlined;
1324
+ };
1325
+ };
1326
+ $21=smalltalk.send(aSelector,"__eq",[">"]);
1327
+ if(smalltalk.assert($21)){
1328
+ $22=smalltalk.send(self,"_isNode_ofClass_",[anObject,(smalltalk.Number || Number)]);
1329
+ if(smalltalk.assert($22)){
1330
+ smalltalk.send(self,"_visit_",[anObject]);
1331
+ smalltalk.send(self["@stream"],"_nextPutAll_",[" > "]);
1332
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1333
+ inlined=true;
1334
+ inlined;
1335
+ };
1336
+ };
1337
+ $23=smalltalk.send(aSelector,"__eq",[">="]);
1338
+ if(smalltalk.assert($23)){
1339
+ $24=smalltalk.send(self,"_isNode_ofClass_",[anObject,(smalltalk.Number || Number)]);
1340
+ if(smalltalk.assert($24)){
1341
+ smalltalk.send(self,"_visit_",[anObject]);
1342
+ smalltalk.send(self["@stream"],"_nextPutAll_",[" >= "]);
1343
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1344
+ inlined=true;
1345
+ inlined;
1346
+ };
1347
+ };
1348
+ $25=smalltalk.send(aSelector,"__eq",["ifNil:"]);
1349
+ if(smalltalk.assert($25)){
1350
+ $26=smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]);
1351
+ if(smalltalk.assert($26)){
1352
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(($receiver = "]);
1353
+ smalltalk.send(self,"_visit_",[anObject]);
1354
+ smalltalk.send(self["@stream"],"_nextPutAll_",[") == nil || $receiver == undefined) ? "]);
1355
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1356
+ smalltalk.send(self["@stream"],"_nextPutAll_",["() : $receiver"]);
1357
+ inlined=true;
1358
+ inlined;
1359
+ };
1360
+ };
1361
+ $27=smalltalk.send(aSelector,"__eq",["ifNotNil:"]);
1362
+ if(smalltalk.assert($27)){
1363
+ $28=smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]);
1364
+ if(smalltalk.assert($28)){
1365
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(($receiver = "]);
1366
+ smalltalk.send(self,"_visit_",[anObject]);
1367
+ smalltalk.send(self["@stream"],"_nextPutAll_",[") != nil && $receiver != undefined) ? "]);
1368
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1369
+ smalltalk.send(self["@stream"],"_nextPutAll_",["() : nil"]);
1370
+ inlined=true;
1371
+ inlined;
1372
+ };
1373
+ };
1374
+ $29=smalltalk.send(aSelector,"__eq",["ifNil:ifNotNil:"]);
1375
+ if(smalltalk.assert($29)){
1376
+ $30=smalltalk.send(smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]),"_and_",[(function(){
1377
+ return smalltalk.send(smalltalk.send(aCollection,"_second",[]),"_isBlockNode",[]);
1378
+ })]);
1379
+ if(smalltalk.assert($30)){
1380
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(($receiver = "]);
1381
+ smalltalk.send(self,"_visit_",[anObject]);
1382
+ smalltalk.send(self["@stream"],"_nextPutAll_",[") == nil || $receiver == undefined) ? "]);
1383
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1384
+ smalltalk.send(self["@stream"],"_nextPutAll_",["() : "]);
1385
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_second",[])]);
1386
+ smalltalk.send(self["@stream"],"_nextPutAll_",["()"]);
1387
+ inlined=true;
1388
+ inlined;
1389
+ };
1390
+ };
1391
+ $31=smalltalk.send(aSelector,"__eq",["ifNotNil:ifNil:"]);
1392
+ if(smalltalk.assert($31)){
1393
+ $32=smalltalk.send(smalltalk.send(smalltalk.send(aCollection,"_first",[]),"_isBlockNode",[]),"_and_",[(function(){
1394
+ return smalltalk.send(smalltalk.send(aCollection,"_second",[]),"_isBlockNode",[]);
1395
+ })]);
1396
+ if(smalltalk.assert($32)){
1397
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(($receiver = "]);
1398
+ smalltalk.send(self,"_visit_",[anObject]);
1399
+ smalltalk.send(self["@stream"],"_nextPutAll_",[") == nil || $receiver == undefined) ? "]);
1400
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_second",[])]);
1401
+ smalltalk.send(self["@stream"],"_nextPutAll_",["() : "]);
1402
+ smalltalk.send(self,"_visit_",[smalltalk.send(aCollection,"_first",[])]);
1403
+ smalltalk.send(self["@stream"],"_nextPutAll_",["()"]);
1404
+ inlined=true;
1405
+ inlined;
1406
+ };
1407
+ };
1408
+ return inlined;
1409
+ },
1410
+ args: ["aSelector", "anObject", "aCollection"],
1411
+ source: "inlineLiteral: aSelector receiverNode: anObject argumentNodes: aCollection\x0a | inlined |\x0a inlined := false.\x0a \x0a\x09\x22-- BlockClosures --\x22\x0a\x0a\x09(aSelector = 'whileTrue:') ifTrue: [\x0a \x09(anObject isBlockNode and: [aCollection first isBlockNode]) ifTrue: [\x0a \x09stream nextPutAll: '(function(){while('.\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: '()) {'.\x0a \x09self visit: aCollection first.\x0a \x09\x09stream nextPutAll: '()}})()'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'whileFalse:') ifTrue: [\x0a \x09(anObject isBlockNode and: [aCollection first isBlockNode]) ifTrue: [\x0a \x09stream nextPutAll: '(function(){while(!'.\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: '()) {'.\x0a \x09self visit: aCollection first.\x0a \x09\x09stream nextPutAll: '()}})()'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'whileTrue') ifTrue: [\x0a \x09anObject isBlockNode ifTrue: [\x0a \x09stream nextPutAll: '(function(){while('.\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: '()) {}})()'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'whileFalse') ifTrue: [\x0a \x09anObject isBlockNode ifTrue: [\x0a \x09stream nextPutAll: '(function(){while(!'.\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: '()) {}})()'.\x0a \x09inlined := true]].\x0a\x0a\x09\x22-- Numbers --\x22\x0a\x0a\x09(aSelector = '+') ifTrue: [\x0a \x09(self isNode: anObject ofClass: Number) ifTrue: [\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: ' + '.\x0a \x09self visit: aCollection first.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = '-') ifTrue: [\x0a \x09(self isNode: anObject ofClass: Number) ifTrue: [\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: ' - '.\x0a \x09self visit: aCollection first.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = '*') ifTrue: [\x0a \x09(self isNode: anObject ofClass: Number) ifTrue: [\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: ' * '.\x0a \x09self visit: aCollection first.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = '/') ifTrue: [\x0a \x09(self isNode: anObject ofClass: Number) ifTrue: [\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: ' / '.\x0a \x09self visit: aCollection first.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = '<') ifTrue: [\x0a \x09(self isNode: anObject ofClass: Number) ifTrue: [\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: ' < '.\x0a \x09self visit: aCollection first.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = '<=') ifTrue: [\x0a \x09(self isNode: anObject ofClass: Number) ifTrue: [\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: ' <= '.\x0a \x09self visit: aCollection first.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = '>') ifTrue: [\x0a \x09(self isNode: anObject ofClass: Number) ifTrue: [\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: ' > '.\x0a \x09self visit: aCollection first.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = '>=') ifTrue: [\x0a \x09(self isNode: anObject ofClass: Number) ifTrue: [\x0a \x09self visit: anObject.\x0a \x09stream nextPutAll: ' >= '.\x0a \x09self visit: aCollection first.\x0a \x09inlined := true]].\x0a \x09 \x0a\x09\x22-- UndefinedObject --\x22\x0a\x0a\x09(aSelector = 'ifNil:') ifTrue: [\x0a\x09\x09aCollection first isBlockNode ifTrue: [\x0a \x09\x09stream nextPutAll: '(($receiver = '.\x0a \x09\x09self visit: anObject.\x0a \x09\x09stream nextPutAll: ') == nil || $receiver == undefined) ? '.\x0a \x09self visit: aCollection first.\x0a \x09stream nextPutAll: '() : $receiver'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'ifNotNil:') ifTrue: [\x0a\x09\x09aCollection first isBlockNode ifTrue: [\x0a \x09\x09stream nextPutAll: '(($receiver = '.\x0a \x09\x09self visit: anObject.\x0a \x09\x09stream nextPutAll: ') != nil && $receiver != undefined) ? '.\x0a \x09self visit: aCollection first.\x0a \x09stream nextPutAll: '() : nil'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'ifNil:ifNotNil:') ifTrue: [\x0a\x09\x09(aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [\x0a \x09\x09stream nextPutAll: '(($receiver = '.\x0a \x09\x09self visit: anObject.\x0a \x09\x09stream nextPutAll: ') == nil || $receiver == undefined) ? '.\x0a \x09self visit: aCollection first.\x0a \x09stream nextPutAll: '() : '.\x0a \x09self visit: aCollection second.\x0a \x09stream nextPutAll: '()'.\x0a \x09inlined := true]].\x0a\x0a\x09(aSelector = 'ifNotNil:ifNil:') ifTrue: [\x0a\x09\x09(aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [\x0a \x09\x09stream nextPutAll: '(($receiver = '.\x0a \x09\x09self visit: anObject.\x0a \x09\x09stream nextPutAll: ') == nil || $receiver == undefined) ? '.\x0a \x09self visit: aCollection second.\x0a \x09stream nextPutAll: '() : '.\x0a \x09self visit: aCollection first.\x0a \x09stream nextPutAll: '()'.\x0a \x09inlined := true]].\x0a \x0a ^inlined",
1412
+ messageSends: ["ifTrue:", "nextPutAll:", "visit:", "first", "and:", "isBlockNode", "=", "isNode:ofClass:", "second"],
1413
+ referencedClasses: ["Number"]
1414
+ }),
1415
+ smalltalk.FunCodeGenerator);
1416
+
1417
+ smalltalk.addMethod(
1418
+ "_isNode_ofClass_",
1419
+ smalltalk.method({
1420
+ selector: "isNode:ofClass:",
1421
+ category: 'optimizations',
1422
+ fn: function (aNode,aClass){
1423
+ var self=this;
1424
+ var $1;
1425
+ $1=smalltalk.send(smalltalk.send(aNode,"_isValueNode",[]),"_and_",[(function(){
1426
+ return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aNode,"_value",[]),"_class",[]),"__eq",[aClass]),"_or_",[(function(){
1427
+ return smalltalk.send(smalltalk.send(smalltalk.send(aNode,"_value",[]),"__eq",["self"]),"_and_",[(function(){
1428
+ return smalltalk.send(smalltalk.send(self,"_currentClass",[]),"__eq",[aClass]);
1429
+ })]);
1430
+ })]);
1431
+ })]);
1432
+ return $1;
1433
+ },
1434
+ args: ["aNode", "aClass"],
1435
+ source: "isNode: aNode ofClass: aClass\x0a\x09^aNode isValueNode and: [\x0a \x09aNode value class = aClass or: [\x0a \x09\x09aNode value = 'self' and: [self currentClass = aClass]]]",
1436
+ messageSends: ["and:", "or:", "=", "currentClass", "value", "class", "isValueNode"],
1437
+ referencedClasses: []
1438
+ }),
1439
+ smalltalk.FunCodeGenerator);
1440
+
1441
+ smalltalk.addMethod(
1442
+ "_knownVariables",
1443
+ smalltalk.method({
1444
+ selector: "knownVariables",
1445
+ category: 'accessing',
1446
+ fn: function (){
1447
+ var self=this;
1448
+ var $2,$3,$1;
1449
+ $2=smalltalk.send(self,"_pseudoVariables",[]);
1450
+ smalltalk.send($2,"_addAll_",[smalltalk.send(self,"_tempVariables",[])]);
1451
+ smalltalk.send($2,"_addAll_",[smalltalk.send(self,"_argVariables",[])]);
1452
+ $3=smalltalk.send($2,"_yourself",[]);
1453
+ $1=$3;
1454
+ return $1;
1455
+ },
1456
+ args: [],
1457
+ source: "knownVariables\x0a\x09^self pseudoVariables \x0a\x09\x09addAll: self tempVariables;\x0a\x09\x09addAll: self argVariables;\x0a\x09\x09yourself",
1458
+ messageSends: ["addAll:", "tempVariables", "pseudoVariables", "argVariables", "yourself"],
1459
+ referencedClasses: []
1460
+ }),
1461
+ smalltalk.FunCodeGenerator);
1462
+
1463
+ smalltalk.addMethod(
1464
+ "_performOptimizations",
1465
+ smalltalk.method({
1466
+ selector: "performOptimizations",
1467
+ category: 'testing',
1468
+ fn: function (){
1469
+ var self=this;
1470
+ var $1;
1471
+ $1=smalltalk.send(smalltalk.send(self,"_class",[]),"_performOptimizations",[]);
1472
+ return $1;
1473
+ },
1474
+ args: [],
1475
+ source: "performOptimizations\x0a\x09^self class performOptimizations",
1476
+ messageSends: ["performOptimizations", "class"],
1477
+ referencedClasses: []
1478
+ }),
1479
+ smalltalk.FunCodeGenerator);
1480
+
1481
+ smalltalk.addMethod(
1482
+ "_send_to_arguments_superSend_",
1483
+ smalltalk.method({
1484
+ selector: "send:to:arguments:superSend:",
1485
+ category: 'visiting',
1486
+ fn: function (aSelector,aReceiver,aCollection,aBoolean){
1487
+ var self=this;
1488
+ var $1;
1489
+ $1=smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
1490
+ var tmp;
1491
+ tmp=self["@stream"];
1492
+ tmp;
1493
+ smalltalk.send(str,"_nextPutAll_",["smalltalk.send("]);
1494
+ smalltalk.send(str,"_nextPutAll_",[aReceiver]);
1495
+ smalltalk.send(str,"_nextPutAll_",[smalltalk.send(smalltalk.send(", \x22","__comma",[smalltalk.send(aSelector,"_asSelector",[])]),"__comma",["\x22, ["])]);
1496
+ self["@stream"]=str;
1497
+ self["@stream"];
1498
+ smalltalk.send(aCollection,"_do_separatedBy_",[(function(each){
1499
+ return smalltalk.send(self,"_visit_",[each]);
1500
+ }),(function(){
1501
+ return smalltalk.send(self["@stream"],"_nextPutAll_",[", "]);
1502
+ })]);
1503
+ self["@stream"]=tmp;
1504
+ self["@stream"];
1505
+ smalltalk.send(str,"_nextPutAll_",["]"]);
1506
+ if(smalltalk.assert(aBoolean)){
1507
+ smalltalk.send(str,"_nextPutAll_",[smalltalk.send(smalltalk.send(", smalltalk.","__comma",[smalltalk.send(self,"_classNameFor_",[smalltalk.send(self,"_currentClass",[])])]),"__comma",[".superclass || nil"])]);
1508
+ };
1509
+ return smalltalk.send(str,"_nextPutAll_",[")"]);
1510
+ })]);
1511
+ return $1;
1512
+ },
1513
+ args: ["aSelector", "aReceiver", "aCollection", "aBoolean"],
1514
+ source: "send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean\x0a\x09^String streamContents: [:str || tmp |\x0a \x09tmp := stream.\x0a\x09\x09str nextPutAll: 'smalltalk.send('.\x0a\x09\x09str nextPutAll: aReceiver.\x0a\x09\x09str nextPutAll: ', \x22', aSelector asSelector, '\x22, ['.\x0a stream := str.\x0a\x09\x09aCollection\x0a\x09 \x09\x09do: [:each | self visit: each]\x0a\x09 \x09\x09separatedBy: [stream nextPutAll: ', '].\x0a stream := tmp.\x0a str nextPutAll: ']'.\x0a\x09\x09aBoolean ifTrue: [\x0a\x09\x09\x09str nextPutAll: ', smalltalk.', (self classNameFor: self currentClass), '.superclass || nil'].\x0a\x09\x09str nextPutAll: ')']",
1515
+ messageSends: ["streamContents:", "nextPutAll:", ",", "asSelector", "do:separatedBy:", "visit:", "ifTrue:", "classNameFor:", "currentClass"],
1516
+ referencedClasses: ["String"]
1517
+ }),
1518
+ smalltalk.FunCodeGenerator);
1519
+
1520
+ smalltalk.addMethod(
1521
+ "_tempVariables",
1522
+ smalltalk.method({
1523
+ selector: "tempVariables",
1524
+ category: 'accessing',
1525
+ fn: function (){
1526
+ var self=this;
1527
+ var $1;
1528
+ $1=smalltalk.send(self["@tempVariables"],"_copy",[]);
1529
+ return $1;
1530
+ },
1531
+ args: [],
1532
+ source: "tempVariables\x0a\x09^tempVariables copy",
1533
+ messageSends: ["copy"],
1534
+ referencedClasses: []
1535
+ }),
1536
+ smalltalk.FunCodeGenerator);
1537
+
1538
+ smalltalk.addMethod(
1539
+ "_unknownVariables",
1540
+ smalltalk.method({
1541
+ selector: "unknownVariables",
1542
+ category: 'accessing',
1543
+ fn: function (){
1544
+ var self=this;
1545
+ var $1;
1546
+ $1=smalltalk.send(self["@unknownVariables"],"_copy",[]);
1547
+ return $1;
1548
+ },
1549
+ args: [],
1550
+ source: "unknownVariables\x0a\x09^unknownVariables copy",
1551
+ messageSends: ["copy"],
1552
+ referencedClasses: []
1553
+ }),
1554
+ smalltalk.FunCodeGenerator);
1555
+
1556
+ smalltalk.addMethod(
1557
+ "_visit_",
1558
+ smalltalk.method({
1559
+ selector: "visit:",
1560
+ category: 'visiting',
1561
+ fn: function (aNode){
1562
+ var self=this;
1563
+ smalltalk.send(aNode,"_accept_",[self]);
1564
+ return self},
1565
+ args: ["aNode"],
1566
+ source: "visit: aNode\x0a\x09aNode accept: self",
1567
+ messageSends: ["accept:"],
1568
+ referencedClasses: []
1569
+ }),
1570
+ smalltalk.FunCodeGenerator);
1571
+
1572
+ smalltalk.addMethod(
1573
+ "_visitAssignmentNode_",
1574
+ smalltalk.method({
1575
+ selector: "visitAssignmentNode:",
1576
+ category: 'visiting',
1577
+ fn: function (aNode){
1578
+ var self=this;
1579
+ smalltalk.send(self["@stream"],"_nextPutAll_",["("]);
1580
+ smalltalk.send(self,"_visit_",[smalltalk.send(aNode,"_left",[])]);
1581
+ smalltalk.send(self["@stream"],"_nextPutAll_",["="]);
1582
+ smalltalk.send(self,"_visit_",[smalltalk.send(aNode,"_right",[])]);
1583
+ smalltalk.send(self["@stream"],"_nextPutAll_",[")"]);
1584
+ return self},
1585
+ args: ["aNode"],
1586
+ source: "visitAssignmentNode: aNode\x0a\x09stream nextPutAll: '('.\x0a\x09self visit: aNode left.\x0a\x09stream nextPutAll: '='.\x0a\x09self visit: aNode right.\x0a\x09stream nextPutAll: ')'",
1587
+ messageSends: ["nextPutAll:", "visit:", "left", "right"],
1588
+ referencedClasses: []
1589
+ }),
1590
+ smalltalk.FunCodeGenerator);
1591
+
1592
+ smalltalk.addMethod(
1593
+ "_visitBlockNode_",
1594
+ smalltalk.method({
1595
+ selector: "visitBlockNode:",
1596
+ category: 'visiting',
1597
+ fn: function (aNode){
1598
+ var self=this;
1599
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(function("]);
1600
+ smalltalk.send(smalltalk.send(aNode,"_parameters",[]),"_do_separatedBy_",[(function(each){
1601
+ smalltalk.send(self["@tempVariables"],"_add_",[each]);
1602
+ return smalltalk.send(self["@stream"],"_nextPutAll_",[each]);
1603
+ }),(function(){
1604
+ return smalltalk.send(self["@stream"],"_nextPutAll_",[", "]);
1605
+ })]);
1606
+ smalltalk.send(self["@stream"],"_nextPutAll_",["){"]);
1607
+ smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
1608
+ return smalltalk.send(self,"_visit_",[each]);
1609
+ })]);
1610
+ smalltalk.send(self["@stream"],"_nextPutAll_",["})"]);
1611
+ return self},
1612
+ args: ["aNode"],
1613
+ source: "visitBlockNode: aNode\x0a\x09stream nextPutAll: '(function('.\x0a\x09aNode parameters \x0a\x09 do: [:each |\x0a\x09\x09tempVariables add: each.\x0a\x09\x09stream nextPutAll: each]\x0a\x09 separatedBy: [stream nextPutAll: ', '].\x0a\x09stream nextPutAll: '){'.\x0a\x09aNode nodes do: [:each | self visit: each].\x0a\x09stream nextPutAll: '})'",
1614
+ messageSends: ["nextPutAll:", "do:separatedBy:", "add:", "parameters", "do:", "visit:", "nodes"],
1615
+ referencedClasses: []
1616
+ }),
1617
+ smalltalk.FunCodeGenerator);
1618
+
1619
+ smalltalk.addMethod(
1620
+ "_visitBlockSequenceNode_",
1621
+ smalltalk.method({
1622
+ selector: "visitBlockSequenceNode:",
1623
+ category: 'visiting',
1624
+ fn: function (aNode){
1625
+ var self=this;
1626
+ var $1,$2,$3;
1627
+ var index;
1628
+ self["@nestedBlocks"]=smalltalk.send(self["@nestedBlocks"],"__plus",[(1)]);
1629
+ $1=smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_isEmpty",[]);
1630
+ if(smalltalk.assert($1)){
1631
+ smalltalk.send(self["@stream"],"_nextPutAll_",["return nil;"]);
1632
+ } else {
1633
+ smalltalk.send(smalltalk.send(aNode,"_temps",[]),"_do_",[(function(each){
1634
+ var temp;
1635
+ temp=smalltalk.send(self,"_safeVariableNameFor_",[each]);
1636
+ temp;
1637
+ smalltalk.send(self["@tempVariables"],"_add_",[temp]);
1638
+ smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send("var ","__comma",[temp]),"__comma",["=nil;"])]);
1639
+ $2=smalltalk.send(self["@stream"],"_lf",[]);
1640
+ return $2;
1641
+ })]);
1642
+ index=(0);
1643
+ index;
1644
+ smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
1645
+ index=smalltalk.send(index,"__plus",[(1)]);
1646
+ index;
1647
+ $3=smalltalk.send(index,"__eq",[smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_size",[])]);
1648
+ if(smalltalk.assert($3)){
1649
+ smalltalk.send(self["@stream"],"_nextPutAll_",["return "]);
1650
+ };
1651
+ smalltalk.send(self,"_visit_",[each]);
1652
+ return smalltalk.send(self["@stream"],"_nextPutAll_",[";"]);
1653
+ })]);
1654
+ };
1655
+ self["@nestedBlocks"]=smalltalk.send(self["@nestedBlocks"],"__minus",[(1)]);
1656
+ return self},
1657
+ args: ["aNode"],
1658
+ source: "visitBlockSequenceNode: aNode\x0a\x09| index |\x0a\x09nestedBlocks := nestedBlocks + 1.\x0a\x09aNode nodes isEmpty\x0a\x09 ifTrue: [\x0a\x09\x09stream nextPutAll: 'return nil;']\x0a\x09 ifFalse: [\x0a\x09\x09aNode temps do: [:each | | temp |\x0a temp := self safeVariableNameFor: each.\x0a\x09\x09 tempVariables add: temp.\x0a\x09\x09 stream nextPutAll: 'var ', temp, '=nil;'; lf].\x0a\x09\x09index := 0.\x0a\x09\x09aNode nodes do: [:each |\x0a\x09\x09 index := index + 1.\x0a\x09\x09 index = aNode nodes size ifTrue: [\x0a\x09\x09\x09stream nextPutAll: 'return '].\x0a\x09\x09 self visit: each.\x0a\x09\x09 stream nextPutAll: ';']].\x0a\x09nestedBlocks := nestedBlocks - 1",
1659
+ messageSends: ["+", "ifTrue:ifFalse:", "nextPutAll:", "do:", "safeVariableNameFor:", "add:", ",", "lf", "temps", "ifTrue:", "=", "size", "nodes", "visit:", "isEmpty", "-"],
1660
+ referencedClasses: []
1661
+ }),
1662
+ smalltalk.FunCodeGenerator);
1663
+
1664
+ smalltalk.addMethod(
1665
+ "_visitCascadeNode_",
1666
+ smalltalk.method({
1667
+ selector: "visitCascadeNode:",
1668
+ category: 'visiting',
1669
+ fn: function (aNode){
1670
+ var self=this;
1671
+ var $1,$2;
1672
+ var index;
1673
+ index=(0);
1674
+ $1=smalltalk.send(self["@tempVariables"],"_includes_",["$rec"]);
1675
+ if(! smalltalk.assert($1)){
1676
+ smalltalk.send(self["@tempVariables"],"_add_",["$rec"]);
1677
+ };
1678
+ smalltalk.send(self["@stream"],"_nextPutAll_",["(function($rec){"]);
1679
+ smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_",[(function(each){
1680
+ index=smalltalk.send(index,"__plus",[(1)]);
1681
+ index;
1682
+ $2=smalltalk.send(index,"__eq",[smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_size",[])]);
1683
+ if(smalltalk.assert($2)){
1684
+ smalltalk.send(self["@stream"],"_nextPutAll_",["return "]);
1685
+ };
1686
+ smalltalk.send(each,"_receiver_",[smalltalk.send(smalltalk.send((smalltalk.VariableNode || VariableNode),"_new",[]),"_value_",["$rec"])]);
1687
+ smalltalk.send(self,"_visit_",[each]);
1688
+ return smalltalk.send(self["@stream"],"_nextPutAll_",[";"]);
1689
+ })]);
1690
+ smalltalk.send(self["@stream"],"_nextPutAll_",["})("]);
1691
+ smalltalk.send(self,"_visit_",[smalltalk.send(aNode,"_receiver",[])]);
1692
+ smalltalk.send(self["@stream"],"_nextPutAll_",[")"]);
1693
+ return self},
1694
+ args: ["aNode"],
1695
+ source: "visitCascadeNode: aNode\x0a\x09| index |\x0a\x09index := 0.\x0a\x09(tempVariables includes: '$rec') ifFalse: [\x0a\x09\x09tempVariables add: '$rec'].\x0a\x09stream nextPutAll: '(function($rec){'.\x0a\x09aNode nodes do: [:each |\x0a\x09 index := index + 1.\x0a\x09 index = aNode nodes size ifTrue: [\x0a\x09\x09stream nextPutAll: 'return '].\x0a\x09 each receiver: (VariableNode new value: '$rec').\x0a\x09 self visit: each.\x0a\x09 stream nextPutAll: ';'].\x0a\x09stream nextPutAll: '})('.\x0a\x09self visit: aNode receiver.\x0a\x09stream nextPutAll: ')'",
1696
+ messageSends: ["ifFalse:", "add:", "includes:", "nextPutAll:", "do:", "+", "ifTrue:", "=", "size", "nodes", "receiver:", "value:", "new", "visit:", "receiver"],
1697
+ referencedClasses: ["VariableNode"]
1698
+ }),
1699
+ smalltalk.FunCodeGenerator);
1700
+
1701
+ smalltalk.addMethod(
1702
+ "_visitClassReferenceNode_",
1703
+ smalltalk.method({
1704
+ selector: "visitClassReferenceNode:",
1705
+ category: 'visiting',
1706
+ fn: function (aNode){
1707
+ var self=this;
1708
+ var $1;
1709
+ $1=smalltalk.send(self["@referencedClasses"],"_includes_",[smalltalk.send(aNode,"_value",[])]);
1710
+ if(! smalltalk.assert($1)){
1711
+ smalltalk.send(self["@referencedClasses"],"_add_",[smalltalk.send(aNode,"_value",[])]);
1712
+ };
1713
+ smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(smalltalk.","__comma",[smalltalk.send(aNode,"_value",[])]),"__comma",[" || "]),"__comma",[smalltalk.send(aNode,"_value",[])]),"__comma",[")"])]);
1714
+ return self},
1715
+ args: ["aNode"],
1716
+ source: "visitClassReferenceNode: aNode\x0a\x09(referencedClasses includes: aNode value) ifFalse: [\x0a\x09\x09referencedClasses add: aNode value].\x0a\x09stream nextPutAll: '(smalltalk.', aNode value, ' || ', aNode value, ')'",
1717
+ messageSends: ["ifFalse:", "add:", "value", "includes:", "nextPutAll:", ","],
1718
+ referencedClasses: []
1719
+ }),
1720
+ smalltalk.FunCodeGenerator);
1721
+
1722
+ smalltalk.addMethod(
1723
+ "_visitDynamicArrayNode_",
1724
+ smalltalk.method({
1725
+ selector: "visitDynamicArrayNode:",
1726
+ category: 'visiting',
1727
+ fn: function (aNode){
1728
+ var self=this;
1729
+ smalltalk.send(self["@stream"],"_nextPutAll_",["["]);
1730
+ smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_separatedBy_",[(function(each){
1731
+ return smalltalk.send(self,"_visit_",[each]);
1732
+ }),(function(){
1733
+ return smalltalk.send(self["@stream"],"_nextPutAll_",[","]);
1734
+ })]);
1735
+ smalltalk.send(self["@stream"],"_nextPutAll_",["]"]);
1736
+ return self},
1737
+ args: ["aNode"],
1738
+ source: "visitDynamicArrayNode: aNode\x0a\x09stream nextPutAll: '['.\x0a\x09aNode nodes \x0a\x09\x09do: [:each | self visit: each]\x0a\x09\x09separatedBy: [stream nextPutAll: ','].\x0a\x09stream nextPutAll: ']'",
1739
+ messageSends: ["nextPutAll:", "do:separatedBy:", "visit:", "nodes"],
1740
+ referencedClasses: []
1741
+ }),
1742
+ smalltalk.FunCodeGenerator);
1743
+
1744
+ smalltalk.addMethod(
1745
+ "_visitDynamicDictionaryNode_",
1746
+ smalltalk.method({
1747
+ selector: "visitDynamicDictionaryNode:",
1748
+ category: 'visiting',
1749
+ fn: function (aNode){
1750
+ var self=this;
1751
+ smalltalk.send(self["@stream"],"_nextPutAll_",["smalltalk.HashedCollection._fromPairs_(["]);
1752
+ smalltalk.send(smalltalk.send(aNode,"_nodes",[]),"_do_separatedBy_",[(function(each){
1753
+ return smalltalk.send(self,"_visit_",[each]);
1754
+ }),(function(){
1755
+ return smalltalk.send(self["@stream"],"_nextPutAll_",[","]);
1756
+ })]);
1757
+ smalltalk.send(self["@stream"],"_nextPutAll_",["])"]);
1758
+ return self},
1759
+ args: ["aNode"],
1760
+ source: "visitDynamicDictionaryNode: aNode\x0a\x09stream nextPutAll: 'smalltalk.HashedCollection._fromPairs_(['.\x0a\x09\x09aNode nodes \x0a\x09\x09\x09do: [:each | self visit: each]\x0a\x09\x09\x09separatedBy: [stream nextPutAll: ','].\x0a\x09\x09stream nextPutAll: '])'",
1761
+ messageSends: ["nextPutAll:", "do:separatedBy:", "visit:", "nodes"],
1762
+ referencedClasses: []
1763
+ }),
1764
+ smalltalk.FunCodeGenerator);
1765
+
1766
+ smalltalk.addMethod(
1767
+ "_visitFailure_",
1768
+ smalltalk.method({
1769
+ selector: "visitFailure:",
1770
+ category: 'visiting',
1771
+ fn: function (aFailure){
1772
+ var self=this;
1773
+ smalltalk.send(self,"_error_",[smalltalk.send(aFailure,"_asString",[])]);
1774
+ return self},
1775
+ args: ["aFailure"],
1776
+ source: "visitFailure: aFailure\x0a\x09self error: aFailure asString",
1777
+ messageSends: ["error:", "asString"],
1778
+ referencedClasses: []
1779
+ }),
1780
+ smalltalk.FunCodeGenerator);
1781
+
1782
+ smalltalk.addMethod(
1783
+ "_visitJSStatementNode_",
1784
+ smalltalk.method({
1785
+ selector: "visitJSStatementNode:",
1786
+ category: 'visiting',
1787
+ fn: function (aNode){
1788
+ var self=this;
1789
+ smalltalk.send(self["@stream"],"_nextPutAll_",[smalltalk.send(aNode,"_source",[])]);
1790
+ return self},
1791
+ args: ["aNode"],
1792
+ source: "visitJSStatementNode: aNode\x0a\x09stream nextPutAll: aNode source",
1793
+ messageSends: ["nextPutAll:", "source"],
1794
+ referencedClasses: []
1795
+ }),
1796
+ smalltalk.FunCodeGenerator);
1797
+
1798
+ smalltalk.addMethod(
1799
+ "_visitMethodNode_",
1800
+ smalltalk.method({
1801
+ selector: "visitMethodNode:",
1802
+ category: 'visiting',
1803
+ fn: function (aNode) {
1804
+ var self=this;
1805
+ var str=nil;
1806
+ var currentSelector=nil;
1807
+ (self['@currentSelector']=smalltalk.send(smalltalk.send(aNode, "_selector", []), "_asSelector", []));
1808
+ (self['@nestedBlocks']=(0));
1809
+ (self['@earlyReturn']=false);
1810
+ (self['@messageSends']=[]);
1811
+ (self['@referencedClasses']=[]);
1812
+ (self['@unknownVariables']=[]);
1813
+ (self['@tempVariables']=[]);
1814
+ (self['@argVariables']=[]);
1815
+ (function($rec){smalltalk.send($rec, "_nextPutAll_", ["smalltalk.method({"]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("selector: \x22", "__comma", [smalltalk.send(aNode, "_selector", [])]), "__comma", ["\x22,"])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);
1816
+ (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("source: ", "__comma", [smalltalk.send(smalltalk.send(self, "_source", []), "_asJavascript", [])]), "__comma", [","])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);
1817
+ smalltalk.send(self['@stream'], "_nextPutAll_", ["fn: function("]);
1818
+ smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@argVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [", "]);})]);
1819
+ (function($rec){smalltalk.send($rec, "_nextPutAll_", ["){"]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["var self=this;"]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);
1820
+ (str=self['@stream']);
1821
+ (self['@stream']=smalltalk.send("", "_writeStream", []));
1822
+ smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]);
1823
+ ((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", ["var $early={};"]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", ["try{"]);})(str);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", ["var $early={};"]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", ["try{"]);})(str);})]));
1824
+ smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self['@stream'], "_contents", [])]);
1825
+ (self['@stream']=str);
1826
+ (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", ["return self;"]);})(self['@stream']);
1827
+ ((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", ["} catch(e) {if(e===$early)return e[0]; throw e}"]);})(self['@stream']);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", ["} catch(e) {if(e===$early)return e[0]; throw e}"]);})(self['@stream']);})]));
1828
+ smalltalk.send(self['@stream'], "_nextPutAll_", ["}"]);
1829
+ (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(",", "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", ["messageSends: "])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@messageSends'], "_asJavascript", []), "__comma", [","])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(self['@argVariables'], "_asJavascript", [])]), "__comma", [","])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", ["referencedClasses: ["]);})(self['@stream']);
1830
+ smalltalk.send(self['@referencedClasses'], "_do_separatedBy_", [(function(each){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(each, "_printString", [])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [","]);})]);
1831
+ smalltalk.send(self['@stream'], "_nextPutAll_", ["]"]);
1832
+ smalltalk.send(self['@stream'], "_nextPutAll_", ["})"]);
1833
+ return self;},
1834
+ args: ["aNode"],
1835
+ source: "visitMethodNode: aNode\x0a\x09| str currentSelector | \x0a\x09currentSelector := aNode selector asSelector.\x0a\x09nestedBlocks := 0.\x0a\x09earlyReturn := false.\x0a\x09messageSends := #().\x0a\x09referencedClasses := #().\x0a\x09unknownVariables := #().\x0a\x09tempVariables := #().\x0a\x09argVariables := #().\x0a\x09stream \x0a\x09 nextPutAll: 'smalltalk.method({'; lf;\x0a\x09 nextPutAll: 'selector: \x22', aNode selector, '\x22,'; lf.\x0a\x09stream nextPutAll: 'source: ', self source asJavascript, ',';lf.\x0a\x09stream nextPutAll: 'fn: function('.\x0a\x09aNode arguments \x0a\x09 do: [:each | \x0a\x09\x09argVariables add: each.\x0a\x09\x09stream nextPutAll: each]\x0a\x09 separatedBy: [stream nextPutAll: ', '].\x0a\x09stream \x0a\x09 nextPutAll: '){'; lf;\x0a\x09 nextPutAll: 'var self=this;'; lf.\x0a\x09str := stream.\x0a\x09stream := '' writeStream.\x0a\x09aNode nodes do: [:each |\x0a\x09 self visit: each].\x0a\x09earlyReturn ifTrue: [\x0a\x09 str nextPutAll: 'var $early={};'; lf; nextPutAll: 'try{'].\x0a\x09str nextPutAll: stream contents.\x0a\x09stream := str.\x0a\x09stream \x0a\x09 lf; \x0a\x09 nextPutAll: 'return self;'.\x0a\x09earlyReturn ifTrue: [\x0a\x09 stream lf; nextPutAll: '} catch(e) {if(e===$early)return e[0]; throw e}'].\x0a\x09stream nextPutAll: '}'.\x0a\x09stream \x0a\x09\x09nextPutAll: ',', String lf, 'messageSends: ';\x0a\x09\x09nextPutAll: messageSends asJavascript, ','; lf;\x0a \x09nextPutAll: 'args: ', argVariables asJavascript, ','; lf;\x0a\x09\x09nextPutAll: 'referencedClasses: ['.\x0a\x09referencedClasses \x0a\x09\x09do: [:each | stream nextPutAll: each printString]\x0a\x09\x09separatedBy: [stream nextPutAll: ','].\x0a\x09stream nextPutAll: ']'.\x0a\x09stream nextPutAll: '})'",
1836
+ messageSends: ["asSelector", "selector", "nextPutAll:", "lf", ",", "asJavascript", "source", "do:separatedBy:", "arguments", "add:", "writeStream", "do:", "nodes", "visit:", "ifTrue:", "contents", "printString"],
1837
+ referencedClasses: ["String"]
1838
+ }),
1839
+ smalltalk.FunCodeGenerator);
1840
+
1841
+ smalltalk.addMethod(
1842
+ "_visitReturnNode_",
1843
+ smalltalk.method({
1844
+ selector: "visitReturnNode:",
1845
+ category: 'visiting',
1846
+ fn: function (aNode) {
1847
+ var self=this;
1848
+ ((($receiver = ((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver >(0) : smalltalk.send($receiver, "__gt", [(0)]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (self['@earlyReturn']=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (self['@earlyReturn']=true);})]));
1849
+ ((($receiver = ((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver >(0) : smalltalk.send($receiver, "__gt", [(0)]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(function(){throw $early=["]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(function(){throw $early=["]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));
1850
+ smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]);
1851
+ ((($receiver = ((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver >(0) : smalltalk.send($receiver, "__gt", [(0)]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["]})()"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["]})()"]);})]));
1852
+ return self;},
1853
+ args: ["aNode"],
1854
+ source: "visitReturnNode: aNode\x0a\x09nestedBlocks > 0 ifTrue: [\x0a\x09 earlyReturn := true].\x0a\x09nestedBlocks > 0\x0a\x09 ifTrue: [\x0a\x09\x09stream\x0a\x09\x09 nextPutAll: '(function(){throw $early=[']\x0a\x09 ifFalse: [stream nextPutAll: 'return '].\x0a\x09aNode nodes do: [:each |\x0a\x09 self visit: each].\x0a\x09nestedBlocks > 0 ifTrue: [\x0a\x09 stream nextPutAll: ']})()']",
1855
+ messageSends: ["ifTrue:", ">", "ifTrue:ifFalse:", "nextPutAll:", "do:", "nodes", "visit:"],
1856
+ referencedClasses: []
1857
+ }),
1858
+ smalltalk.FunCodeGenerator);
1859
+
1860
+ smalltalk.addMethod(
1861
+ "_visitSendNode_",
1862
+ smalltalk.method({
1863
+ selector: "visitSendNode:",
1864
+ category: 'visiting',
1865
+ fn: function (aNode) {
1866
+ var self=this;
1867
+ var str=nil;
1868
+ var receiver=nil;
1869
+ var superSend=nil;
1870
+ var inlined=nil;
1871
+ (str=self['@stream']);
1872
+ ((($receiver = smalltalk.send(self['@messageSends'], "_includes_", [smalltalk.send(aNode, "_selector", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})]));
1873
+ (self['@stream']=smalltalk.send("", "_writeStream", []));
1874
+ smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]);
1875
+ (superSend=smalltalk.send(smalltalk.send(self['@stream'], "_contents", []), "__eq", ["super"]));
1876
+ (receiver=((($receiver = superSend).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "self";})() : (function(){return smalltalk.send(self['@stream'], "_contents", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "self";}), (function(){return smalltalk.send(self['@stream'], "_contents", []);})])));
1877
+ (self['@stream']=str);
1878
+ ((($receiver = smalltalk.send(self, "_performOptimizations", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [")"])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [")"])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [")"])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [")"])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [")"])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [")"])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [")"])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [")"])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));
1879
+ return self;},
1880
+ args: ["aNode"],
1881
+ source: "visitSendNode: aNode\x0a | str receiver superSend inlined |\x0a str := stream.\x0a (messageSends includes: aNode selector) ifFalse: [\x0a messageSends add: aNode selector].\x0a stream := '' writeStream.\x0a self visit: aNode receiver.\x0a superSend := stream contents = 'super'.\x0a receiver := superSend ifTrue: ['self'] ifFalse: [stream contents].\x0a stream := str.\x0a\x09\x0a\x09self performOptimizations \x0a\x09\x09ifTrue: [\x0a\x09\x09\x09(self inlineLiteral: aNode selector receiverNode: aNode receiver argumentNodes: aNode arguments) ifFalse: [\x0a\x09\x09\x09\x09(self inline: aNode selector receiver: receiver argumentNodes: aNode arguments)\x0a \x09\x09\x09ifTrue: [stream nextPutAll: ' : ', (self send: aNode selector to: '$receiver' arguments: aNode arguments superSend: superSend), ')']\x0a \x09\x09\x09ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]]]\x0a\x09\x09ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]",
1882
+ messageSends: ["ifFalse:", "includes:", "selector", "add:", "writeStream", "visit:", "receiver", "=", "contents", "ifTrue:ifFalse:", "performOptimizations", "inlineLiteral:receiverNode:argumentNodes:", "arguments", "inline:receiver:argumentNodes:", "nextPutAll:", ",", "send:to:arguments:superSend:"],
1883
+ referencedClasses: []
1884
+ }),
1885
+ smalltalk.FunCodeGenerator);
1886
+
1887
+ smalltalk.addMethod(
1888
+ "_visitSequenceNode_",
1889
+ smalltalk.method({
1890
+ selector: "visitSequenceNode:",
1891
+ category: 'visiting',
1892
+ fn: function (aNode) {
1893
+ var self=this;
1894
+ smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil;
1895
+ (temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", ["=nil;"])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);
1896
+ smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [";"]);}), (function(){return smalltalk.send(self['@stream'], "_lf", []);})]);
1897
+ return self;},
1898
+ args: ["aNode"],
1899
+ source: "visitSequenceNode: aNode\x0a\x09aNode temps do: [:each || temp |\x0a temp := self safeVariableNameFor: each.\x0a\x09 tempVariables add: temp.\x0a\x09 stream nextPutAll: 'var ', temp, '=nil;'; lf].\x0a\x09aNode nodes do: [:each |\x0a\x09 self visit: each.\x0a\x09 stream nextPutAll: ';']\x0a\x09 separatedBy: [stream lf]",
1900
+ messageSends: ["do:", "temps", "safeVariableNameFor:", "add:", "nextPutAll:", ",", "lf", "do:separatedBy:", "nodes", "visit:"],
1901
+ referencedClasses: []
1902
+ }),
1903
+ smalltalk.FunCodeGenerator);
1904
+
1905
+ smalltalk.addMethod(
1906
+ "_visitValueNode_",
1907
+ smalltalk.method({
1908
+ selector: "visitValueNode:",
1909
+ category: 'visiting',
1910
+ fn: function (aNode) {
1911
+ var self=this;
1912
+ smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_value", []), "_asJavascript", [])]);
1913
+ return self;},
1914
+ args: ["aNode"],
1915
+ source: "visitValueNode: aNode\x0a\x09stream nextPutAll: aNode value asJavascript",
1916
+ messageSends: ["nextPutAll:", "asJavascript", "value"],
1917
+ referencedClasses: []
1918
+ }),
1919
+ smalltalk.FunCodeGenerator);
1920
+
1921
+ smalltalk.addMethod(
1922
+ "_visitVariableNode_",
1923
+ smalltalk.method({
1924
+ selector: "visitVariableNode:",
1925
+ category: 'visiting',
1926
+ fn: function (aNode) {
1927
+ var self=this;
1928
+ var varName=nil;
1929
+ ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_currentClass", []), "_allInstanceVariableNames", []), "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send("self['@", "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", ["']"])]);})() : (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(typeof ", "__comma", [varName]), "__comma", [" == 'undefined' ? nil : "]), "__comma", [varName]), "__comma", [")"])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(typeof ", "__comma", [varName]), "__comma", [" == 'undefined' ? nil : "]), "__comma", [varName]), "__comma", [")"])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(smalltalk.getThisContext())"]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(smalltalk.getThisContext())"]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(typeof ", "__comma", [varName]), "__comma", [" == 'undefined' ? nil : "]), "__comma", [varName]), "__comma", [")"])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(typeof ", "__comma", [varName]), "__comma", [" == 'undefined' ? nil : "]), "__comma", [varName]), "__comma", [")"])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(smalltalk.getThisContext())"]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(smalltalk.getThisContext())"]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send("self['@", "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", ["']"])]);}), (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(typeof ", "__comma", [varName]), "__comma", [" == 'undefined' ? nil : "]), "__comma", [varName]), "__comma", [")"])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(typeof ", "__comma", [varName]), "__comma", [" == 'undefined' ? nil : "]), "__comma", [varName]), "__comma", [")"])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(smalltalk.getThisContext())"]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(smalltalk.getThisContext())"]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(typeof ", "__comma", [varName]), "__comma", [" == 'undefined' ? nil : "]), "__comma", [varName]), "__comma", [")"])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("(typeof ", "__comma", [varName]), "__comma", [" == 'undefined' ? nil : "]), "__comma", [varName]), "__comma", [")"])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(smalltalk.getThisContext())"]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["(smalltalk.getThisContext())"]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})]));
1930
+ return self;},
1931
+ args: ["aNode"],
1932
+ source: "visitVariableNode: aNode\x0a\x09| varName |\x0a\x09(self currentClass allInstanceVariableNames includes: aNode value) \x0a\x09\x09ifTrue: [stream nextPutAll: 'self[''@', aNode value, ''']']\x0a\x09\x09ifFalse: [\x0a \x09varName := self safeVariableNameFor: aNode value.\x0a\x09\x09\x09(self knownVariables includes: varName) \x0a \x09\x09ifFalse: [\x0a \x09unknownVariables add: aNode value.\x0a \x09aNode assigned \x0a \x09\x09ifTrue: [stream nextPutAll: varName]\x0a \x09\x09ifFalse: [stream nextPutAll: '(typeof ', varName, ' == ''undefined'' ? nil : ', varName, ')']]\x0a \x09\x09ifTrue: [\x0a \x09aNode value = 'thisContext'\x0a \x09\x09ifTrue: [stream nextPutAll: '(smalltalk.getThisContext())']\x0a \x09\x09\x09\x09ifFalse: [stream nextPutAll: varName]]]",
1933
+ messageSends: ["ifTrue:ifFalse:", "includes:", "allInstanceVariableNames", "currentClass", "value", "nextPutAll:", ",", "safeVariableNameFor:", "ifFalse:ifTrue:", "knownVariables", "add:", "assigned", "="],
1934
+ referencedClasses: []
1935
+ }),
1936
+ smalltalk.FunCodeGenerator);
1937
+
1938
+
1939
+ smalltalk.FunCodeGenerator.klass.iVarNames = ['performOptimizations'];
1940
+ smalltalk.addMethod(
1941
+ "_performOptimizations",
1942
+ smalltalk.method({
1943
+ selector: "performOptimizations",
1944
+ category: 'accessing',
1945
+ fn: function () {
1946
+ var self=this;
1947
+ return (($receiver = self['@performOptimizations']) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver;
1948
+ return self;},
1949
+ args: [],
1950
+ source: "performOptimizations\x0a\x09^performOptimizations ifNil: [true]",
1951
+ messageSends: ["ifNil:"],
1952
+ referencedClasses: []
1953
+ }),
1954
+ smalltalk.FunCodeGenerator.klass);
1955
+
1956
+ smalltalk.addMethod(
1957
+ "_performOptimizations_",
1958
+ smalltalk.method({
1959
+ selector: "performOptimizations:",
1960
+ category: 'accessing',
1961
+ fn: function (aBoolean) {
1962
+ var self=this;
1963
+ (self['@performOptimizations']=aBoolean);
1964
+ return self;},
1965
+ args: ["aBoolean"],
1966
+ source: "performOptimizations: aBoolean\x0a\x09performOptimizations := aBoolean",
1967
+ messageSends: [],
1968
+ referencedClasses: []
1969
+ }),
1970
+ smalltalk.FunCodeGenerator.klass);
1971
+
1972
+