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.
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,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
+