[squeak-dev] [Etoys, Compiler] Help wanted: Trying to embed SyntaxMorphs into other tiles
Eliot Miranda
eliot.miranda at gmail.com
Fri Mar 27 20:33:35 UTC 2020
Hi Christoph,
> On Mar 27, 2020, at 12:45 PM, Thiede, Christoph <Christoph.Thiede at student.hpi.uni-potsdam.de> wrote:
>
>
> Hi all! :-)
>
> Just an update of the decompilation question:
> Christoph Thiede wrote
> 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?
> The general approach seems to be correct, but I think I found an error in the decompilation of literal variables such as Array. I sent Compiler-ct.425 to the inbox which should fix this issue.
I moved this to inbox. It looks correct. Can you check it against the old bytecode set too? We don’t want it to break old-style blocks.
>
> I am going to complete the implementation of SyntaxMorph >> #parseNode :-)
>
> Best,
> Christoph
> Von: Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im Auftrag von Thiede, Christoph
> Gesendet: Dienstag, 15. Oktober 2019 21:08:24
> An: squeak-dev at lists.squeakfoundation.org
> Betreff: [squeak-dev] [Etoys, Compiler] Help wanted: Trying to embed SyntaxMorphs into other tiles
>
> 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/20200327/718eed04/attachment.html>
More information about the Squeak-dev
mailing list
|