[squeak-dev] [Etoys, Compiler] Help wanted: Trying to embed SyntaxMorphs into other tiles

Thiede, Christoph Christoph.Thiede at student.hpi.uni-potsdam.de
Tue Oct 15 19:08:24 UTC 2019


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 at lists.squeakfoundation.org> im Auftrag von commits at source.squeak.org <commits at source.squeak.org>
Gesendet: Dienstag, 15. Oktober 2019 14:46 Uhr
An: squeak-dev at 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!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20191015/66a3de0b/attachment.html>


More information about the Squeak-dev mailing list