resin 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/amber/bin/amberc +10 -350
- data/amber/js/Benchfib.deploy.js +80 -89
- data/amber/js/Benchfib.js +80 -89
- data/amber/js/Canvas.deploy.js +558 -545
- data/amber/js/Canvas.js +563 -545
- data/amber/js/Compiler-AST.deploy.js +431 -243
- data/amber/js/Compiler-AST.js +487 -244
- data/amber/js/Compiler-Core.deploy.js +201 -1045
- data/amber/js/Compiler-Core.js +208 -1207
- data/amber/js/Compiler-Exceptions.deploy.js +37 -18
- data/amber/js/Compiler-Exceptions.js +42 -18
- data/amber/js/Compiler-IR.deploy.js +1071 -774
- data/amber/js/Compiler-IR.js +1194 -848
- data/amber/js/Compiler-Inlining.deploy.js +395 -373
- data/amber/js/Compiler-Inlining.js +395 -373
- data/amber/js/Compiler-Interpreter.deploy.js +1202 -0
- data/amber/js/Compiler-Interpreter.js +1631 -0
- data/amber/js/Compiler-Semantic.deploy.js +695 -600
- data/amber/js/Compiler-Semantic.js +721 -611
- data/amber/js/Compiler-Tests.deploy.js +699 -376
- data/amber/js/Compiler-Tests.js +834 -381
- data/amber/js/Compiler.deploy.js +8563 -1805
- data/amber/js/Compiler.js +11476 -2633
- data/amber/js/Examples.deploy.js +29 -29
- data/amber/js/Examples.js +29 -29
- data/amber/js/IDE.deploy.js +3292 -2649
- data/amber/js/IDE.js +3318 -2710
- data/amber/js/Importer-Exporter.deploy.js +393 -349
- data/amber/js/Importer-Exporter.js +398 -354
- data/amber/js/Kernel-Announcements.deploy.js +53 -44
- data/amber/js/Kernel-Announcements.js +55 -44
- data/amber/js/Kernel-Classes.deploy.js +566 -368
- data/amber/js/Kernel-Classes.js +660 -402
- data/amber/js/Kernel-Collections.deploy.js +1149 -1098
- data/amber/js/Kernel-Collections.js +1183 -1116
- data/amber/js/Kernel-Exceptions.deploy.js +173 -75
- data/amber/js/Kernel-Exceptions.js +215 -77
- data/amber/js/Kernel-Methods.deploy.js +530 -313
- data/amber/js/Kernel-Methods.js +632 -338
- data/amber/js/Kernel-Objects.deploy.js +1734 -1577
- data/amber/js/Kernel-Objects.js +1867 -1654
- data/amber/js/Kernel-Tests.deploy.js +1416 -973
- data/amber/js/Kernel-Tests.js +1495 -981
- data/amber/js/Kernel-Transcript.deploy.js +23 -24
- data/amber/js/Kernel-Transcript.js +25 -26
- data/amber/js/SUnit-Tests.deploy.js +402 -0
- data/amber/js/SUnit-Tests.js +518 -0
- data/amber/js/SUnit.deploy.js +535 -237
- data/amber/js/SUnit.js +634 -246
- data/amber/js/amber.js +90 -53
- data/amber/js/boot.js +441 -255
- data/amber/js/init.js +1 -3
- data/amber/js/lib/CodeMirror/codemirror.css +3 -0
- data/amber/js/lib/CodeMirror/codemirror.js +104 -55
- data/amber/js/lib/peg-0.7.0.min.js +9 -0
- data/amber/js/parser.js +1504 -802
- data/amber/js/parser.pegjs +170 -165
- data/amber/st/Canvas.st +6 -0
- data/amber/st/Compiler-AST.st +54 -3
- data/amber/st/Compiler-Core.st +6 -551
- data/amber/st/Compiler-Exceptions.st +4 -0
- data/amber/st/Compiler-IR.st +205 -87
- data/amber/st/Compiler-Interpreter.st +597 -0
- data/amber/st/Compiler-Semantic.st +46 -21
- data/amber/st/Compiler-Tests.st +254 -7
- data/amber/st/Compiler.st +3172 -1541
- data/amber/st/IDE.st +57 -93
- data/amber/st/Importer-Exporter.st +4 -7
- data/amber/st/Kernel-Announcements.st +8 -0
- data/amber/st/Kernel-Classes.st +149 -40
- data/amber/st/Kernel-Collections.st +43 -32
- data/amber/st/Kernel-Exceptions.st +70 -1
- data/amber/st/Kernel-Methods.st +165 -27
- data/amber/st/Kernel-Objects.st +215 -140
- data/amber/st/Kernel-Tests.st +195 -10
- data/amber/st/Kernel-Transcript.st +1 -3
- data/amber/st/SUnit-Tests.st +186 -0
- data/amber/st/SUnit.st +186 -14
- data/bin/resin +6 -0
- data/lib/resin/cli.rb +19 -0
- metadata +41 -25
- data/amber/js/lib/peg-0.6.2.min.js +0 -2
- data/bin/resin-compile +0 -6
- data/bin/runresin +0 -12
@@ -0,0 +1,597 @@
|
|
1
|
+
Smalltalk current createPackage: 'Compiler-Interpreter' properties: #{}!
|
2
|
+
NodeVisitor subclass: #AIContext
|
3
|
+
instanceVariableNames: 'outerContext pc locals method'
|
4
|
+
package: 'Compiler-Interpreter'!
|
5
|
+
!AIContext commentStamp!
|
6
|
+
AIContext is like a `MethodContext`, used by the `ASTInterpreter`.
|
7
|
+
Unlike a `MethodContext`, it is not read-only.
|
8
|
+
|
9
|
+
When debugging, `AIContext` instances are created by copying the current `MethodContext` (thisContext)!
|
10
|
+
|
11
|
+
!AIContext methodsFor: 'accessing'!
|
12
|
+
|
13
|
+
localAt: aString
|
14
|
+
^ self locals at: aString ifAbsent: [ nil ]
|
15
|
+
!
|
16
|
+
|
17
|
+
localAt: aString put: anObject
|
18
|
+
self locals at: aString put: anObject
|
19
|
+
!
|
20
|
+
|
21
|
+
locals
|
22
|
+
^ locals ifNil: [ locals := Dictionary new ]
|
23
|
+
!
|
24
|
+
|
25
|
+
method
|
26
|
+
^ method
|
27
|
+
!
|
28
|
+
|
29
|
+
method: aCompiledMethod
|
30
|
+
method := aCompiledMethod
|
31
|
+
!
|
32
|
+
|
33
|
+
outerContext
|
34
|
+
^ outerContext
|
35
|
+
!
|
36
|
+
|
37
|
+
outerContext: anAIContext
|
38
|
+
outerContext := anAIContext
|
39
|
+
!
|
40
|
+
|
41
|
+
pc
|
42
|
+
^ pc ifNil: [ pc := 0 ]
|
43
|
+
!
|
44
|
+
|
45
|
+
pc: anInteger
|
46
|
+
pc := anInteger
|
47
|
+
!
|
48
|
+
|
49
|
+
receiver
|
50
|
+
^ self localAt: 'self'
|
51
|
+
!
|
52
|
+
|
53
|
+
receiver: anObject
|
54
|
+
self localAt: 'self' put: anObject
|
55
|
+
!
|
56
|
+
|
57
|
+
selector
|
58
|
+
^ self metod
|
59
|
+
ifNotNil: [ self method selector ]
|
60
|
+
! !
|
61
|
+
|
62
|
+
!AIContext methodsFor: 'initialization'!
|
63
|
+
|
64
|
+
initializeFromMethodContext: aMethodContext
|
65
|
+
self pc: aMethodContext pc.
|
66
|
+
self receiver: aMethodContext receiver.
|
67
|
+
self method: aMethodContext method.
|
68
|
+
aMethodContext outerContext ifNotNil: [
|
69
|
+
self outerContext: (self class fromMethodContext: aMethodContext outerContext) ].
|
70
|
+
aMethodContext locals keysAndValuesDo: [ :key :value |
|
71
|
+
self locals at: key put: value ]
|
72
|
+
! !
|
73
|
+
|
74
|
+
!AIContext class methodsFor: 'instance creation'!
|
75
|
+
|
76
|
+
fromMethodContext: aMethodContext
|
77
|
+
^ self new
|
78
|
+
initializeFromMethodContext: aMethodContext;
|
79
|
+
yourself
|
80
|
+
! !
|
81
|
+
|
82
|
+
Object subclass: #ASTDebugger
|
83
|
+
instanceVariableNames: 'interpreter context'
|
84
|
+
package: 'Compiler-Interpreter'!
|
85
|
+
!ASTDebugger commentStamp!
|
86
|
+
ASTDebugger is a debugger to Amber.
|
87
|
+
It uses an AST interpreter to step through the code.
|
88
|
+
|
89
|
+
ASTDebugger instances are created from a `MethodContext` with `ASTDebugger class >> context:`.
|
90
|
+
They hold an `AIContext` instance internally, recursive copy of the `MethodContext`.
|
91
|
+
|
92
|
+
Use the methods of the 'stepping' protocol to do stepping.!
|
93
|
+
|
94
|
+
!ASTDebugger methodsFor: 'accessing'!
|
95
|
+
|
96
|
+
context
|
97
|
+
^ context
|
98
|
+
!
|
99
|
+
|
100
|
+
context: aContext
|
101
|
+
context := AIContext new.
|
102
|
+
!
|
103
|
+
|
104
|
+
interpreter
|
105
|
+
^ interpreter ifNil: [ interpreter := self defaultInterpreterClass new ]
|
106
|
+
!
|
107
|
+
|
108
|
+
interpreter: anInterpreter
|
109
|
+
interpreter := anInterpreter
|
110
|
+
!
|
111
|
+
|
112
|
+
method
|
113
|
+
^ self context method
|
114
|
+
! !
|
115
|
+
|
116
|
+
!ASTDebugger methodsFor: 'defaults'!
|
117
|
+
|
118
|
+
defaultInterpreterClass
|
119
|
+
^ ASTSteppingInterpreter
|
120
|
+
! !
|
121
|
+
|
122
|
+
!ASTDebugger methodsFor: 'initialization'!
|
123
|
+
|
124
|
+
buildAST
|
125
|
+
"Build the AST tree from the method source code.
|
126
|
+
The AST is annotated with a SemanticAnalyzer,
|
127
|
+
to know the semantics and bindings of each node needed for later debugging"
|
128
|
+
|
129
|
+
| ast |
|
130
|
+
|
131
|
+
ast := Smalltalk current parse: self method source.
|
132
|
+
(SemanticAnalyzer on: self context receiver class)
|
133
|
+
visit: ast.
|
134
|
+
|
135
|
+
^ ast
|
136
|
+
!
|
137
|
+
|
138
|
+
initializeInterpreter
|
139
|
+
self interpreter interpret: self buildAST nodes first
|
140
|
+
!
|
141
|
+
|
142
|
+
initializeWithContext: aMethodContext
|
143
|
+
"TODO: do we need to handle block contexts?"
|
144
|
+
|
145
|
+
self context: (AIContext fromMethodContext: aMethodContext).
|
146
|
+
self initializeInterpreter
|
147
|
+
! !
|
148
|
+
|
149
|
+
!ASTDebugger methodsFor: 'stepping'!
|
150
|
+
|
151
|
+
restart
|
152
|
+
self shouldBeImplemented
|
153
|
+
!
|
154
|
+
|
155
|
+
resume
|
156
|
+
self shouldBeImplemented
|
157
|
+
!
|
158
|
+
|
159
|
+
step
|
160
|
+
"The ASTSteppingInterpreter stops at each node interpretation.
|
161
|
+
One step will interpret nodes until:
|
162
|
+
- we get at the end
|
163
|
+
- the next node is a stepping node (send, assignment, etc.)"
|
164
|
+
|
165
|
+
[ (self interpreter nextNode notNil and: [ self interpreter nextNode stopOnStepping ])
|
166
|
+
or: [ self interpreter atEnd not ] ]
|
167
|
+
whileFalse: [
|
168
|
+
self interpreter step.
|
169
|
+
self step ]
|
170
|
+
!
|
171
|
+
|
172
|
+
stepInto
|
173
|
+
self shouldBeImplemented
|
174
|
+
!
|
175
|
+
|
176
|
+
stepOver
|
177
|
+
self step
|
178
|
+
! !
|
179
|
+
|
180
|
+
!ASTDebugger class methodsFor: 'instance creation'!
|
181
|
+
|
182
|
+
context: aMethodContext
|
183
|
+
^ self new
|
184
|
+
initializeWithContext: aMethodContext;
|
185
|
+
yourself
|
186
|
+
! !
|
187
|
+
|
188
|
+
Object subclass: #ASTInterpreter
|
189
|
+
instanceVariableNames: 'currentNode context shouldReturn result'
|
190
|
+
package: 'Compiler-Interpreter'!
|
191
|
+
!ASTInterpreter commentStamp!
|
192
|
+
ASTIntepreter is like a `NodeVisitor`, interpreting nodes one after each other.
|
193
|
+
It is built using Continuation Passing Style for stepping purposes.
|
194
|
+
|
195
|
+
Usage example:
|
196
|
+
|
197
|
+
| ast interpreter |
|
198
|
+
ast := Smalltalk current parse: 'foo 1+2+4'.
|
199
|
+
(SemanticAnalyzer on: Object) visit: ast.
|
200
|
+
|
201
|
+
ASTInterpreter new
|
202
|
+
interpret: ast nodes first;
|
203
|
+
result "Answers 7"!
|
204
|
+
|
205
|
+
!ASTInterpreter methodsFor: 'accessing'!
|
206
|
+
|
207
|
+
context
|
208
|
+
^ context ifNil: [ context := AIContext new ]
|
209
|
+
!
|
210
|
+
|
211
|
+
context: anAIContext
|
212
|
+
context := anAIContext
|
213
|
+
!
|
214
|
+
|
215
|
+
currentNode
|
216
|
+
^ currentNode
|
217
|
+
!
|
218
|
+
|
219
|
+
result
|
220
|
+
^ result
|
221
|
+
! !
|
222
|
+
|
223
|
+
!ASTInterpreter methodsFor: 'initialization'!
|
224
|
+
|
225
|
+
initialize
|
226
|
+
super initialize.
|
227
|
+
shouldReturn := false
|
228
|
+
! !
|
229
|
+
|
230
|
+
!ASTInterpreter methodsFor: 'interpreting'!
|
231
|
+
|
232
|
+
interpret: aNode
|
233
|
+
shouldReturn := false.
|
234
|
+
self interpret: aNode continue: [ :value |
|
235
|
+
result := value ]
|
236
|
+
!
|
237
|
+
|
238
|
+
interpret: aNode continue: aBlock
|
239
|
+
shouldReturn ifTrue: [ ^ self ].
|
240
|
+
|
241
|
+
aNode isNode
|
242
|
+
ifTrue: [
|
243
|
+
currentNode := aNode.
|
244
|
+
self interpretNode: aNode continue: [ :value |
|
245
|
+
self continue: aBlock value: value ] ]
|
246
|
+
ifFalse: [ self continue: aBlock value: aNode ]
|
247
|
+
!
|
248
|
+
|
249
|
+
interpretAssignmentNode: aNode continue: aBlock
|
250
|
+
self interpret: aNode right continue: [ :value |
|
251
|
+
self
|
252
|
+
continue: aBlock
|
253
|
+
value: (self assign: aNode left to: value) ]
|
254
|
+
!
|
255
|
+
|
256
|
+
interpretBlockNode: aNode continue: aBlock
|
257
|
+
"TODO: Context should be set"
|
258
|
+
|
259
|
+
self
|
260
|
+
continue: aBlock
|
261
|
+
value: [ self interpret: aNode nodes first; result ]
|
262
|
+
!
|
263
|
+
|
264
|
+
interpretBlockSequenceNode: aNode continue: aBlock
|
265
|
+
self interpretSequenceNode: aNode continue: aBlock
|
266
|
+
!
|
267
|
+
|
268
|
+
interpretCascadeNode: aNode continue: aBlock
|
269
|
+
"TODO: Handle super sends"
|
270
|
+
|
271
|
+
self interpret: aNode receiver continue: [ :receiver |
|
272
|
+
"Only interpret the receiver once"
|
273
|
+
aNode nodes do: [ :each | each receiver: receiver ].
|
274
|
+
|
275
|
+
self
|
276
|
+
interpretAll: aNode nodes allButLast
|
277
|
+
continue: [
|
278
|
+
self
|
279
|
+
interpret: aNode nodes last
|
280
|
+
continue: [ :val | self continue: aBlock value: val ] ] ]
|
281
|
+
!
|
282
|
+
|
283
|
+
interpretClassReferenceNode: aNode continue: aBlock
|
284
|
+
self continue: aBlock value: (Smalltalk current at: aNode value)
|
285
|
+
!
|
286
|
+
|
287
|
+
interpretDynamicArrayNode: aNode continue: aBlock
|
288
|
+
self interpretAll: aNode nodes continue: [ :array |
|
289
|
+
self
|
290
|
+
continue: aBlock
|
291
|
+
value: array ]
|
292
|
+
!
|
293
|
+
|
294
|
+
interpretDynamicDictionaryNode: aNode continue: aBlock
|
295
|
+
self interpretAll: aNode nodes continue: [ :array | | hashedCollection |
|
296
|
+
hashedCollection := HashedCollection new.
|
297
|
+
array do: [ :each | hashedCollection add: each ].
|
298
|
+
self
|
299
|
+
continue: aBlock
|
300
|
+
value: hashedCollection ]
|
301
|
+
!
|
302
|
+
|
303
|
+
interpretJSStatementNode: aNode continue: aBlock
|
304
|
+
shouldReturn := true.
|
305
|
+
self continue: aBlock value: (self eval: aNode source)
|
306
|
+
!
|
307
|
+
|
308
|
+
interpretMethodNode: aNode continue: aBlock
|
309
|
+
self interpretAll: aNode nodes continue: [ :array |
|
310
|
+
self continue: aBlock value: array first ]
|
311
|
+
!
|
312
|
+
|
313
|
+
interpretNode: aNode continue: aBlock
|
314
|
+
aNode interpreter: self continue: aBlock
|
315
|
+
!
|
316
|
+
|
317
|
+
interpretReturnNode: aNode continue: aBlock
|
318
|
+
self interpret: aNode nodes first continue: [ :value |
|
319
|
+
shouldReturn := true.
|
320
|
+
self continue: aBlock value: value ]
|
321
|
+
!
|
322
|
+
|
323
|
+
interpretSendNode: aNode continue: aBlock
|
324
|
+
"TODO: Handle super sends"
|
325
|
+
|
326
|
+
self interpret: aNode receiver continue: [ :receiver |
|
327
|
+
self interpretAll: aNode arguments continue: [ :args |
|
328
|
+
self
|
329
|
+
messageFromSendNode: aNode
|
330
|
+
arguments: args
|
331
|
+
do: [ :message |
|
332
|
+
self context pc: self context pc + 1.
|
333
|
+
self
|
334
|
+
continue: aBlock
|
335
|
+
value: (message sendTo: receiver) ] ] ]
|
336
|
+
!
|
337
|
+
|
338
|
+
interpretSequenceNode: aNode continue: aBlock
|
339
|
+
self interpretAll: aNode nodes continue: [ :array |
|
340
|
+
self continue: aBlock value: array last ]
|
341
|
+
!
|
342
|
+
|
343
|
+
interpretValueNode: aNode continue: aBlock
|
344
|
+
self continue: aBlock value: aNode value
|
345
|
+
!
|
346
|
+
|
347
|
+
interpretVariableNode: aNode continue: aBlock
|
348
|
+
self
|
349
|
+
continue: aBlock
|
350
|
+
value: (aNode binding isInstanceVar
|
351
|
+
ifTrue: [ self context receiver instVarAt: aNode value ]
|
352
|
+
ifFalse: [ self context localAt: aNode value ])
|
353
|
+
! !
|
354
|
+
|
355
|
+
!ASTInterpreter methodsFor: 'private'!
|
356
|
+
|
357
|
+
assign: aNode to: anObject
|
358
|
+
^ aNode binding isInstanceVar
|
359
|
+
ifTrue: [ self context receiver instVarAt: aNode value put: anObject ]
|
360
|
+
ifFalse: [ self context localAt: aNode value put: anObject ]
|
361
|
+
!
|
362
|
+
|
363
|
+
continue: aBlock value: anObject
|
364
|
+
result := anObject.
|
365
|
+
aBlock value: anObject
|
366
|
+
!
|
367
|
+
|
368
|
+
eval: aString
|
369
|
+
"Evaluate aString as JS source inside an JS function.
|
370
|
+
aString is not sandboxed."
|
371
|
+
|
372
|
+
| source function |
|
373
|
+
|
374
|
+
source := String streamContents: [ :str |
|
375
|
+
str nextPutAll: '(function('.
|
376
|
+
self context locals keys
|
377
|
+
do: [ :each | str nextPutAll: each ]
|
378
|
+
separatedBy: [ str nextPutAll: ',' ].
|
379
|
+
str
|
380
|
+
nextPutAll: '){ return (function() {';
|
381
|
+
nextPutAll: aString;
|
382
|
+
nextPutAll: '})() })' ].
|
383
|
+
|
384
|
+
function := Compiler new eval: source.
|
385
|
+
|
386
|
+
^ function valueWithPossibleArguments: self context locals values
|
387
|
+
!
|
388
|
+
|
389
|
+
interpretAll: aCollection continue: aBlock
|
390
|
+
self
|
391
|
+
interpretAll: aCollection
|
392
|
+
continue: aBlock
|
393
|
+
result: OrderedCollection new
|
394
|
+
!
|
395
|
+
|
396
|
+
interpretAll: nodes continue: aBlock result: aCollection
|
397
|
+
nodes isEmpty
|
398
|
+
ifTrue: [ self continue: aBlock value: aCollection ]
|
399
|
+
ifFalse: [
|
400
|
+
self interpret: nodes first continue: [:value |
|
401
|
+
self
|
402
|
+
interpretAll: nodes allButFirst
|
403
|
+
continue: aBlock
|
404
|
+
result: aCollection, { value } ] ]
|
405
|
+
!
|
406
|
+
|
407
|
+
messageFromSendNode: aSendNode arguments: aCollection do: aBlock
|
408
|
+
self
|
409
|
+
continue: aBlock
|
410
|
+
value: (Message new
|
411
|
+
selector: aSendNode selector;
|
412
|
+
arguments: aCollection;
|
413
|
+
yourself)
|
414
|
+
! !
|
415
|
+
|
416
|
+
!ASTInterpreter methodsFor: 'testing'!
|
417
|
+
|
418
|
+
shouldReturn
|
419
|
+
^ shouldReturn ifNil: [ false ]
|
420
|
+
! !
|
421
|
+
|
422
|
+
ASTInterpreter subclass: #ASTSteppingInterpreter
|
423
|
+
instanceVariableNames: 'continuation nextNode'
|
424
|
+
package: 'Compiler-Interpreter'!
|
425
|
+
!ASTSteppingInterpreter commentStamp!
|
426
|
+
ASTSteppingInterpreter is an interpreter with stepping capabilities.
|
427
|
+
Use `#step` to actually interpret the next node.
|
428
|
+
|
429
|
+
Usage example:
|
430
|
+
|
431
|
+
| ast interpreter |
|
432
|
+
ast := Smalltalk current parse: 'foo 1+2+4'.
|
433
|
+
(SemanticAnalyzer on: Object) visit: ast.
|
434
|
+
|
435
|
+
interpreter := ASTSteppingInterpreter new
|
436
|
+
interpret: ast nodes first;
|
437
|
+
yourself.
|
438
|
+
|
439
|
+
debugger step; step.
|
440
|
+
debugger step; step.
|
441
|
+
debugger result."Answers 1"
|
442
|
+
debugger step.
|
443
|
+
debugger result. "Answers 3"
|
444
|
+
debugger step.
|
445
|
+
debugger result. "Answers 7"!
|
446
|
+
|
447
|
+
!ASTSteppingInterpreter methodsFor: 'accessing'!
|
448
|
+
|
449
|
+
nextNode
|
450
|
+
^ nextNode
|
451
|
+
! !
|
452
|
+
|
453
|
+
!ASTSteppingInterpreter methodsFor: 'initialization'!
|
454
|
+
|
455
|
+
initialize
|
456
|
+
super initialize.
|
457
|
+
continuation := [ ]
|
458
|
+
! !
|
459
|
+
|
460
|
+
!ASTSteppingInterpreter methodsFor: 'interpreting'!
|
461
|
+
|
462
|
+
interpret: aNode continue: aBlock
|
463
|
+
nextNode := aNode.
|
464
|
+
continuation := [
|
465
|
+
super interpret: aNode continue: aBlock ]
|
466
|
+
! !
|
467
|
+
|
468
|
+
!ASTSteppingInterpreter methodsFor: 'stepping'!
|
469
|
+
|
470
|
+
step
|
471
|
+
continuation value
|
472
|
+
! !
|
473
|
+
|
474
|
+
!ASTSteppingInterpreter methodsFor: 'testing'!
|
475
|
+
|
476
|
+
atEnd
|
477
|
+
^ self shouldReturn or: [ self nextNode == self currentNode ]
|
478
|
+
! !
|
479
|
+
|
480
|
+
!Node methodsFor: '*Compiler-Interpreter'!
|
481
|
+
|
482
|
+
interpreter: anInterpreter continue: aBlock
|
483
|
+
^ anInterpreter interpretNode: self continue: aBlock
|
484
|
+
!
|
485
|
+
|
486
|
+
isSteppingNode
|
487
|
+
^ false
|
488
|
+
! !
|
489
|
+
|
490
|
+
!AssignmentNode methodsFor: '*Compiler-Interpreter'!
|
491
|
+
|
492
|
+
interpreter: anInterpreter continue: aBlock
|
493
|
+
^ anInterpreter interpretAssignmentNode: self continue: aBlock
|
494
|
+
!
|
495
|
+
|
496
|
+
isSteppingNode
|
497
|
+
^ true
|
498
|
+
! !
|
499
|
+
|
500
|
+
!BlockNode methodsFor: '*Compiler-Interpreter'!
|
501
|
+
|
502
|
+
interpreter: anInterpreter continue: aBlock
|
503
|
+
^ anInterpreter interpretBlockNode: self continue: aBlock
|
504
|
+
!
|
505
|
+
|
506
|
+
isSteppingNode
|
507
|
+
^ true
|
508
|
+
! !
|
509
|
+
|
510
|
+
!CascadeNode methodsFor: '*Compiler-Interpreter'!
|
511
|
+
|
512
|
+
interpreter: anInterpreter continue: aBlock
|
513
|
+
^ anInterpreter interpretCascadeNode: self continue: aBlock
|
514
|
+
! !
|
515
|
+
|
516
|
+
!DynamicArrayNode methodsFor: '*Compiler-Interpreter'!
|
517
|
+
|
518
|
+
interpreter: anInterpreter continue: aBlock
|
519
|
+
^ anInterpreter interpretDynamicArrayNode: self continue: aBlock
|
520
|
+
!
|
521
|
+
|
522
|
+
isSteppingNode
|
523
|
+
^ true
|
524
|
+
! !
|
525
|
+
|
526
|
+
!DynamicDictionaryNode methodsFor: '*Compiler-Interpreter'!
|
527
|
+
|
528
|
+
interpreter: anInterpreter continue: aBlock
|
529
|
+
^ anInterpreter interpretDynamicDictionaryNode: self continue: aBlock
|
530
|
+
!
|
531
|
+
|
532
|
+
isSteppingNode
|
533
|
+
^ true
|
534
|
+
! !
|
535
|
+
|
536
|
+
!JSStatementNode methodsFor: '*Compiler-Interpreter'!
|
537
|
+
|
538
|
+
interpreter: anInterpreter continue: aBlock
|
539
|
+
^ anInterpreter interpretJSStatementNode: self continue: aBlock
|
540
|
+
!
|
541
|
+
|
542
|
+
isSteppingNode
|
543
|
+
^ true
|
544
|
+
! !
|
545
|
+
|
546
|
+
!MethodNode methodsFor: '*Compiler-Interpreter'!
|
547
|
+
|
548
|
+
interpreter: anInterpreter continue: aBlock
|
549
|
+
^ anInterpreter interpretMethodNode: self continue: aBlock
|
550
|
+
! !
|
551
|
+
|
552
|
+
!ReturnNode methodsFor: '*Compiler-Interpreter'!
|
553
|
+
|
554
|
+
interpreter: anInterpreter continue: aBlock
|
555
|
+
^ anInterpreter interpretReturnNode: self continue: aBlock
|
556
|
+
! !
|
557
|
+
|
558
|
+
!SendNode methodsFor: '*Compiler-Interpreter'!
|
559
|
+
|
560
|
+
interpreter: anInterpreter continue: aBlock
|
561
|
+
^ anInterpreter interpretSendNode: self continue: aBlock
|
562
|
+
!
|
563
|
+
|
564
|
+
isSteppingNode
|
565
|
+
^ true
|
566
|
+
! !
|
567
|
+
|
568
|
+
!SequenceNode methodsFor: '*Compiler-Interpreter'!
|
569
|
+
|
570
|
+
interpreter: anInterpreter continue: aBlock
|
571
|
+
^ anInterpreter interpretSequenceNode: self continue: aBlock
|
572
|
+
! !
|
573
|
+
|
574
|
+
!BlockSequenceNode methodsFor: '*Compiler-Interpreter'!
|
575
|
+
|
576
|
+
interpreter: anInterpreter continue: aBlock
|
577
|
+
^ anInterpreter interpretBlockSequenceNode: self continue: aBlock
|
578
|
+
! !
|
579
|
+
|
580
|
+
!ValueNode methodsFor: '*Compiler-Interpreter'!
|
581
|
+
|
582
|
+
interpreter: anInterpreter continue: aBlock
|
583
|
+
^ anInterpreter interpretValueNode: self continue: aBlock
|
584
|
+
! !
|
585
|
+
|
586
|
+
!VariableNode methodsFor: '*Compiler-Interpreter'!
|
587
|
+
|
588
|
+
interpreter: anInterpreter continue: aBlock
|
589
|
+
^ anInterpreter interpretVariableNode: self continue: aBlock
|
590
|
+
! !
|
591
|
+
|
592
|
+
!ClassReferenceNode methodsFor: '*Compiler-Interpreter'!
|
593
|
+
|
594
|
+
interpreter: anInterpreter continue: aBlock
|
595
|
+
^ anInterpreter interpretClassReferenceNode: self continue: aBlock
|
596
|
+
! !
|
597
|
+
|