resin 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/amber/bin/amberc +10 -350
  2. data/amber/js/Benchfib.deploy.js +80 -89
  3. data/amber/js/Benchfib.js +80 -89
  4. data/amber/js/Canvas.deploy.js +558 -545
  5. data/amber/js/Canvas.js +563 -545
  6. data/amber/js/Compiler-AST.deploy.js +431 -243
  7. data/amber/js/Compiler-AST.js +487 -244
  8. data/amber/js/Compiler-Core.deploy.js +201 -1045
  9. data/amber/js/Compiler-Core.js +208 -1207
  10. data/amber/js/Compiler-Exceptions.deploy.js +37 -18
  11. data/amber/js/Compiler-Exceptions.js +42 -18
  12. data/amber/js/Compiler-IR.deploy.js +1071 -774
  13. data/amber/js/Compiler-IR.js +1194 -848
  14. data/amber/js/Compiler-Inlining.deploy.js +395 -373
  15. data/amber/js/Compiler-Inlining.js +395 -373
  16. data/amber/js/Compiler-Interpreter.deploy.js +1202 -0
  17. data/amber/js/Compiler-Interpreter.js +1631 -0
  18. data/amber/js/Compiler-Semantic.deploy.js +695 -600
  19. data/amber/js/Compiler-Semantic.js +721 -611
  20. data/amber/js/Compiler-Tests.deploy.js +699 -376
  21. data/amber/js/Compiler-Tests.js +834 -381
  22. data/amber/js/Compiler.deploy.js +8563 -1805
  23. data/amber/js/Compiler.js +11476 -2633
  24. data/amber/js/Examples.deploy.js +29 -29
  25. data/amber/js/Examples.js +29 -29
  26. data/amber/js/IDE.deploy.js +3292 -2649
  27. data/amber/js/IDE.js +3318 -2710
  28. data/amber/js/Importer-Exporter.deploy.js +393 -349
  29. data/amber/js/Importer-Exporter.js +398 -354
  30. data/amber/js/Kernel-Announcements.deploy.js +53 -44
  31. data/amber/js/Kernel-Announcements.js +55 -44
  32. data/amber/js/Kernel-Classes.deploy.js +566 -368
  33. data/amber/js/Kernel-Classes.js +660 -402
  34. data/amber/js/Kernel-Collections.deploy.js +1149 -1098
  35. data/amber/js/Kernel-Collections.js +1183 -1116
  36. data/amber/js/Kernel-Exceptions.deploy.js +173 -75
  37. data/amber/js/Kernel-Exceptions.js +215 -77
  38. data/amber/js/Kernel-Methods.deploy.js +530 -313
  39. data/amber/js/Kernel-Methods.js +632 -338
  40. data/amber/js/Kernel-Objects.deploy.js +1734 -1577
  41. data/amber/js/Kernel-Objects.js +1867 -1654
  42. data/amber/js/Kernel-Tests.deploy.js +1416 -973
  43. data/amber/js/Kernel-Tests.js +1495 -981
  44. data/amber/js/Kernel-Transcript.deploy.js +23 -24
  45. data/amber/js/Kernel-Transcript.js +25 -26
  46. data/amber/js/SUnit-Tests.deploy.js +402 -0
  47. data/amber/js/SUnit-Tests.js +518 -0
  48. data/amber/js/SUnit.deploy.js +535 -237
  49. data/amber/js/SUnit.js +634 -246
  50. data/amber/js/amber.js +90 -53
  51. data/amber/js/boot.js +441 -255
  52. data/amber/js/init.js +1 -3
  53. data/amber/js/lib/CodeMirror/codemirror.css +3 -0
  54. data/amber/js/lib/CodeMirror/codemirror.js +104 -55
  55. data/amber/js/lib/peg-0.7.0.min.js +9 -0
  56. data/amber/js/parser.js +1504 -802
  57. data/amber/js/parser.pegjs +170 -165
  58. data/amber/st/Canvas.st +6 -0
  59. data/amber/st/Compiler-AST.st +54 -3
  60. data/amber/st/Compiler-Core.st +6 -551
  61. data/amber/st/Compiler-Exceptions.st +4 -0
  62. data/amber/st/Compiler-IR.st +205 -87
  63. data/amber/st/Compiler-Interpreter.st +597 -0
  64. data/amber/st/Compiler-Semantic.st +46 -21
  65. data/amber/st/Compiler-Tests.st +254 -7
  66. data/amber/st/Compiler.st +3172 -1541
  67. data/amber/st/IDE.st +57 -93
  68. data/amber/st/Importer-Exporter.st +4 -7
  69. data/amber/st/Kernel-Announcements.st +8 -0
  70. data/amber/st/Kernel-Classes.st +149 -40
  71. data/amber/st/Kernel-Collections.st +43 -32
  72. data/amber/st/Kernel-Exceptions.st +70 -1
  73. data/amber/st/Kernel-Methods.st +165 -27
  74. data/amber/st/Kernel-Objects.st +215 -140
  75. data/amber/st/Kernel-Tests.st +195 -10
  76. data/amber/st/Kernel-Transcript.st +1 -3
  77. data/amber/st/SUnit-Tests.st +186 -0
  78. data/amber/st/SUnit.st +186 -14
  79. data/bin/resin +6 -0
  80. data/lib/resin/cli.rb +19 -0
  81. metadata +41 -25
  82. data/amber/js/lib/peg-0.6.2.min.js +0 -2
  83. data/bin/resin-compile +0 -6
  84. data/bin/runresin +0 -12
@@ -0,0 +1,1631 @@
1
+ smalltalk.addPackage('Compiler-Interpreter', {});
2
+ smalltalk.addClass('AIContext', smalltalk.NodeVisitor, ['outerContext', 'pc', 'locals', 'method'], 'Compiler-Interpreter');
3
+ smalltalk.AIContext.comment="AIContext is like a `MethodContext`, used by the `ASTInterpreter`.\x0aUnlike a `MethodContext`, it is not read-only.\x0a\x0aWhen debugging, `AIContext` instances are created by copying the current `MethodContext` (thisContext)"
4
+ smalltalk.addMethod(
5
+ "_initializeFromMethodContext_",
6
+ smalltalk.method({
7
+ selector: "initializeFromMethodContext:",
8
+ category: 'initialization',
9
+ fn: function (aMethodContext){
10
+ var self=this;
11
+ return smalltalk.withContext(function($ctx1) {
12
+ _st(self)._pc_(_st(aMethodContext)._pc());
13
+ _st(self)._receiver_(_st(aMethodContext)._receiver());
14
+ _st(self)._method_(_st(aMethodContext)._method());
15
+ $1=_st(aMethodContext)._outerContext();
16
+ if(($receiver = $1) == nil || $receiver == undefined){
17
+ $1;
18
+ } else {
19
+ _st(self)._outerContext_(_st(_st(self)._class())._fromMethodContext_(_st(aMethodContext)._outerContext()));
20
+ };
21
+ _st(_st(aMethodContext)._locals())._keysAndValuesDo_((function(key,value){
22
+ return smalltalk.withContext(function($ctx2) {
23
+ }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1)})}));
24
+ return self}, function($ctx1) {$ctx1.fill(self,"initializeFromMethodContext:",{aMethodContext:aMethodContext}, smalltalk.AIContext)})},
25
+ args: ["aMethodContext"],
26
+ source: "initializeFromMethodContext: aMethodContext\x0a\x09self pc: aMethodContext pc.\x0a self receiver: aMethodContext receiver.\x0a self method: aMethodContext method.\x0a aMethodContext outerContext ifNotNil: [\x0a\x09\x09self outerContext: (self class fromMethodContext: aMethodContext outerContext) ].\x0a aMethodContext locals keysAndValuesDo: [ :key :value |\x0a \x09self locals at: key put: value ]\x0a ",
27
+ messageSends: ["pc:", "pc", "receiver:", "receiver", "method:", "method", "ifNotNil:", "outerContext:", "fromMethodContext:", "outerContext", "class", "keysAndValuesDo:", "at:put:", "locals"],
28
+ referencedClasses: []
29
+ }),
30
+ smalltalk.AIContext);
31
+
32
+ smalltalk.addMethod(
33
+ "_localAt_",
34
+ smalltalk.method({
35
+ selector: "localAt:",
36
+ category: 'accessing',
37
+ fn: function (aString){
38
+ var self=this;
39
+ return smalltalk.withContext(function($ctx1) {
40
+ $1=_st(_st(self)._locals())._at_ifAbsent_(aString,(function(){
41
+ return smalltalk.withContext(function($ctx2) {
42
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
43
+ return $1;
44
+ }, function($ctx1) {$ctx1.fill(self,"localAt:",{aString:aString}, smalltalk.AIContext)})},
45
+ args: ["aString"],
46
+ source: "localAt: aString\x0a\x09^ self locals at: aString ifAbsent: [ nil ]",
47
+ messageSends: ["at:ifAbsent:", "locals"],
48
+ referencedClasses: []
49
+ }),
50
+ smalltalk.AIContext);
51
+
52
+ smalltalk.addMethod(
53
+ "_localAt_put_",
54
+ smalltalk.method({
55
+ selector: "localAt:put:",
56
+ category: 'accessing',
57
+ fn: function (aString,anObject){
58
+ var self=this;
59
+ return smalltalk.withContext(function($ctx1) {
60
+ return self}, function($ctx1) {$ctx1.fill(self,"localAt:put:",{aString:aString,anObject:anObject}, smalltalk.AIContext)})},
61
+ args: ["aString", "anObject"],
62
+ source: "localAt: aString put: anObject\x0a\x09self locals at: aString put: anObject",
63
+ messageSends: ["at:put:", "locals"],
64
+ referencedClasses: []
65
+ }),
66
+ smalltalk.AIContext);
67
+
68
+ smalltalk.addMethod(
69
+ "_locals",
70
+ smalltalk.method({
71
+ selector: "locals",
72
+ category: 'accessing',
73
+ fn: function (){
74
+ var self=this;
75
+ return smalltalk.withContext(function($ctx1) {
76
+ $2=self["@locals"];
77
+ if(($receiver = $2) == nil || $receiver == undefined){
78
+ self["@locals"]=_st((smalltalk.Dictionary || Dictionary))._new();
79
+ $1=self["@locals"];
80
+ } else {
81
+ $1=$2;
82
+ };
83
+ return $1;
84
+ }, function($ctx1) {$ctx1.fill(self,"locals",{}, smalltalk.AIContext)})},
85
+ args: [],
86
+ source: "locals\x0a\x09^ locals ifNil: [ locals := Dictionary new ]",
87
+ messageSends: ["ifNil:", "new"],
88
+ referencedClasses: ["Dictionary"]
89
+ }),
90
+ smalltalk.AIContext);
91
+
92
+ smalltalk.addMethod(
93
+ "_method",
94
+ smalltalk.method({
95
+ selector: "method",
96
+ category: 'accessing',
97
+ fn: function (){
98
+ var self=this;
99
+ return smalltalk.withContext(function($ctx1) {
100
+ $1=self["@method"];
101
+ return $1;
102
+ }, function($ctx1) {$ctx1.fill(self,"method",{}, smalltalk.AIContext)})},
103
+ args: [],
104
+ source: "method\x0a\x09^ method",
105
+ messageSends: [],
106
+ referencedClasses: []
107
+ }),
108
+ smalltalk.AIContext);
109
+
110
+ smalltalk.addMethod(
111
+ "_method_",
112
+ smalltalk.method({
113
+ selector: "method:",
114
+ category: 'accessing',
115
+ fn: function (aCompiledMethod){
116
+ var self=this;
117
+ return smalltalk.withContext(function($ctx1) {
118
+ return self}, function($ctx1) {$ctx1.fill(self,"method:",{aCompiledMethod:aCompiledMethod}, smalltalk.AIContext)})},
119
+ args: ["aCompiledMethod"],
120
+ source: "method: aCompiledMethod\x0a\x09method := aCompiledMethod",
121
+ messageSends: [],
122
+ referencedClasses: []
123
+ }),
124
+ smalltalk.AIContext);
125
+
126
+ smalltalk.addMethod(
127
+ "_outerContext",
128
+ smalltalk.method({
129
+ selector: "outerContext",
130
+ category: 'accessing',
131
+ fn: function (){
132
+ var self=this;
133
+ return smalltalk.withContext(function($ctx1) {
134
+ $1=self["@outerContext"];
135
+ return $1;
136
+ }, function($ctx1) {$ctx1.fill(self,"outerContext",{}, smalltalk.AIContext)})},
137
+ args: [],
138
+ source: "outerContext\x0a\x09^ outerContext",
139
+ messageSends: [],
140
+ referencedClasses: []
141
+ }),
142
+ smalltalk.AIContext);
143
+
144
+ smalltalk.addMethod(
145
+ "_outerContext_",
146
+ smalltalk.method({
147
+ selector: "outerContext:",
148
+ category: 'accessing',
149
+ fn: function (anAIContext){
150
+ var self=this;
151
+ return smalltalk.withContext(function($ctx1) {
152
+ return self}, function($ctx1) {$ctx1.fill(self,"outerContext:",{anAIContext:anAIContext}, smalltalk.AIContext)})},
153
+ args: ["anAIContext"],
154
+ source: "outerContext: anAIContext\x0a\x09outerContext := anAIContext",
155
+ messageSends: [],
156
+ referencedClasses: []
157
+ }),
158
+ smalltalk.AIContext);
159
+
160
+ smalltalk.addMethod(
161
+ "_pc",
162
+ smalltalk.method({
163
+ selector: "pc",
164
+ category: 'accessing',
165
+ fn: function (){
166
+ var self=this;
167
+ return smalltalk.withContext(function($ctx1) {
168
+ $2=self["@pc"];
169
+ if(($receiver = $2) == nil || $receiver == undefined){
170
+ self["@pc"]=(0);
171
+ $1=self["@pc"];
172
+ } else {
173
+ $1=$2;
174
+ };
175
+ return $1;
176
+ }, function($ctx1) {$ctx1.fill(self,"pc",{}, smalltalk.AIContext)})},
177
+ args: [],
178
+ source: "pc\x0a\x09^ pc ifNil: [ pc := 0 ]",
179
+ messageSends: ["ifNil:"],
180
+ referencedClasses: []
181
+ }),
182
+ smalltalk.AIContext);
183
+
184
+ smalltalk.addMethod(
185
+ "_pc_",
186
+ smalltalk.method({
187
+ selector: "pc:",
188
+ category: 'accessing',
189
+ fn: function (anInteger){
190
+ var self=this;
191
+ return smalltalk.withContext(function($ctx1) {
192
+ return self}, function($ctx1) {$ctx1.fill(self,"pc:",{anInteger:anInteger}, smalltalk.AIContext)})},
193
+ args: ["anInteger"],
194
+ source: "pc: anInteger\x0a\x09pc := anInteger",
195
+ messageSends: [],
196
+ referencedClasses: []
197
+ }),
198
+ smalltalk.AIContext);
199
+
200
+ smalltalk.addMethod(
201
+ "_receiver",
202
+ smalltalk.method({
203
+ selector: "receiver",
204
+ category: 'accessing',
205
+ fn: function (){
206
+ var self=this;
207
+ return smalltalk.withContext(function($ctx1) {
208
+ $1=_st(self)._localAt_("self");
209
+ return $1;
210
+ }, function($ctx1) {$ctx1.fill(self,"receiver",{}, smalltalk.AIContext)})},
211
+ args: [],
212
+ source: "receiver\x0a\x09^ self localAt: 'self'",
213
+ messageSends: ["localAt:"],
214
+ referencedClasses: []
215
+ }),
216
+ smalltalk.AIContext);
217
+
218
+ smalltalk.addMethod(
219
+ "_receiver_",
220
+ smalltalk.method({
221
+ selector: "receiver:",
222
+ category: 'accessing',
223
+ fn: function (anObject){
224
+ var self=this;
225
+ return smalltalk.withContext(function($ctx1) {
226
+ return self}, function($ctx1) {$ctx1.fill(self,"receiver:",{anObject:anObject}, smalltalk.AIContext)})},
227
+ args: ["anObject"],
228
+ source: "receiver: anObject\x0a\x09self localAt: 'self' put: anObject",
229
+ messageSends: ["localAt:put:"],
230
+ referencedClasses: []
231
+ }),
232
+ smalltalk.AIContext);
233
+
234
+ smalltalk.addMethod(
235
+ "_selector",
236
+ smalltalk.method({
237
+ selector: "selector",
238
+ category: 'accessing',
239
+ fn: function (){
240
+ var self=this;
241
+ return smalltalk.withContext(function($ctx1) {
242
+ $2=_st(self)._metod();
243
+ if(($receiver = $2) == nil || $receiver == undefined){
244
+ $1=$2;
245
+ } else {
246
+ $1=_st(_st(self)._method())._selector();
247
+ };
248
+ return $1;
249
+ }, function($ctx1) {$ctx1.fill(self,"selector",{}, smalltalk.AIContext)})},
250
+ args: [],
251
+ source: "selector\x0a\x09^ self metod\x0a \x09ifNotNil: [ self method selector ]",
252
+ messageSends: ["ifNotNil:", "selector", "method", "metod"],
253
+ referencedClasses: []
254
+ }),
255
+ smalltalk.AIContext);
256
+
257
+
258
+ smalltalk.addMethod(
259
+ "_fromMethodContext_",
260
+ smalltalk.method({
261
+ selector: "fromMethodContext:",
262
+ category: 'instance creation',
263
+ fn: function (aMethodContext){
264
+ var self=this;
265
+ return smalltalk.withContext(function($ctx1) {
266
+ $2=_st(self)._new();
267
+ _st($2)._initializeFromMethodContext_(aMethodContext);
268
+ $3=_st($2)._yourself();
269
+ $1=$3;
270
+ return $1;
271
+ }, function($ctx1) {$ctx1.fill(self,"fromMethodContext:",{aMethodContext:aMethodContext}, smalltalk.AIContext.klass)})},
272
+ args: ["aMethodContext"],
273
+ source: "fromMethodContext: aMethodContext\x0a\x09^ self new\x0a \x09initializeFromMethodContext: aMethodContext;\x0a yourself",
274
+ messageSends: ["initializeFromMethodContext:", "new", "yourself"],
275
+ referencedClasses: []
276
+ }),
277
+ smalltalk.AIContext.klass);
278
+
279
+
280
+ smalltalk.addClass('ASTDebugger', smalltalk.Object, ['interpreter', 'context'], 'Compiler-Interpreter');
281
+ smalltalk.ASTDebugger.comment="ASTDebugger is a debugger to Amber.\x0aIt uses an AST interpreter to step through the code.\x0a\x0aASTDebugger instances are created from a `MethodContext` with `ASTDebugger class >> context:`.\x0aThey hold an `AIContext` instance internally, recursive copy of the `MethodContext`.\x0a\x0aUse the methods of the 'stepping' protocol to do stepping."
282
+ smalltalk.addMethod(
283
+ "_buildAST",
284
+ smalltalk.method({
285
+ selector: "buildAST",
286
+ category: 'initialization',
287
+ fn: function (){
288
+ var self=this;
289
+ var ast;
290
+ return smalltalk.withContext(function($ctx1) {
291
+ ast=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._parse_(_st(_st(self)._method())._source());
292
+ _st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_(_st(_st(_st(self)._context())._receiver())._class()))._visit_(ast);
293
+ $1=ast;
294
+ return $1;
295
+ }, function($ctx1) {$ctx1.fill(self,"buildAST",{ast:ast}, smalltalk.ASTDebugger)})},
296
+ args: [],
297
+ source: "buildAST\x0a\x09\x22Build the AST tree from the method source code.\x0a The AST is annotated with a SemanticAnalyzer, \x0a to know the semantics and bindings of each node needed for later debugging\x22\x0a \x0a | ast |\x0a \x0a ast := Smalltalk current parse: self method source.\x0a (SemanticAnalyzer on: self context receiver class)\x0a \x09visit: ast. \x0a \x0a ^ ast",
298
+ messageSends: ["parse:", "source", "method", "current", "visit:", "on:", "class", "receiver", "context"],
299
+ referencedClasses: ["Smalltalk", "SemanticAnalyzer"]
300
+ }),
301
+ smalltalk.ASTDebugger);
302
+
303
+ smalltalk.addMethod(
304
+ "_context",
305
+ smalltalk.method({
306
+ selector: "context",
307
+ category: 'accessing',
308
+ fn: function (){
309
+ var self=this;
310
+ return smalltalk.withContext(function($ctx1) {
311
+ $1=self["@context"];
312
+ return $1;
313
+ }, function($ctx1) {$ctx1.fill(self,"context",{}, smalltalk.ASTDebugger)})},
314
+ args: [],
315
+ source: "context\x0a\x09^ context",
316
+ messageSends: [],
317
+ referencedClasses: []
318
+ }),
319
+ smalltalk.ASTDebugger);
320
+
321
+ smalltalk.addMethod(
322
+ "_context_",
323
+ smalltalk.method({
324
+ selector: "context:",
325
+ category: 'accessing',
326
+ fn: function (aContext){
327
+ var self=this;
328
+ return smalltalk.withContext(function($ctx1) {
329
+ return self}, function($ctx1) {$ctx1.fill(self,"context:",{aContext:aContext}, smalltalk.ASTDebugger)})},
330
+ args: ["aContext"],
331
+ source: "context: aContext\x0a\x09context := AIContext new.",
332
+ messageSends: ["new"],
333
+ referencedClasses: ["AIContext"]
334
+ }),
335
+ smalltalk.ASTDebugger);
336
+
337
+ smalltalk.addMethod(
338
+ "_defaultInterpreterClass",
339
+ smalltalk.method({
340
+ selector: "defaultInterpreterClass",
341
+ category: 'defaults',
342
+ fn: function (){
343
+ var self=this;
344
+ return smalltalk.withContext(function($ctx1) {
345
+ $1=(smalltalk.ASTSteppingInterpreter || ASTSteppingInterpreter);
346
+ return $1;
347
+ }, function($ctx1) {$ctx1.fill(self,"defaultInterpreterClass",{}, smalltalk.ASTDebugger)})},
348
+ args: [],
349
+ source: "defaultInterpreterClass\x0a\x09^ ASTSteppingInterpreter",
350
+ messageSends: [],
351
+ referencedClasses: ["ASTSteppingInterpreter"]
352
+ }),
353
+ smalltalk.ASTDebugger);
354
+
355
+ smalltalk.addMethod(
356
+ "_initializeInterpreter",
357
+ smalltalk.method({
358
+ selector: "initializeInterpreter",
359
+ category: 'initialization',
360
+ fn: function (){
361
+ var self=this;
362
+ return smalltalk.withContext(function($ctx1) {
363
+ return self}, function($ctx1) {$ctx1.fill(self,"initializeInterpreter",{}, smalltalk.ASTDebugger)})},
364
+ args: [],
365
+ source: "initializeInterpreter\x0a\x09self interpreter interpret: self buildAST nodes first",
366
+ messageSends: ["interpret:", "first", "nodes", "buildAST", "interpreter"],
367
+ referencedClasses: []
368
+ }),
369
+ smalltalk.ASTDebugger);
370
+
371
+ smalltalk.addMethod(
372
+ "_initializeWithContext_",
373
+ smalltalk.method({
374
+ selector: "initializeWithContext:",
375
+ category: 'initialization',
376
+ fn: function (aMethodContext){
377
+ var self=this;
378
+ return smalltalk.withContext(function($ctx1) {
379
+ _st(self)._initializeInterpreter();
380
+ return self}, function($ctx1) {$ctx1.fill(self,"initializeWithContext:",{aMethodContext:aMethodContext}, smalltalk.ASTDebugger)})},
381
+ args: ["aMethodContext"],
382
+ source: "initializeWithContext: aMethodContext\x0a\x09\x22TODO: do we need to handle block contexts?\x22\x0a \x0a self context: (AIContext fromMethodContext: aMethodContext).\x0a self initializeInterpreter",
383
+ messageSends: ["context:", "fromMethodContext:", "initializeInterpreter"],
384
+ referencedClasses: ["AIContext"]
385
+ }),
386
+ smalltalk.ASTDebugger);
387
+
388
+ smalltalk.addMethod(
389
+ "_interpreter",
390
+ smalltalk.method({
391
+ selector: "interpreter",
392
+ category: 'accessing',
393
+ fn: function (){
394
+ var self=this;
395
+ return smalltalk.withContext(function($ctx1) {
396
+ $2=self["@interpreter"];
397
+ if(($receiver = $2) == nil || $receiver == undefined){
398
+ self["@interpreter"]=_st(_st(self)._defaultInterpreterClass())._new();
399
+ $1=self["@interpreter"];
400
+ } else {
401
+ $1=$2;
402
+ };
403
+ return $1;
404
+ }, function($ctx1) {$ctx1.fill(self,"interpreter",{}, smalltalk.ASTDebugger)})},
405
+ args: [],
406
+ source: "interpreter\x0a\x09^ interpreter ifNil: [ interpreter := self defaultInterpreterClass new ]",
407
+ messageSends: ["ifNil:", "new", "defaultInterpreterClass"],
408
+ referencedClasses: []
409
+ }),
410
+ smalltalk.ASTDebugger);
411
+
412
+ smalltalk.addMethod(
413
+ "_interpreter_",
414
+ smalltalk.method({
415
+ selector: "interpreter:",
416
+ category: 'accessing',
417
+ fn: function (anInterpreter){
418
+ var self=this;
419
+ return smalltalk.withContext(function($ctx1) {
420
+ return self}, function($ctx1) {$ctx1.fill(self,"interpreter:",{anInterpreter:anInterpreter}, smalltalk.ASTDebugger)})},
421
+ args: ["anInterpreter"],
422
+ source: "interpreter: anInterpreter\x0a\x09interpreter := anInterpreter",
423
+ messageSends: [],
424
+ referencedClasses: []
425
+ }),
426
+ smalltalk.ASTDebugger);
427
+
428
+ smalltalk.addMethod(
429
+ "_method",
430
+ smalltalk.method({
431
+ selector: "method",
432
+ category: 'accessing',
433
+ fn: function (){
434
+ var self=this;
435
+ return smalltalk.withContext(function($ctx1) {
436
+ $1=_st(_st(self)._context())._method();
437
+ return $1;
438
+ }, function($ctx1) {$ctx1.fill(self,"method",{}, smalltalk.ASTDebugger)})},
439
+ args: [],
440
+ source: "method\x0a\x09^ self context method",
441
+ messageSends: ["method", "context"],
442
+ referencedClasses: []
443
+ }),
444
+ smalltalk.ASTDebugger);
445
+
446
+ smalltalk.addMethod(
447
+ "_restart",
448
+ smalltalk.method({
449
+ selector: "restart",
450
+ category: 'stepping',
451
+ fn: function (){
452
+ var self=this;
453
+ return smalltalk.withContext(function($ctx1) {
454
+ return self}, function($ctx1) {$ctx1.fill(self,"restart",{}, smalltalk.ASTDebugger)})},
455
+ args: [],
456
+ source: "restart\x0a\x09self shouldBeImplemented",
457
+ messageSends: ["shouldBeImplemented"],
458
+ referencedClasses: []
459
+ }),
460
+ smalltalk.ASTDebugger);
461
+
462
+ smalltalk.addMethod(
463
+ "_resume",
464
+ smalltalk.method({
465
+ selector: "resume",
466
+ category: 'stepping',
467
+ fn: function (){
468
+ var self=this;
469
+ return smalltalk.withContext(function($ctx1) {
470
+ return self}, function($ctx1) {$ctx1.fill(self,"resume",{}, smalltalk.ASTDebugger)})},
471
+ args: [],
472
+ source: "resume\x0a\x09self shouldBeImplemented",
473
+ messageSends: ["shouldBeImplemented"],
474
+ referencedClasses: []
475
+ }),
476
+ smalltalk.ASTDebugger);
477
+
478
+ smalltalk.addMethod(
479
+ "_step",
480
+ smalltalk.method({
481
+ selector: "step",
482
+ category: 'stepping',
483
+ fn: function (){
484
+ var self=this;
485
+ return smalltalk.withContext(function($ctx1) {
486
+ return smalltalk.withContext(function($ctx2) {
487
+ return smalltalk.withContext(function($ctx3) {
488
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx1)})})))._or_((function(){
489
+ return smalltalk.withContext(function($ctx3) {
490
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx1)})}));
491
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}))._whileFalse_((function(){
492
+ return smalltalk.withContext(function($ctx2) {
493
+ return _st(self)._step();
494
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
495
+ return self}, function($ctx1) {$ctx1.fill(self,"step",{}, smalltalk.ASTDebugger)})},
496
+ args: [],
497
+ source: "step\x0a\x09\x22The ASTSteppingInterpreter stops at each node interpretation. \x0a One step will interpret nodes until:\x0a - we get at the end\x0a - the next node is a stepping node (send, assignment, etc.)\x22\x0a \x0a\x09[ (self interpreter nextNode notNil and: [ self interpreter nextNode stopOnStepping ])\x0a\x09\x09or: [ self interpreter atEnd not ] ] \x0a \x09\x09\x09whileFalse: [\x0a\x09\x09\x09\x09self interpreter step. \x0a self step ]",
498
+ messageSends: ["whileFalse:", "step", "interpreter", "or:", "not", "atEnd", "and:", "stopOnStepping", "nextNode", "notNil"],
499
+ referencedClasses: []
500
+ }),
501
+ smalltalk.ASTDebugger);
502
+
503
+ smalltalk.addMethod(
504
+ "_stepInto",
505
+ smalltalk.method({
506
+ selector: "stepInto",
507
+ category: 'stepping',
508
+ fn: function (){
509
+ var self=this;
510
+ return smalltalk.withContext(function($ctx1) {
511
+ return self}, function($ctx1) {$ctx1.fill(self,"stepInto",{}, smalltalk.ASTDebugger)})},
512
+ args: [],
513
+ source: "stepInto\x0a\x09self shouldBeImplemented",
514
+ messageSends: ["shouldBeImplemented"],
515
+ referencedClasses: []
516
+ }),
517
+ smalltalk.ASTDebugger);
518
+
519
+ smalltalk.addMethod(
520
+ "_stepOver",
521
+ smalltalk.method({
522
+ selector: "stepOver",
523
+ category: 'stepping',
524
+ fn: function (){
525
+ var self=this;
526
+ return smalltalk.withContext(function($ctx1) {
527
+ return self}, function($ctx1) {$ctx1.fill(self,"stepOver",{}, smalltalk.ASTDebugger)})},
528
+ args: [],
529
+ source: "stepOver\x0a\x09self step",
530
+ messageSends: ["step"],
531
+ referencedClasses: []
532
+ }),
533
+ smalltalk.ASTDebugger);
534
+
535
+
536
+ smalltalk.addMethod(
537
+ "_context_",
538
+ smalltalk.method({
539
+ selector: "context:",
540
+ category: 'instance creation',
541
+ fn: function (aMethodContext){
542
+ var self=this;
543
+ return smalltalk.withContext(function($ctx1) {
544
+ $2=_st(self)._new();
545
+ _st($2)._initializeWithContext_(aMethodContext);
546
+ $3=_st($2)._yourself();
547
+ $1=$3;
548
+ return $1;
549
+ }, function($ctx1) {$ctx1.fill(self,"context:",{aMethodContext:aMethodContext}, smalltalk.ASTDebugger.klass)})},
550
+ args: ["aMethodContext"],
551
+ source: "context: aMethodContext\x0a\x09^ self new\x0a \x09initializeWithContext: aMethodContext;\x0a yourself",
552
+ messageSends: ["initializeWithContext:", "new", "yourself"],
553
+ referencedClasses: []
554
+ }),
555
+ smalltalk.ASTDebugger.klass);
556
+
557
+
558
+ smalltalk.addClass('ASTInterpreter', smalltalk.Object, ['currentNode', 'context', 'shouldReturn', 'result'], 'Compiler-Interpreter');
559
+ smalltalk.ASTInterpreter.comment="ASTIntepreter is like a `NodeVisitor`, interpreting nodes one after each other.\x0aIt is built using Continuation Passing Style for stepping purposes.\x0a\x0aUsage example:\x0a\x0a | ast interpreter |\x0a ast := Smalltalk current parse: 'foo 1+2+4'.\x0a (SemanticAnalyzer on: Object) visit: ast.\x0a\x0a ASTInterpreter new\x0a interpret: ast nodes first;\x0a result \x22Answers 7\x22"
560
+ smalltalk.addMethod(
561
+ "_assign_to_",
562
+ smalltalk.method({
563
+ selector: "assign:to:",
564
+ category: 'private',
565
+ fn: function (aNode,anObject){
566
+ var self=this;
567
+ return smalltalk.withContext(function($ctx1) {
568
+ $2=_st(_st(aNode)._binding())._isInstanceVar();
569
+ if(smalltalk.assert($2)){
570
+ $1=_st(_st(_st(self)._context())._receiver())._instVarAt_put_(_st(aNode)._value(),anObject);
571
+ } else {
572
+ $1=_st(_st(self)._context())._localAt_put_(_st(aNode)._value(),anObject);
573
+ };
574
+ return $1;
575
+ }, function($ctx1) {$ctx1.fill(self,"assign:to:",{aNode:aNode,anObject:anObject}, smalltalk.ASTInterpreter)})},
576
+ args: ["aNode", "anObject"],
577
+ source: "assign: aNode to: anObject\x0a\x09^ aNode binding isInstanceVar \x0a \x09ifTrue: [ self context receiver instVarAt: aNode value put: anObject ]\x0a \x09ifFalse: [ self context localAt: aNode value put: anObject ]",
578
+ messageSends: ["ifTrue:ifFalse:", "instVarAt:put:", "value", "receiver", "context", "localAt:put:", "isInstanceVar", "binding"],
579
+ referencedClasses: []
580
+ }),
581
+ smalltalk.ASTInterpreter);
582
+
583
+ smalltalk.addMethod(
584
+ "_context",
585
+ smalltalk.method({
586
+ selector: "context",
587
+ category: 'accessing',
588
+ fn: function (){
589
+ var self=this;
590
+ return smalltalk.withContext(function($ctx1) {
591
+ $2=self["@context"];
592
+ if(($receiver = $2) == nil || $receiver == undefined){
593
+ self["@context"]=_st((smalltalk.AIContext || AIContext))._new();
594
+ $1=self["@context"];
595
+ } else {
596
+ $1=$2;
597
+ };
598
+ return $1;
599
+ }, function($ctx1) {$ctx1.fill(self,"context",{}, smalltalk.ASTInterpreter)})},
600
+ args: [],
601
+ source: "context\x0a\x09^ context ifNil: [ context := AIContext new ]",
602
+ messageSends: ["ifNil:", "new"],
603
+ referencedClasses: ["AIContext"]
604
+ }),
605
+ smalltalk.ASTInterpreter);
606
+
607
+ smalltalk.addMethod(
608
+ "_context_",
609
+ smalltalk.method({
610
+ selector: "context:",
611
+ category: 'accessing',
612
+ fn: function (anAIContext){
613
+ var self=this;
614
+ return smalltalk.withContext(function($ctx1) {
615
+ return self}, function($ctx1) {$ctx1.fill(self,"context:",{anAIContext:anAIContext}, smalltalk.ASTInterpreter)})},
616
+ args: ["anAIContext"],
617
+ source: "context: anAIContext\x0a\x09context := anAIContext",
618
+ messageSends: [],
619
+ referencedClasses: []
620
+ }),
621
+ smalltalk.ASTInterpreter);
622
+
623
+ smalltalk.addMethod(
624
+ "_continue_value_",
625
+ smalltalk.method({
626
+ selector: "continue:value:",
627
+ category: 'private',
628
+ fn: function (aBlock,anObject){
629
+ var self=this;
630
+ return smalltalk.withContext(function($ctx1) {
631
+ _st(aBlock)._value_(anObject);
632
+ return self}, function($ctx1) {$ctx1.fill(self,"continue:value:",{aBlock:aBlock,anObject:anObject}, smalltalk.ASTInterpreter)})},
633
+ args: ["aBlock", "anObject"],
634
+ source: "continue: aBlock value: anObject\x0a\x09result := anObject.\x0a aBlock value: anObject",
635
+ messageSends: ["value:"],
636
+ referencedClasses: []
637
+ }),
638
+ smalltalk.ASTInterpreter);
639
+
640
+ smalltalk.addMethod(
641
+ "_currentNode",
642
+ smalltalk.method({
643
+ selector: "currentNode",
644
+ category: 'accessing',
645
+ fn: function (){
646
+ var self=this;
647
+ return smalltalk.withContext(function($ctx1) {
648
+ $1=self["@currentNode"];
649
+ return $1;
650
+ }, function($ctx1) {$ctx1.fill(self,"currentNode",{}, smalltalk.ASTInterpreter)})},
651
+ args: [],
652
+ source: "currentNode\x0a\x09^ currentNode",
653
+ messageSends: [],
654
+ referencedClasses: []
655
+ }),
656
+ smalltalk.ASTInterpreter);
657
+
658
+ smalltalk.addMethod(
659
+ "_eval_",
660
+ smalltalk.method({
661
+ selector: "eval:",
662
+ category: 'private',
663
+ fn: function (aString){
664
+ var self=this;
665
+ var source,function_;
666
+ return smalltalk.withContext(function($ctx1) {
667
+ source=_st((smalltalk.String || String))._streamContents_((function(str){
668
+ return smalltalk.withContext(function($ctx2) {
669
+ _st(_st(_st(_st(self)._context())._locals())._keys())._do_separatedBy_((function(each){
670
+ return smalltalk.withContext(function($ctx3) {
671
+ }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx1)})}),(function(){
672
+ return smalltalk.withContext(function($ctx3) {
673
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx1)})}));
674
+ $1=str;
675
+ _st($1)._nextPutAll_("){ return (function() {");
676
+ _st($1)._nextPutAll_(aString);
677
+ $2=_st($1)._nextPutAll_("})() })");
678
+ return $2;
679
+ }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1)})}));
680
+ function_=_st(_st((smalltalk.Compiler || Compiler))._new())._eval_(source);
681
+ $3=_st(function_)._valueWithPossibleArguments_(_st(_st(_st(self)._context())._locals())._values());
682
+ return $3;
683
+ }, function($ctx1) {$ctx1.fill(self,"eval:",{aString:aString,source:source,function_:function_}, smalltalk.ASTInterpreter)})},
684
+ args: ["aString"],
685
+ source: "eval: aString\x0a\x09\x22Evaluate aString as JS source inside an JS function. \x0a aString is not sandboxed.\x22\x0a \x0a | source function |\x0a \x0a source := String streamContents: [ :str |\x0a \x09str nextPutAll: '(function('.\x0a self context locals keys \x0a \x09do: [ :each | str nextPutAll: each ]\x0a \x09separatedBy: [ str nextPutAll: ',' ].\x0a str \x0a \x09nextPutAll: '){ return (function() {';\x0a \x09nextPutAll: aString;\x0a nextPutAll: '})() })' ].\x0a \x0a\x09function := Compiler new eval: source.\x0a \x0a\x09^ function valueWithPossibleArguments: self context locals values",
686
+ messageSends: ["streamContents:", "nextPutAll:", "do:separatedBy:", "keys", "locals", "context", "eval:", "new", "valueWithPossibleArguments:", "values"],
687
+ referencedClasses: ["String", "Compiler"]
688
+ }),
689
+ smalltalk.ASTInterpreter);
690
+
691
+ smalltalk.addMethod(
692
+ "_initialize",
693
+ smalltalk.method({
694
+ selector: "initialize",
695
+ category: 'initialization',
696
+ fn: function (){
697
+ var self=this;
698
+ return smalltalk.withContext(function($ctx1) {
699
+ self["@shouldReturn"]=false;
700
+ return self}, function($ctx1) {$ctx1.fill(self,"initialize",{}, smalltalk.ASTInterpreter)})},
701
+ args: [],
702
+ source: "initialize\x0a\x09super initialize.\x0a shouldReturn := false",
703
+ messageSends: ["initialize"],
704
+ referencedClasses: []
705
+ }),
706
+ smalltalk.ASTInterpreter);
707
+
708
+ smalltalk.addMethod(
709
+ "_interpret_",
710
+ smalltalk.method({
711
+ selector: "interpret:",
712
+ category: 'interpreting',
713
+ fn: function (aNode){
714
+ var self=this;
715
+ return smalltalk.withContext(function($ctx1) {
716
+ _st(self)._interpret_continue_(aNode,(function(value){
717
+ return smalltalk.withContext(function($ctx2) {
718
+ return self["@result"];
719
+ }, function($ctx2) {$ctx2.fillBlock({value:value},$ctx1)})}));
720
+ return self}, function($ctx1) {$ctx1.fill(self,"interpret:",{aNode:aNode}, smalltalk.ASTInterpreter)})},
721
+ args: ["aNode"],
722
+ source: "interpret: aNode\x0a\x09shouldReturn := false.\x0a self interpret: aNode continue: [ :value |\x0a \x09result := value ]",
723
+ messageSends: ["interpret:continue:"],
724
+ referencedClasses: []
725
+ }),
726
+ smalltalk.ASTInterpreter);
727
+
728
+ smalltalk.addMethod(
729
+ "_interpret_continue_",
730
+ smalltalk.method({
731
+ selector: "interpret:continue:",
732
+ category: 'interpreting',
733
+ fn: function (aNode,aBlock){
734
+ var self=this;
735
+ return smalltalk.withContext(function($ctx1) {
736
+ $1=self["@shouldReturn"];
737
+ if(smalltalk.assert($1)){
738
+ $2=self;
739
+ return $2;
740
+ };
741
+ $3=_st(aNode)._isNode();
742
+ if(smalltalk.assert($3)){
743
+ self["@currentNode"]=aNode;
744
+ self["@currentNode"];
745
+ _st(self)._interpretNode_continue_(aNode,(function(value){
746
+ return smalltalk.withContext(function($ctx2) {
747
+ }, function($ctx2) {$ctx2.fillBlock({value:value},$ctx1)})}));
748
+ } else {
749
+ _st(self)._continue_value_(aBlock,aNode);
750
+ };
751
+ return self}, function($ctx1) {$ctx1.fill(self,"interpret:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
752
+ args: ["aNode", "aBlock"],
753
+ source: "interpret: aNode continue: aBlock\x0a\x09shouldReturn ifTrue: [ ^ self ].\x0a\x0a\x09aNode isNode \x0a \x09ifTrue: [ \x09\x0a \x09currentNode := aNode.\x0a self interpretNode: aNode continue: [ :value |\x0a \x09\x09\x09\x09self continue: aBlock value: value ] ]\x0a ifFalse: [ self continue: aBlock value: aNode ]",
754
+ messageSends: ["ifTrue:", "ifTrue:ifFalse:", "interpretNode:continue:", "continue:value:", "isNode"],
755
+ referencedClasses: []
756
+ }),
757
+ smalltalk.ASTInterpreter);
758
+
759
+ smalltalk.addMethod(
760
+ "_interpretAll_continue_",
761
+ smalltalk.method({
762
+ selector: "interpretAll:continue:",
763
+ category: 'private',
764
+ fn: function (aCollection,aBlock){
765
+ var self=this;
766
+ return smalltalk.withContext(function($ctx1) {
767
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretAll:continue:",{aCollection:aCollection,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
768
+ args: ["aCollection", "aBlock"],
769
+ source: "interpretAll: aCollection continue: aBlock\x0a\x09self \x0a \x09interpretAll: aCollection \x0a continue: aBlock \x0a result: OrderedCollection new",
770
+ messageSends: ["interpretAll:continue:result:", "new"],
771
+ referencedClasses: ["OrderedCollection"]
772
+ }),
773
+ smalltalk.ASTInterpreter);
774
+
775
+ smalltalk.addMethod(
776
+ "_interpretAll_continue_result_",
777
+ smalltalk.method({
778
+ selector: "interpretAll:continue:result:",
779
+ category: 'private',
780
+ fn: function (nodes,aBlock,aCollection){
781
+ var self=this;
782
+ return smalltalk.withContext(function($ctx1) {
783
+ $1=_st(nodes)._isEmpty();
784
+ if(smalltalk.assert($1)){
785
+ _st(self)._continue_value_(aBlock,aCollection);
786
+ } else {
787
+ _st(self)._interpret_continue_(_st(nodes)._first(),(function(value){
788
+ return smalltalk.withContext(function($ctx2) {
789
+ }, function($ctx2) {$ctx2.fillBlock({value:value},$ctx1)})}));
790
+ };
791
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretAll:continue:result:",{nodes:nodes,aBlock:aBlock,aCollection:aCollection}, smalltalk.ASTInterpreter)})},
792
+ args: ["nodes", "aBlock", "aCollection"],
793
+ source: "interpretAll: nodes continue: aBlock result: aCollection\x0a\x09nodes isEmpty \x0a \x09ifTrue: [ self continue: aBlock value: aCollection ]\x0a \x09ifFalse: [\x0a \x09\x09self interpret: nodes first continue: [:value |\x0a \x09\x09\x09self \x0a \x09interpretAll: nodes allButFirst \x0a continue: aBlock\x0a \x09\x09\x09\x09\x09result: aCollection, { value } ] ]",
794
+ messageSends: ["ifTrue:ifFalse:", "continue:value:", "interpret:continue:", "first", "interpretAll:continue:result:", "allButFirst", ",", "isEmpty"],
795
+ referencedClasses: []
796
+ }),
797
+ smalltalk.ASTInterpreter);
798
+
799
+ smalltalk.addMethod(
800
+ "_interpretAssignmentNode_continue_",
801
+ smalltalk.method({
802
+ selector: "interpretAssignmentNode:continue:",
803
+ category: 'interpreting',
804
+ fn: function (aNode,aBlock){
805
+ var self=this;
806
+ return smalltalk.withContext(function($ctx1) {
807
+ return smalltalk.withContext(function($ctx2) {
808
+ }, function($ctx2) {$ctx2.fillBlock({value:value},$ctx1)})}));
809
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretAssignmentNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
810
+ args: ["aNode", "aBlock"],
811
+ source: "interpretAssignmentNode: aNode continue: aBlock\x0a\x09self interpret: aNode right continue: [ :value |\x0a \x09self \x0a \x09continue: aBlock\x0a value: (self assign: aNode left to: value) ]",
812
+ messageSends: ["interpret:continue:", "right", "continue:value:", "assign:to:", "left"],
813
+ referencedClasses: []
814
+ }),
815
+ smalltalk.ASTInterpreter);
816
+
817
+ smalltalk.addMethod(
818
+ "_interpretBlockNode_continue_",
819
+ smalltalk.method({
820
+ selector: "interpretBlockNode:continue:",
821
+ category: 'interpreting',
822
+ fn: function (aNode,aBlock){
823
+ var self=this;
824
+ return smalltalk.withContext(function($ctx1) {
825
+ _st(self)._continue_value_(aBlock,(function(){
826
+ return smalltalk.withContext(function($ctx2) {
827
+ _st($1)._interpret_(_st(_st(aNode)._nodes())._first());
828
+ $2=_st($1)._result();
829
+ return $2;
830
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
831
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretBlockNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
832
+ args: ["aNode", "aBlock"],
833
+ source: "interpretBlockNode: aNode continue: aBlock\x0a\x09\x22TODO: Context should be set\x22\x0a \x0a self \x0a \x09continue: aBlock \x0a value: [ self interpret: aNode nodes first; result ]",
834
+ messageSends: ["continue:value:", "interpret:", "first", "nodes", "result"],
835
+ referencedClasses: []
836
+ }),
837
+ smalltalk.ASTInterpreter);
838
+
839
+ smalltalk.addMethod(
840
+ "_interpretBlockSequenceNode_continue_",
841
+ smalltalk.method({
842
+ selector: "interpretBlockSequenceNode:continue:",
843
+ category: 'interpreting',
844
+ fn: function (aNode,aBlock){
845
+ var self=this;
846
+ return smalltalk.withContext(function($ctx1) {
847
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretBlockSequenceNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
848
+ args: ["aNode", "aBlock"],
849
+ source: "interpretBlockSequenceNode: aNode continue: aBlock\x0a\x09self interpretSequenceNode: aNode continue: aBlock",
850
+ messageSends: ["interpretSequenceNode:continue:"],
851
+ referencedClasses: []
852
+ }),
853
+ smalltalk.ASTInterpreter);
854
+
855
+ smalltalk.addMethod(
856
+ "_interpretCascadeNode_continue_",
857
+ smalltalk.method({
858
+ selector: "interpretCascadeNode:continue:",
859
+ category: 'interpreting',
860
+ fn: function (aNode,aBlock){
861
+ var self=this;
862
+ return smalltalk.withContext(function($ctx1) {
863
+ return smalltalk.withContext(function($ctx2) {
864
+ return smalltalk.withContext(function($ctx3) {
865
+ }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx1)})}));
866
+ return _st(self)._interpretAll_continue_(_st(_st(aNode)._nodes())._allButLast(),(function(){
867
+ return smalltalk.withContext(function($ctx3) {
868
+ return smalltalk.withContext(function($ctx4) {
869
+ }, function($ctx4) {$ctx4.fillBlock({val:val},$ctx1)})}));
870
+ }, function($ctx3) {$ctx3.fillBlock({},$ctx1)})}));
871
+ }, function($ctx2) {$ctx2.fillBlock({receiver:receiver},$ctx1)})}));
872
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretCascadeNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
873
+ args: ["aNode", "aBlock"],
874
+ source: "interpretCascadeNode: aNode continue: aBlock\x0a\x09\x22TODO: Handle super sends\x22\x0a\x09\x0a self interpret: aNode receiver continue: [ :receiver |\x0a\x09\x09\x22Only interpret the receiver once\x22\x0a aNode nodes do: [ :each | each receiver: receiver ].\x0a \x0a \x09self \x0a \x09interpretAll: aNode nodes allButLast\x0a \x09\x09continue: [\x0a \x09self \x0a \x09interpret: aNode nodes last\x0a \x09continue: [ :val | self continue: aBlock value: val ] ] ]",
875
+ messageSends: ["interpret:continue:", "receiver", "do:", "receiver:", "nodes", "interpretAll:continue:", "allButLast", "last", "continue:value:"],
876
+ referencedClasses: []
877
+ }),
878
+ smalltalk.ASTInterpreter);
879
+
880
+ smalltalk.addMethod(
881
+ "_interpretClassReferenceNode_continue_",
882
+ smalltalk.method({
883
+ selector: "interpretClassReferenceNode:continue:",
884
+ category: 'interpreting',
885
+ fn: function (aNode,aBlock){
886
+ var self=this;
887
+ return smalltalk.withContext(function($ctx1) {
888
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretClassReferenceNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
889
+ args: ["aNode", "aBlock"],
890
+ source: "interpretClassReferenceNode: aNode continue: aBlock\x0a\x09self continue: aBlock value: (Smalltalk current at: aNode value)",
891
+ messageSends: ["continue:value:", "at:", "value", "current"],
892
+ referencedClasses: ["Smalltalk"]
893
+ }),
894
+ smalltalk.ASTInterpreter);
895
+
896
+ smalltalk.addMethod(
897
+ "_interpretDynamicArrayNode_continue_",
898
+ smalltalk.method({
899
+ selector: "interpretDynamicArrayNode:continue:",
900
+ category: 'interpreting',
901
+ fn: function (aNode,aBlock){
902
+ var self=this;
903
+ return smalltalk.withContext(function($ctx1) {
904
+ return smalltalk.withContext(function($ctx2) {
905
+ }, function($ctx2) {$ctx2.fillBlock({array:array},$ctx1)})}));
906
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretDynamicArrayNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
907
+ args: ["aNode", "aBlock"],
908
+ source: "interpretDynamicArrayNode: aNode continue: aBlock\x0a\x09self interpretAll: aNode nodes continue: [ :array |\x0a \x09self \x0a \x09continue: aBlock\x0a\x09\x09\x09value: array ]",
909
+ messageSends: ["interpretAll:continue:", "nodes", "continue:value:"],
910
+ referencedClasses: []
911
+ }),
912
+ smalltalk.ASTInterpreter);
913
+
914
+ smalltalk.addMethod(
915
+ "_interpretDynamicDictionaryNode_continue_",
916
+ smalltalk.method({
917
+ selector: "interpretDynamicDictionaryNode:continue:",
918
+ category: 'interpreting',
919
+ fn: function (aNode,aBlock){
920
+ var self=this;
921
+ return smalltalk.withContext(function($ctx1) {
922
+ var hashedCollection;
923
+ return smalltalk.withContext(function($ctx2) {
924
+ hashedCollection;
925
+ _st(array)._do_((function(each){
926
+ return smalltalk.withContext(function($ctx3) {
927
+ }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx1)})}));
928
+ return _st(self)._continue_value_(aBlock,hashedCollection);
929
+ }, function($ctx2) {$ctx2.fillBlock({array:array,hashedCollection:hashedCollection},$ctx1)})}));
930
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretDynamicDictionaryNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
931
+ args: ["aNode", "aBlock"],
932
+ source: "interpretDynamicDictionaryNode: aNode continue: aBlock\x0a self interpretAll: aNode nodes continue: [ :array | | hashedCollection |\x0a \x09hashedCollection := HashedCollection new.\x0a array do: [ :each | hashedCollection add: each ].\x0a self \x09\x0a \x09continue: aBlock\x0a value: hashedCollection ]",
933
+ messageSends: ["interpretAll:continue:", "nodes", "new", "do:", "add:", "continue:value:"],
934
+ referencedClasses: ["HashedCollection"]
935
+ }),
936
+ smalltalk.ASTInterpreter);
937
+
938
+ smalltalk.addMethod(
939
+ "_interpretJSStatementNode_continue_",
940
+ smalltalk.method({
941
+ selector: "interpretJSStatementNode:continue:",
942
+ category: 'interpreting',
943
+ fn: function (aNode,aBlock){
944
+ var self=this;
945
+ return smalltalk.withContext(function($ctx1) {
946
+ _st(self)._continue_value_(aBlock,_st(self)._eval_(_st(aNode)._source()));
947
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretJSStatementNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
948
+ args: ["aNode", "aBlock"],
949
+ source: "interpretJSStatementNode: aNode continue: aBlock\x0a\x09shouldReturn := true.\x0a\x09self continue: aBlock value: (self eval: aNode source)",
950
+ messageSends: ["continue:value:", "eval:", "source"],
951
+ referencedClasses: []
952
+ }),
953
+ smalltalk.ASTInterpreter);
954
+
955
+ smalltalk.addMethod(
956
+ "_interpretMethodNode_continue_",
957
+ smalltalk.method({
958
+ selector: "interpretMethodNode:continue:",
959
+ category: 'interpreting',
960
+ fn: function (aNode,aBlock){
961
+ var self=this;
962
+ return smalltalk.withContext(function($ctx1) {
963
+ return smalltalk.withContext(function($ctx2) {
964
+ }, function($ctx2) {$ctx2.fillBlock({array:array},$ctx1)})}));
965
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretMethodNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
966
+ args: ["aNode", "aBlock"],
967
+ source: "interpretMethodNode: aNode continue: aBlock\x0a\x09self interpretAll: aNode nodes continue: [ :array |\x0a \x09self continue: aBlock value: array first ]",
968
+ messageSends: ["interpretAll:continue:", "nodes", "continue:value:", "first"],
969
+ referencedClasses: []
970
+ }),
971
+ smalltalk.ASTInterpreter);
972
+
973
+ smalltalk.addMethod(
974
+ "_interpretNode_continue_",
975
+ smalltalk.method({
976
+ selector: "interpretNode:continue:",
977
+ category: 'interpreting',
978
+ fn: function (aNode,aBlock){
979
+ var self=this;
980
+ return smalltalk.withContext(function($ctx1) {
981
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
982
+ args: ["aNode", "aBlock"],
983
+ source: "interpretNode: aNode continue: aBlock\x0a aNode interpreter: self continue: aBlock",
984
+ messageSends: ["interpreter:continue:"],
985
+ referencedClasses: []
986
+ }),
987
+ smalltalk.ASTInterpreter);
988
+
989
+ smalltalk.addMethod(
990
+ "_interpretReturnNode_continue_",
991
+ smalltalk.method({
992
+ selector: "interpretReturnNode:continue:",
993
+ category: 'interpreting',
994
+ fn: function (aNode,aBlock){
995
+ var self=this;
996
+ return smalltalk.withContext(function($ctx1) {
997
+ return smalltalk.withContext(function($ctx2) {
998
+ self["@shouldReturn"];
999
+ return _st(self)._continue_value_(aBlock,value);
1000
+ }, function($ctx2) {$ctx2.fillBlock({value:value},$ctx1)})}));
1001
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretReturnNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
1002
+ args: ["aNode", "aBlock"],
1003
+ source: "interpretReturnNode: aNode continue: aBlock\x0a self interpret: aNode nodes first continue: [ :value |\x0a \x09shouldReturn := true.\x0a\x09\x09self continue: aBlock value: value ]",
1004
+ messageSends: ["interpret:continue:", "first", "nodes", "continue:value:"],
1005
+ referencedClasses: []
1006
+ }),
1007
+ smalltalk.ASTInterpreter);
1008
+
1009
+ smalltalk.addMethod(
1010
+ "_interpretSendNode_continue_",
1011
+ smalltalk.method({
1012
+ selector: "interpretSendNode:continue:",
1013
+ category: 'interpreting',
1014
+ fn: function (aNode,aBlock){
1015
+ var self=this;
1016
+ return smalltalk.withContext(function($ctx1) {
1017
+ return smalltalk.withContext(function($ctx2) {
1018
+ return smalltalk.withContext(function($ctx3) {
1019
+ return smalltalk.withContext(function($ctx4) {
1020
+ return _st(self)._continue_value_(aBlock,_st(message)._sendTo_(receiver));
1021
+ }, function($ctx4) {$ctx4.fillBlock({message:message},$ctx1)})}));
1022
+ }, function($ctx3) {$ctx3.fillBlock({args:args},$ctx1)})}));
1023
+ }, function($ctx2) {$ctx2.fillBlock({receiver:receiver},$ctx1)})}));
1024
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretSendNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
1025
+ args: ["aNode", "aBlock"],
1026
+ source: "interpretSendNode: aNode continue: aBlock\x0a\x09\x22TODO: Handle super sends\x22\x0a \x0a self interpret: aNode receiver continue: [ :receiver |\x0a \x09self interpretAll: aNode arguments continue: [ :args |\x0a \x09\x09self \x0a \x09messageFromSendNode: aNode \x0a arguments: args\x0a do: [ :message |\x0a \x09\x09\x09self context pc: self context pc + 1.\x0a \x09\x09\x09self \x0a \x09\x09\x09continue: aBlock \x0a \x09\x09value: (message sendTo: receiver) ] ] ]",
1027
+ messageSends: ["interpret:continue:", "receiver", "interpretAll:continue:", "arguments", "messageFromSendNode:arguments:do:", "pc:", "+", "pc", "context", "continue:value:", "sendTo:"],
1028
+ referencedClasses: []
1029
+ }),
1030
+ smalltalk.ASTInterpreter);
1031
+
1032
+ smalltalk.addMethod(
1033
+ "_interpretSequenceNode_continue_",
1034
+ smalltalk.method({
1035
+ selector: "interpretSequenceNode:continue:",
1036
+ category: 'interpreting',
1037
+ fn: function (aNode,aBlock){
1038
+ var self=this;
1039
+ return smalltalk.withContext(function($ctx1) {
1040
+ return smalltalk.withContext(function($ctx2) {
1041
+ }, function($ctx2) {$ctx2.fillBlock({array:array},$ctx1)})}));
1042
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretSequenceNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
1043
+ args: ["aNode", "aBlock"],
1044
+ source: "interpretSequenceNode: aNode continue: aBlock\x0a\x09self interpretAll: aNode nodes continue: [ :array |\x0a \x09self continue: aBlock value: array last ]",
1045
+ messageSends: ["interpretAll:continue:", "nodes", "continue:value:", "last"],
1046
+ referencedClasses: []
1047
+ }),
1048
+ smalltalk.ASTInterpreter);
1049
+
1050
+ smalltalk.addMethod(
1051
+ "_interpretValueNode_continue_",
1052
+ smalltalk.method({
1053
+ selector: "interpretValueNode:continue:",
1054
+ category: 'interpreting',
1055
+ fn: function (aNode,aBlock){
1056
+ var self=this;
1057
+ return smalltalk.withContext(function($ctx1) {
1058
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretValueNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
1059
+ args: ["aNode", "aBlock"],
1060
+ source: "interpretValueNode: aNode continue: aBlock\x0a\x09self continue: aBlock value: aNode value",
1061
+ messageSends: ["continue:value:", "value"],
1062
+ referencedClasses: []
1063
+ }),
1064
+ smalltalk.ASTInterpreter);
1065
+
1066
+ smalltalk.addMethod(
1067
+ "_interpretVariableNode_continue_",
1068
+ smalltalk.method({
1069
+ selector: "interpretVariableNode:continue:",
1070
+ category: 'interpreting',
1071
+ fn: function (aNode,aBlock){
1072
+ var self=this;
1073
+ return smalltalk.withContext(function($ctx1) {
1074
+ $1=self;
1075
+ $2=aBlock;
1076
+ $4=_st(_st(aNode)._binding())._isInstanceVar();
1077
+ if(smalltalk.assert($4)){
1078
+ $3=_st(_st(_st(self)._context())._receiver())._instVarAt_(_st(aNode)._value());
1079
+ } else {
1080
+ $3=_st(_st(self)._context())._localAt_(_st(aNode)._value());
1081
+ };
1082
+ _st($1)._continue_value_($2,$3);
1083
+ return self}, function($ctx1) {$ctx1.fill(self,"interpretVariableNode:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
1084
+ args: ["aNode", "aBlock"],
1085
+ source: "interpretVariableNode: aNode continue: aBlock\x0a self \x0a \x09continue: aBlock\x0a value: (aNode binding isInstanceVar\x0a\x09\x09\x09ifTrue: [ self context receiver instVarAt: aNode value ]\x0a\x09\x09\x09ifFalse: [ self context localAt: aNode value ])",
1086
+ messageSends: ["continue:value:", "ifTrue:ifFalse:", "instVarAt:", "value", "receiver", "context", "localAt:", "isInstanceVar", "binding"],
1087
+ referencedClasses: []
1088
+ }),
1089
+ smalltalk.ASTInterpreter);
1090
+
1091
+ smalltalk.addMethod(
1092
+ "_messageFromSendNode_arguments_do_",
1093
+ smalltalk.method({
1094
+ selector: "messageFromSendNode:arguments:do:",
1095
+ category: 'private',
1096
+ fn: function (aSendNode,aCollection,aBlock){
1097
+ var self=this;
1098
+ return smalltalk.withContext(function($ctx1) {
1099
+ $1=_st((smalltalk.Message || Message))._new();
1100
+ _st($1)._selector_(_st(aSendNode)._selector());
1101
+ _st($1)._arguments_(aCollection);
1102
+ $2=_st($1)._yourself();
1103
+ _st(self)._continue_value_(aBlock,$2);
1104
+ return self}, function($ctx1) {$ctx1.fill(self,"messageFromSendNode:arguments:do:",{aSendNode:aSendNode,aCollection:aCollection,aBlock:aBlock}, smalltalk.ASTInterpreter)})},
1105
+ args: ["aSendNode", "aCollection", "aBlock"],
1106
+ source: "messageFromSendNode: aSendNode arguments: aCollection do: aBlock\x0a self \x0a continue: aBlock\x0a value: (Message new\x0a \x09\x09selector: aSendNode selector;\x0a \x09arguments: aCollection;\x0a \x09yourself)",
1107
+ messageSends: ["continue:value:", "selector:", "selector", "new", "arguments:", "yourself"],
1108
+ referencedClasses: ["Message"]
1109
+ }),
1110
+ smalltalk.ASTInterpreter);
1111
+
1112
+ smalltalk.addMethod(
1113
+ "_result",
1114
+ smalltalk.method({
1115
+ selector: "result",
1116
+ category: 'accessing',
1117
+ fn: function (){
1118
+ var self=this;
1119
+ return smalltalk.withContext(function($ctx1) {
1120
+ $1=self["@result"];
1121
+ return $1;
1122
+ }, function($ctx1) {$ctx1.fill(self,"result",{}, smalltalk.ASTInterpreter)})},
1123
+ args: [],
1124
+ source: "result\x0a\x09^ result",
1125
+ messageSends: [],
1126
+ referencedClasses: []
1127
+ }),
1128
+ smalltalk.ASTInterpreter);
1129
+
1130
+ smalltalk.addMethod(
1131
+ "_shouldReturn",
1132
+ smalltalk.method({
1133
+ selector: "shouldReturn",
1134
+ category: 'testing',
1135
+ fn: function (){
1136
+ var self=this;
1137
+ return smalltalk.withContext(function($ctx1) {
1138
+ $2=self["@shouldReturn"];
1139
+ if(($receiver = $2) == nil || $receiver == undefined){
1140
+ $1=false;
1141
+ } else {
1142
+ $1=$2;
1143
+ };
1144
+ return $1;
1145
+ }, function($ctx1) {$ctx1.fill(self,"shouldReturn",{}, smalltalk.ASTInterpreter)})},
1146
+ args: [],
1147
+ source: "shouldReturn\x0a\x09^ shouldReturn ifNil: [ false ]",
1148
+ messageSends: ["ifNil:"],
1149
+ referencedClasses: []
1150
+ }),
1151
+ smalltalk.ASTInterpreter);
1152
+
1153
+
1154
+
1155
+ smalltalk.addClass('ASTSteppingInterpreter', smalltalk.ASTInterpreter, ['continuation', 'nextNode'], 'Compiler-Interpreter');
1156
+ smalltalk.ASTSteppingInterpreter.comment="ASTSteppingInterpreter is an interpreter with stepping capabilities.\x0aUse `#step` to actually interpret the next node.\x0a\x0aUsage example:\x0a\x0a | ast interpreter |\x0a ast := Smalltalk current parse: 'foo 1+2+4'.\x0a (SemanticAnalyzer on: Object) visit: ast.\x0a\x0a interpreter := ASTSteppingInterpreter new\x0a interpret: ast nodes first;\x0a yourself.\x0a \x0a debugger step; step.\x0a debugger step; step.\x0a debugger result.\x22Answers 1\x22\x0a debugger step.\x0a debugger result. \x22Answers 3\x22\x0a debugger step.\x0a debugger result. \x22Answers 7\x22\x0a "
1157
+ smalltalk.addMethod(
1158
+ "_atEnd",
1159
+ smalltalk.method({
1160
+ selector: "atEnd",
1161
+ category: 'testing',
1162
+ fn: function (){
1163
+ var self=this;
1164
+ return smalltalk.withContext(function($ctx1) {
1165
+ $1=_st(_st(self)._shouldReturn())._or_((function(){
1166
+ return smalltalk.withContext(function($ctx2) {
1167
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
1168
+ return $1;
1169
+ }, function($ctx1) {$ctx1.fill(self,"atEnd",{}, smalltalk.ASTSteppingInterpreter)})},
1170
+ args: [],
1171
+ source: "atEnd\x0a\x09^ self shouldReturn or: [ self nextNode == self currentNode ]",
1172
+ messageSends: ["or:", "==", "currentNode", "nextNode", "shouldReturn"],
1173
+ referencedClasses: []
1174
+ }),
1175
+ smalltalk.ASTSteppingInterpreter);
1176
+
1177
+ smalltalk.addMethod(
1178
+ "_initialize",
1179
+ smalltalk.method({
1180
+ selector: "initialize",
1181
+ category: 'initialization',
1182
+ fn: function (){
1183
+ var self=this;
1184
+ return smalltalk.withContext(function($ctx1) {
1185
+ self["@continuation"]=(function(){
1186
+ return smalltalk.withContext(function($ctx2) {
1187
+ return self}, function($ctx1) {$ctx1.fill(self,"initialize",{}, smalltalk.ASTSteppingInterpreter)})},
1188
+ args: [],
1189
+ source: "initialize\x0a\x09super initialize.\x0a continuation := [ ]",
1190
+ messageSends: ["initialize"],
1191
+ referencedClasses: []
1192
+ }),
1193
+ smalltalk.ASTSteppingInterpreter);
1194
+
1195
+ smalltalk.addMethod(
1196
+ "_interpret_continue_",
1197
+ smalltalk.method({
1198
+ selector: "interpret:continue:",
1199
+ category: 'interpreting',
1200
+ fn: function (aNode,aBlock){
1201
+ var self=this;
1202
+ return smalltalk.withContext(function($ctx1) {
1203
+ self["@continuation"]=(function(){
1204
+ return smalltalk.withContext(function($ctx2) {
1205
+ }, function($ctx2) {$ctx2.fillBlock({},$ctx1)})});
1206
+ return self}, function($ctx1) {$ctx1.fill(self,"interpret:continue:",{aNode:aNode,aBlock:aBlock}, smalltalk.ASTSteppingInterpreter)})},
1207
+ args: ["aNode", "aBlock"],
1208
+ source: "interpret: aNode continue: aBlock\x0a\x09nextNode := aNode.\x0a\x09continuation := [ \x0a \x09super interpret: aNode continue: aBlock ]",
1209
+ messageSends: ["interpret:continue:"],
1210
+ referencedClasses: []
1211
+ }),
1212
+ smalltalk.ASTSteppingInterpreter);
1213
+
1214
+ smalltalk.addMethod(
1215
+ "_nextNode",
1216
+ smalltalk.method({
1217
+ selector: "nextNode",
1218
+ category: 'accessing',
1219
+ fn: function (){
1220
+ var self=this;
1221
+ return smalltalk.withContext(function($ctx1) {
1222
+ $1=self["@nextNode"];
1223
+ return $1;
1224
+ }, function($ctx1) {$ctx1.fill(self,"nextNode",{}, smalltalk.ASTSteppingInterpreter)})},
1225
+ args: [],
1226
+ source: "nextNode\x0a\x09^ nextNode",
1227
+ messageSends: [],
1228
+ referencedClasses: []
1229
+ }),
1230
+ smalltalk.ASTSteppingInterpreter);
1231
+
1232
+ smalltalk.addMethod(
1233
+ "_step",
1234
+ smalltalk.method({
1235
+ selector: "step",
1236
+ category: 'stepping',
1237
+ fn: function (){
1238
+ var self=this;
1239
+ return smalltalk.withContext(function($ctx1) {
1240
+ return self}, function($ctx1) {$ctx1.fill(self,"step",{}, smalltalk.ASTSteppingInterpreter)})},
1241
+ args: [],
1242
+ source: "step\x0a\x09continuation value",
1243
+ messageSends: ["value"],
1244
+ referencedClasses: []
1245
+ }),
1246
+ smalltalk.ASTSteppingInterpreter);
1247
+
1248
+
1249
+
1250
+ smalltalk.addMethod(
1251
+ "_interpreter_continue_",
1252
+ smalltalk.method({
1253
+ selector: "interpreter:continue:",
1254
+ category: '*Compiler-Interpreter',
1255
+ fn: function (anInterpreter,aBlock){
1256
+ var self=this;
1257
+ return smalltalk.withContext(function($ctx1) {
1258
+ $1=_st(anInterpreter)._interpretNode_continue_(self,aBlock);
1259
+ return $1;
1260
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.Node)})},
1261
+ args: ["anInterpreter", "aBlock"],
1262
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretNode: self continue: aBlock",
1263
+ messageSends: ["interpretNode:continue:"],
1264
+ referencedClasses: []
1265
+ }),
1266
+ smalltalk.Node);
1267
+
1268
+ smalltalk.addMethod(
1269
+ "_isSteppingNode",
1270
+ smalltalk.method({
1271
+ selector: "isSteppingNode",
1272
+ category: '*Compiler-Interpreter',
1273
+ fn: function (){
1274
+ var self=this;
1275
+ return smalltalk.withContext(function($ctx1) {
1276
+ }, function($ctx1) {$ctx1.fill(self,"isSteppingNode",{}, smalltalk.Node)})},
1277
+ args: [],
1278
+ source: "isSteppingNode\x0a\x09^ false",
1279
+ messageSends: [],
1280
+ referencedClasses: []
1281
+ }),
1282
+ smalltalk.Node);
1283
+
1284
+ smalltalk.addMethod(
1285
+ "_interpreter_continue_",
1286
+ smalltalk.method({
1287
+ selector: "interpreter:continue:",
1288
+ category: '*Compiler-Interpreter',
1289
+ fn: function (anInterpreter,aBlock){
1290
+ var self=this;
1291
+ return smalltalk.withContext(function($ctx1) {
1292
+ $1=_st(anInterpreter)._interpretAssignmentNode_continue_(self,aBlock);
1293
+ return $1;
1294
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.AssignmentNode)})},
1295
+ args: ["anInterpreter", "aBlock"],
1296
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretAssignmentNode: self continue: aBlock",
1297
+ messageSends: ["interpretAssignmentNode:continue:"],
1298
+ referencedClasses: []
1299
+ }),
1300
+ smalltalk.AssignmentNode);
1301
+
1302
+ smalltalk.addMethod(
1303
+ "_isSteppingNode",
1304
+ smalltalk.method({
1305
+ selector: "isSteppingNode",
1306
+ category: '*Compiler-Interpreter',
1307
+ fn: function (){
1308
+ var self=this;
1309
+ return smalltalk.withContext(function($ctx1) {
1310
+ }, function($ctx1) {$ctx1.fill(self,"isSteppingNode",{}, smalltalk.AssignmentNode)})},
1311
+ args: [],
1312
+ source: "isSteppingNode\x0a\x09^ true",
1313
+ messageSends: [],
1314
+ referencedClasses: []
1315
+ }),
1316
+ smalltalk.AssignmentNode);
1317
+
1318
+ smalltalk.addMethod(
1319
+ "_interpreter_continue_",
1320
+ smalltalk.method({
1321
+ selector: "interpreter:continue:",
1322
+ category: '*Compiler-Interpreter',
1323
+ fn: function (anInterpreter,aBlock){
1324
+ var self=this;
1325
+ return smalltalk.withContext(function($ctx1) {
1326
+ $1=_st(anInterpreter)._interpretBlockNode_continue_(self,aBlock);
1327
+ return $1;
1328
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.BlockNode)})},
1329
+ args: ["anInterpreter", "aBlock"],
1330
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretBlockNode: self continue: aBlock",
1331
+ messageSends: ["interpretBlockNode:continue:"],
1332
+ referencedClasses: []
1333
+ }),
1334
+ smalltalk.BlockNode);
1335
+
1336
+ smalltalk.addMethod(
1337
+ "_isSteppingNode",
1338
+ smalltalk.method({
1339
+ selector: "isSteppingNode",
1340
+ category: '*Compiler-Interpreter',
1341
+ fn: function (){
1342
+ var self=this;
1343
+ return smalltalk.withContext(function($ctx1) {
1344
+ }, function($ctx1) {$ctx1.fill(self,"isSteppingNode",{}, smalltalk.BlockNode)})},
1345
+ args: [],
1346
+ source: "isSteppingNode\x0a\x09^ true",
1347
+ messageSends: [],
1348
+ referencedClasses: []
1349
+ }),
1350
+ smalltalk.BlockNode);
1351
+
1352
+ smalltalk.addMethod(
1353
+ "_interpreter_continue_",
1354
+ smalltalk.method({
1355
+ selector: "interpreter:continue:",
1356
+ category: '*Compiler-Interpreter',
1357
+ fn: function (anInterpreter,aBlock){
1358
+ var self=this;
1359
+ return smalltalk.withContext(function($ctx1) {
1360
+ $1=_st(anInterpreter)._interpretCascadeNode_continue_(self,aBlock);
1361
+ return $1;
1362
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.CascadeNode)})},
1363
+ args: ["anInterpreter", "aBlock"],
1364
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretCascadeNode: self continue: aBlock",
1365
+ messageSends: ["interpretCascadeNode:continue:"],
1366
+ referencedClasses: []
1367
+ }),
1368
+ smalltalk.CascadeNode);
1369
+
1370
+ smalltalk.addMethod(
1371
+ "_interpreter_continue_",
1372
+ smalltalk.method({
1373
+ selector: "interpreter:continue:",
1374
+ category: '*Compiler-Interpreter',
1375
+ fn: function (anInterpreter,aBlock){
1376
+ var self=this;
1377
+ return smalltalk.withContext(function($ctx1) {
1378
+ $1=_st(anInterpreter)._interpretDynamicArrayNode_continue_(self,aBlock);
1379
+ return $1;
1380
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.DynamicArrayNode)})},
1381
+ args: ["anInterpreter", "aBlock"],
1382
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretDynamicArrayNode: self continue: aBlock",
1383
+ messageSends: ["interpretDynamicArrayNode:continue:"],
1384
+ referencedClasses: []
1385
+ }),
1386
+ smalltalk.DynamicArrayNode);
1387
+
1388
+ smalltalk.addMethod(
1389
+ "_isSteppingNode",
1390
+ smalltalk.method({
1391
+ selector: "isSteppingNode",
1392
+ category: '*Compiler-Interpreter',
1393
+ fn: function (){
1394
+ var self=this;
1395
+ return smalltalk.withContext(function($ctx1) {
1396
+ }, function($ctx1) {$ctx1.fill(self,"isSteppingNode",{}, smalltalk.DynamicArrayNode)})},
1397
+ args: [],
1398
+ source: "isSteppingNode\x0a\x09^ true",
1399
+ messageSends: [],
1400
+ referencedClasses: []
1401
+ }),
1402
+ smalltalk.DynamicArrayNode);
1403
+
1404
+ smalltalk.addMethod(
1405
+ "_interpreter_continue_",
1406
+ smalltalk.method({
1407
+ selector: "interpreter:continue:",
1408
+ category: '*Compiler-Interpreter',
1409
+ fn: function (anInterpreter,aBlock){
1410
+ var self=this;
1411
+ return smalltalk.withContext(function($ctx1) {
1412
+ $1=_st(anInterpreter)._interpretDynamicDictionaryNode_continue_(self,aBlock);
1413
+ return $1;
1414
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.DynamicDictionaryNode)})},
1415
+ args: ["anInterpreter", "aBlock"],
1416
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretDynamicDictionaryNode: self continue: aBlock",
1417
+ messageSends: ["interpretDynamicDictionaryNode:continue:"],
1418
+ referencedClasses: []
1419
+ }),
1420
+ smalltalk.DynamicDictionaryNode);
1421
+
1422
+ smalltalk.addMethod(
1423
+ "_isSteppingNode",
1424
+ smalltalk.method({
1425
+ selector: "isSteppingNode",
1426
+ category: '*Compiler-Interpreter',
1427
+ fn: function (){
1428
+ var self=this;
1429
+ return smalltalk.withContext(function($ctx1) {
1430
+ }, function($ctx1) {$ctx1.fill(self,"isSteppingNode",{}, smalltalk.DynamicDictionaryNode)})},
1431
+ args: [],
1432
+ source: "isSteppingNode\x0a\x09^ true",
1433
+ messageSends: [],
1434
+ referencedClasses: []
1435
+ }),
1436
+ smalltalk.DynamicDictionaryNode);
1437
+
1438
+ smalltalk.addMethod(
1439
+ "_interpreter_continue_",
1440
+ smalltalk.method({
1441
+ selector: "interpreter:continue:",
1442
+ category: '*Compiler-Interpreter',
1443
+ fn: function (anInterpreter,aBlock){
1444
+ var self=this;
1445
+ return smalltalk.withContext(function($ctx1) {
1446
+ $1=_st(anInterpreter)._interpretJSStatementNode_continue_(self,aBlock);
1447
+ return $1;
1448
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.JSStatementNode)})},
1449
+ args: ["anInterpreter", "aBlock"],
1450
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretJSStatementNode: self continue: aBlock",
1451
+ messageSends: ["interpretJSStatementNode:continue:"],
1452
+ referencedClasses: []
1453
+ }),
1454
+ smalltalk.JSStatementNode);
1455
+
1456
+ smalltalk.addMethod(
1457
+ "_isSteppingNode",
1458
+ smalltalk.method({
1459
+ selector: "isSteppingNode",
1460
+ category: '*Compiler-Interpreter',
1461
+ fn: function (){
1462
+ var self=this;
1463
+ return smalltalk.withContext(function($ctx1) {
1464
+ }, function($ctx1) {$ctx1.fill(self,"isSteppingNode",{}, smalltalk.JSStatementNode)})},
1465
+ args: [],
1466
+ source: "isSteppingNode\x0a\x09^ true",
1467
+ messageSends: [],
1468
+ referencedClasses: []
1469
+ }),
1470
+ smalltalk.JSStatementNode);
1471
+
1472
+ smalltalk.addMethod(
1473
+ "_interpreter_continue_",
1474
+ smalltalk.method({
1475
+ selector: "interpreter:continue:",
1476
+ category: '*Compiler-Interpreter',
1477
+ fn: function (anInterpreter,aBlock){
1478
+ var self=this;
1479
+ return smalltalk.withContext(function($ctx1) {
1480
+ $1=_st(anInterpreter)._interpretMethodNode_continue_(self,aBlock);
1481
+ return $1;
1482
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.MethodNode)})},
1483
+ args: ["anInterpreter", "aBlock"],
1484
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretMethodNode: self continue: aBlock",
1485
+ messageSends: ["interpretMethodNode:continue:"],
1486
+ referencedClasses: []
1487
+ }),
1488
+ smalltalk.MethodNode);
1489
+
1490
+ smalltalk.addMethod(
1491
+ "_interpreter_continue_",
1492
+ smalltalk.method({
1493
+ selector: "interpreter:continue:",
1494
+ category: '*Compiler-Interpreter',
1495
+ fn: function (anInterpreter,aBlock){
1496
+ var self=this;
1497
+ return smalltalk.withContext(function($ctx1) {
1498
+ $1=_st(anInterpreter)._interpretReturnNode_continue_(self,aBlock);
1499
+ return $1;
1500
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.ReturnNode)})},
1501
+ args: ["anInterpreter", "aBlock"],
1502
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretReturnNode: self continue: aBlock",
1503
+ messageSends: ["interpretReturnNode:continue:"],
1504
+ referencedClasses: []
1505
+ }),
1506
+ smalltalk.ReturnNode);
1507
+
1508
+ smalltalk.addMethod(
1509
+ "_interpreter_continue_",
1510
+ smalltalk.method({
1511
+ selector: "interpreter:continue:",
1512
+ category: '*Compiler-Interpreter',
1513
+ fn: function (anInterpreter,aBlock){
1514
+ var self=this;
1515
+ return smalltalk.withContext(function($ctx1) {
1516
+ $1=_st(anInterpreter)._interpretSendNode_continue_(self,aBlock);
1517
+ return $1;
1518
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.SendNode)})},
1519
+ args: ["anInterpreter", "aBlock"],
1520
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretSendNode: self continue: aBlock",
1521
+ messageSends: ["interpretSendNode:continue:"],
1522
+ referencedClasses: []
1523
+ }),
1524
+ smalltalk.SendNode);
1525
+
1526
+ smalltalk.addMethod(
1527
+ "_isSteppingNode",
1528
+ smalltalk.method({
1529
+ selector: "isSteppingNode",
1530
+ category: '*Compiler-Interpreter',
1531
+ fn: function (){
1532
+ var self=this;
1533
+ return smalltalk.withContext(function($ctx1) {
1534
+ }, function($ctx1) {$ctx1.fill(self,"isSteppingNode",{}, smalltalk.SendNode)})},
1535
+ args: [],
1536
+ source: "isSteppingNode\x0a\x09^ true",
1537
+ messageSends: [],
1538
+ referencedClasses: []
1539
+ }),
1540
+ smalltalk.SendNode);
1541
+
1542
+ smalltalk.addMethod(
1543
+ "_interpreter_continue_",
1544
+ smalltalk.method({
1545
+ selector: "interpreter:continue:",
1546
+ category: '*Compiler-Interpreter',
1547
+ fn: function (anInterpreter,aBlock){
1548
+ var self=this;
1549
+ return smalltalk.withContext(function($ctx1) {
1550
+ $1=_st(anInterpreter)._interpretSequenceNode_continue_(self,aBlock);
1551
+ return $1;
1552
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.SequenceNode)})},
1553
+ args: ["anInterpreter", "aBlock"],
1554
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretSequenceNode: self continue: aBlock",
1555
+ messageSends: ["interpretSequenceNode:continue:"],
1556
+ referencedClasses: []
1557
+ }),
1558
+ smalltalk.SequenceNode);
1559
+
1560
+ smalltalk.addMethod(
1561
+ "_interpreter_continue_",
1562
+ smalltalk.method({
1563
+ selector: "interpreter:continue:",
1564
+ category: '*Compiler-Interpreter',
1565
+ fn: function (anInterpreter,aBlock){
1566
+ var self=this;
1567
+ return smalltalk.withContext(function($ctx1) {
1568
+ $1=_st(anInterpreter)._interpretBlockSequenceNode_continue_(self,aBlock);
1569
+ return $1;
1570
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.BlockSequenceNode)})},
1571
+ args: ["anInterpreter", "aBlock"],
1572
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretBlockSequenceNode: self continue: aBlock",
1573
+ messageSends: ["interpretBlockSequenceNode:continue:"],
1574
+ referencedClasses: []
1575
+ }),
1576
+ smalltalk.BlockSequenceNode);
1577
+
1578
+ smalltalk.addMethod(
1579
+ "_interpreter_continue_",
1580
+ smalltalk.method({
1581
+ selector: "interpreter:continue:",
1582
+ category: '*Compiler-Interpreter',
1583
+ fn: function (anInterpreter,aBlock){
1584
+ var self=this;
1585
+ return smalltalk.withContext(function($ctx1) {
1586
+ $1=_st(anInterpreter)._interpretValueNode_continue_(self,aBlock);
1587
+ return $1;
1588
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.ValueNode)})},
1589
+ args: ["anInterpreter", "aBlock"],
1590
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretValueNode: self continue: aBlock",
1591
+ messageSends: ["interpretValueNode:continue:"],
1592
+ referencedClasses: []
1593
+ }),
1594
+ smalltalk.ValueNode);
1595
+
1596
+ smalltalk.addMethod(
1597
+ "_interpreter_continue_",
1598
+ smalltalk.method({
1599
+ selector: "interpreter:continue:",
1600
+ category: '*Compiler-Interpreter',
1601
+ fn: function (anInterpreter,aBlock){
1602
+ var self=this;
1603
+ return smalltalk.withContext(function($ctx1) {
1604
+ $1=_st(anInterpreter)._interpretVariableNode_continue_(self,aBlock);
1605
+ return $1;
1606
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.VariableNode)})},
1607
+ args: ["anInterpreter", "aBlock"],
1608
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretVariableNode: self continue: aBlock",
1609
+ messageSends: ["interpretVariableNode:continue:"],
1610
+ referencedClasses: []
1611
+ }),
1612
+ smalltalk.VariableNode);
1613
+
1614
+ smalltalk.addMethod(
1615
+ "_interpreter_continue_",
1616
+ smalltalk.method({
1617
+ selector: "interpreter:continue:",
1618
+ category: '*Compiler-Interpreter',
1619
+ fn: function (anInterpreter,aBlock){
1620
+ var self=this;
1621
+ return smalltalk.withContext(function($ctx1) {
1622
+ $1=_st(anInterpreter)._interpretClassReferenceNode_continue_(self,aBlock);
1623
+ return $1;
1624
+ }, function($ctx1) {$ctx1.fill(self,"interpreter:continue:",{anInterpreter:anInterpreter,aBlock:aBlock}, smalltalk.ClassReferenceNode)})},
1625
+ args: ["anInterpreter", "aBlock"],
1626
+ source: "interpreter: anInterpreter continue: aBlock\x0a\x09^ anInterpreter interpretClassReferenceNode: self continue: aBlock",
1627
+ messageSends: ["interpretClassReferenceNode:continue:"],
1628
+ referencedClasses: []
1629
+ }),
1630
+ smalltalk.ClassReferenceNode);
1631
+