Christoph Thiede uploaded a new version of EToys to project The Inbox:
http://source.squeak.org/inbox/EToys-ct.390.mcz==================== Summary ====================
Name: EToys-ct.390
Author: ct
Time: 27 March 2020, 9:39:10.801235 pm
UUID: d54c1d9b-6381-784b-8a2d-497804eab2a7
Ancestors: EToys-eem.388
Refines parsing of SyntaxMorphs, respecting asStatement: aBoolean
If a statement is requested, don't return the whole method to avoid nested methods. Also cleans up ScriptEditorMorph >> #parseNodeWith: (strengthening polymorphy).
=============== Diff against EToys-eem.388 ===============
Item was changed:
----- Method: ScriptEditorMorph>>parseNodeWith: (in category '*Etoys-Squeakland-other') -----
parseNodeWith: encoder
| statements ret |
statements := WriteStream on: (Array new: self tileRows size).
+ self tileRows do: [:row |
+ row do: [:morph |
+ (morph respondsTo: #parseNodeWith:asStatement:) ifTrue: [
+ statements nextPut: (morph parseNodeWith: encoder asStatement: true)]]].
- self tileRows do: [:r |
- r do: [:m |
- ((m isKindOf: TileMorph)
- or: [(m isKindOf: CompoundTileMorph)
- or: [m isKindOf: PhraseTileMorph]]) ifTrue: [
- statements nextPut: (m parseNodeWith: encoder asStatement: true)]]].
statements := statements contents.
ret := ReturnNode new expr: (encoder encodeVariable: 'self').
+ ^ BlockNode new
+ arguments: #()
+ statements: (statements copyWith: ret)
+ returns: true
+ from: encoder.!
- ^ BlockNode new arguments: #() statements: (statements copyWith: ret) returns: true from: encoder.
- !
Item was changed:
----- Method: SyntaxMorph>>parseNodeWith:asStatement: (in category '*Etoys-Squeakland-code generation') -----
parseNodeWith: encoder asStatement: aBoolean
+ | methodNode |
+ methodNode := self parseNodeWith: encoder.
+ ^ aBoolean
+ ifFalse: [methodNode]
+ ifTrue: [methodNode block]!
- ^ self parseNode!