Hi all,
I'm currently trying to implement #parseNodeWith: on SyntaxMorph, in order to embed SyntaxMorphs into regular tiles. (Did this ever work in past?)
I'm afraid the attempt in the commit below does not work yet; you can create a script editor, but parsing is erroneous, so you cannot execute the script.
To reproduce:
Compile the following:
MyPlayer >> examplePlayerCode
self forward: 6 * 7.
self turn: (11 raisedTo: 13 modulo: 97)
and evaluate:
| e p | p := Morph new openInWorld assuredPlayer. e := (MyPlayer >> #examplePlayerCode) decompile asScriptEditorFor: p. e openInHand.
In Player>>#acceptScript:for:, #generate: is called on node, and when I decompile the result, I get a strange result:
examplePlayerCodeTest
self forward: 6 * 7.
self
forward: (#forward: forward: #forward:).
I don't know how to use #generate: exactly, but other senders usually appear to recompile a method before passing it to #generate:.
For comparison:
[ (Collection >> #asArray) decompile generate: CompiledMethodTrailer empty ] fails, but
[ m := (Collection >> #asArray) decompile.
m := Compiler new compile: m in: Collection notifying: nil ifFail: #foo. m generate: CompiledMethodTrailer empty ] works.
Why is that recompilation required but decompilation is insufficient? Is this some bug, or is it expected behavior?
However, in the case of SyntaxMorph, I don't know how to recompile the node before, as a SyntaxMorph should be able to represent a node of an arbitrary type that must not be constrained to a MessageNode. So how could I solve the problem to generate code from SyntaxMorphs?
tl;dr: What is the full story of #generate: and how can it be made to work in this example?
Many thanks in advance! :-)
Best,
Christoph
________________________________ Von: Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von commits@source.squeak.org commits@source.squeak.org Gesendet: Dienstag, 15. Oktober 2019 14:46 Uhr An: squeak-dev@lists.squeakfoundation.org Betreff: [squeak-dev] The Inbox: EToys-ct.367.mcz
A new version of EToys was added to project The Inbox: http://source.squeak.org/inbox/EToys-ct.367.mcz
==================== Summary ====================
Name: EToys-ct.367 Author: ct Time: 15 October 2019, 2:46:24.862129 pm UUID: 1394344f-b1e3-5640-a13a-70c5dffd51f4 Ancestors: EToys-mt.361
Allow for embedding SyntaxMorphs into test tiles.
=============== Diff against EToys-mt.361 ===============
Item was added: + ----- Method: SyntaxMorph>>parseNodeWith:asStatement: (in category '*Etoys-Squeakland-code generation') ----- + parseNodeWith: encoder asStatement: aBoolean + + ^ self parseNode!