<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le dim. 29 mars 2020 à 15:31, Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de">Christoph.Thiede@student.hpi.uni-potsdam.de</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">



<div>

<div id="gmail-m_-5151355506344077127divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif" dir="ltr">
<p>Hey Nicolas,</p>
<p><br>
</p>
<p>> > <span style="font-size:12pt">Seriously, did the Decompiler ever reliably produce re-generatable parse trees in the past? But it should do so, shouldn't it? :-)</span></p>
<div>> </div>
<div>> Maybe it did (see below). But I'm not sure that is was a feature...</div>
<div>> Isn't it mostly used for replacing absent source code... that will eventually be repasrsed ? (!)</div>
<div><br>
</div>
<div>Well, it may be disputable whether decompiled trees should be optimized, but returning trees from anywhere that do not satisfy particular validity conditions (such as index being only set iff a special selector should be encoded) definitively appears wrong
 and buggy to me.</div>
<div><br>
</div>
<div>> <span style="font-size:12pt">As you see, index i passed as argument to #code: keyword (? it's because it's documenting the output, not the input); </span><span style="font-size:12pt">then code: parameter shadowing the index instance variable...</span>
<div><br>
</div>
<div>So would you agree to patch <span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">DecompilerConstructor >> #codeAnyLiteral:,
 too? :)</span></div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><br>
</span></div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">> <span>After parsing, there are other compilation phases, for
 analyzing variable scope, clean blocks, etc...</span></span></div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><span><br>
</span></span></div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><span>Hm ... the Compiler divides the compilation phase into
 two main stages (see #evaluateCue:ifFail:): The first stage is actual "compilation", that is translating the source into a parse tree in the parser. The second stage is to generate a compiled method, which is done by simply passing #generate(WithTempNames)
 to the parse tree. For me, this appears to be a good logical separation.</span></span></div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><span>Things like scope analysis are done, as you say, in the
 second stage, of course. But I would not expect that optimizations such as special selectors are already applied in the first stage (this was also kind of confusing when I tried to debug certain optimizations such as of #caseOf:). Isn't it the general idea
 of a parse tree to have an intermediary representation between a primitive code string and a VM-specific set of bytecodes? Certain optimizations are not even relevant for other parser clients, for example, any code analysis tools.</span></span></div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><span>It would be great to decouple these stages even more -
 let's say, we can move all the #<span>noteSpecialSelector: and #transform: senders and apply it directly before, or inside of #generate, only. A visitor sounds like a good pattern for this, I did not yet have many opportunities to apply this pattern in practice.</span></span></span></div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><span><span><br>
</span></span></span></div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><span><span>> </span></span></span>Pharo team did a complete
 re-engineering of compiler (OpalCompiler) that you culd study.<span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><span><span>
<div><br>
</div>
<div>Wow, I <a href="https://de.slideshare.net/jressia/opal-compiler" target="_blank">
read some</a><a href="https://de.slideshare.net/jressia/opal-compiler" target="_blank"> slides</a> about OpalCompiler and it sounds great! Allow me one question, why didn't we already adapt this concept in Squeak, what are the disadvantages of this redesign?
 We could achieve so much more if everyone was pulling in the same direction (I know that it was the Pharo people to fork Squeak, however ...).</div>
<div><br></div></span></span></span></div></div></div></div></blockquote><div><br></div><div>One disadvantage is that it's about twice slower.</div><div>The is because byte code instructions are reified.</div><div>Thus instead of source -> parse tree -> compiledMethod</div><div>the flow is source -> parse tree -> instructions -> compiledMethod</div><div><br></div><div>It would be possible to make the instructions intermediate representation optional though.</div><div><br></div><div>The second disadvantage is that, IMO, it's a bit over engineered.</div><div>One consequence is that patching the compiler for accepting methods > 15 arguments (required for Smallapack),</div><div>or for accepting legacy FFI syntax took me more efforts than patching the legacy squeak compiler.</div><div><br></div><div>However, it's a nice piece of code.</div><div>It should not be too hard to port to Squeak.</div><div>Though, it relies on revamped parse tree nodes (those of refactoring browser, with slight evolutions...).<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div id="gmail-m_-5151355506344077127divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif" dir="ltr"><div><div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px"><span><span><div>
</div>
<div>Best,</div>
<div>Christoph</div>
</span></span></span></div>
</div>
<p></p>
<div id="gmail-m_-5151355506344077127Signature">
<div id="gmail-m_-5151355506344077127divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div name="divtagdefaultwrapper">
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-5151355506344077127divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>Von:</b> Squeak-dev <<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>> im Auftrag von Nicolas Cellier <<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmail.com</a>><br>
<b>Gesendet:</b> Samstag, 28. März 2020 14:09:15<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] Decompiler buggy (was: AW: [Etoys, Compiler] Help wanted: Trying to embed SyntaxMorphs into other tiles)</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div dir="ltr">Hi Christoph,<br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Le sam. 28 mars 2020 à 01:12, Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de" target="_blank">Christoph.Thiede@student.hpi.uni-potsdam.de</a>> a écrit :<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif" dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p>Hi Eliot, hi all,</p>
<p><br>
</p>
<p>ah, I finally found the bug, but this was a really hard hunt! :D</p>
<p><br>
</p>
<p>The solution is absolutely simple, again:</p>
<p><br>
</p>
</div>
</div>
<blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<div>codeAnySelector: selector</div>
<p></p>
</div>
</div>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<div><br>
</div>
<p></p>
</div>
</div>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<div><span style="white-space:pre-wrap"></span>^SelectorNode new</div>
<p></p>
</div>
</div>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<div><span style="white-space:pre-wrap"></span>key: selector</div>
<p></p>
</div>
</div>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<div>+<span style="white-space:pre-wrap"> </span>index: nil</div>
<p></p>
</div>
</div>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<div>-<span style="white-space:pre-wrap"> </span>index: 0</div>
<p></p>
</div>
</div>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<div><span style="white-space:pre-wrap"></span>type: SendType</div>
<p></p>
</div>
</div>
</blockquote>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<div></div>
<br>
</div>
</div>
</div>
</div>
</blockquote>
<div>Good find! <br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif" dir="ltr">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<p><span style="font-size:12pt">Seriously, did the Decompiler ever reliably produce re-generatable parse trees in the past? But it should do so, shouldn't it? :-)</span><br>
</p>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
</div>
</div>
</div>
</blockquote>
<div>Maybe it did (see below). But I'm not sure that is was a feature...</div>
<div>Isn't it mostly used for replacing absent source code... that will eventually be repasrsed ? (!)<br>
</div>
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif" dir="ltr">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
Before the above patch, the following example was broken, too:</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
<blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div>class := Object newSubclass.</div>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div>class compile: 'foo <span style="font-size:12pt">^ 1 + 1'.</span></div>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div>(class >> #foo) decompile generate valueWithReceiver: class new arguments: #(). "SmallInteger does not understand #foo"</div>
</div>
</blockquote>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div></div>
<div></div>
<div></div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
Now I'm wondering what are the actual semantics of the index variable. Its method comment about "<span>various uses depending on the class of the receiver" is quite generic - do you know some more details about this? </span></div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<span>Should we also use nil instead of 0 in DecompilerConstructor >> #<span>codeAnyLiteral:</span>? At first glance, senders of #encodeLiteral: do not appear to set it to zero manually (so they leave it nil), but unless there is any documentation of the index
 meaning, this is speculation only, as I could not find any other example where decompilation + regeneration produce a method that cannot be executed properly.</span></div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div>It's very low level, some kind of reflexion of byteCode encoding.</div>
<div>Once upon a time (< Squeak4.0), the code was even more horrible to follow!</div>
<div><br>
</div>
<div>LeafNode>>key: object index: i type: type<br>
    self key: object code: (self code: i type: type)</div>
<div><br>
</div>
<div>LeafNode>>code: index type: type<br>
    index isNil <br>
         ifTrue: [^type negated].<br>
     (CodeLimits at: type) > index <br>
         ifTrue: [^(CodeBases at: type) + index].<br>
     ^type * 256 + index</div>
<div><br>
</div>
<div>As you see, index i passed as argument to #code: keyword (? it's because it's documenting the output, not the input);</div>
<div>then code: parameter shadowing the index instance variable...</div>
<div>And the index instance variable was not set... Kind of brainfuck.</div>
<div><br>
</div>
<div>We still have code:type: and index variable shadowing in current trunk...<br>
</div>
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif" dir="ltr">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
By the way, here is another interesting one-liner:</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
</div>
</div>
<blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<span>(Object newSubclass environment: self environment; compile: 'foo ^(ObjectTracer on: nil) class'; >> #foo) decompile generate valueWithReceiver: nil arguments: #()</span><br>
</div>
</div>
</div>
</blockquote>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
Interestingly, it opens a debugger - in other words, #class is sent as a regular selector. The decompiler does not know anything about special selectors at the moment. Is this desired behavior? I wonder whether it should be the parse tree's responsibility to
 install such kind of optimizations, rather than the responsibility of the Compiler.</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
Because in reality, Compiler is not the only client that requests code generation from parse trees. Etoys is a good example for a client from another domain that uses this service, too. Should all these other clients be withheld these important optimizations
 of Smalltalk expressions?</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div>After parsing, there are other compilation phases, for analyzing variable scope, clean blocks, etc...</div>
<div>It's possible to scatter the implementation of various phases in the nodes themselves, but the trend is rather to use a visitor pattern;</div>
<div>it gather the handling in some specialized classes that hold all the states (rather than pass them as message arguments).</div>
<div>Pharo team did a complete re-engineering of compiler (OpalCompiler) that you culd study.<br>
</div>
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif" dir="ltr">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
Best,</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
Christoph</div>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
<div style="color:rgb(0,0,0)">
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>Von:</b> Thiede, Christoph<br>
<b>Gesendet:</b> Freitag, 27. März 2020 23:16 Uhr<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> AW: [squeak-dev] [Etoys, Compiler] Help wanted: Trying to embed SyntaxMorphs into other tiles</font>
<div> </div>
</div>
<div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p>Hi Eliot,</p>
<p><br>
</p>
<p>> <span style="font-size:12pt">It looks correct.  Can you check it against the old bytecode set too?  We don’t want it to break old-style blocks.</span></p>
<div><br>
</div>
<div>Good point. I ran</div>
<div><br>
</div>
</div>
<blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div><span>(Object >> #asOrderedCollection) decompile generate valueWithReceiver: 42 arguments: #().</span></div>
</div>
</blockquote>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div><span><br>
</span></div>
<div><span>for both bytecode sets, and both were fine.</span></div>
<div><span><br>
</span></div>
<div>But:</div>
<div><br>
</div>
</div>
<blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px">
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div><span>(Collection >> #asArray) decompile generate valueWithReceiver: {42} asOrderedCollection arguments: #().</span></div>
</div>
</blockquote>
<div dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div><span><br>
</span></div>
<div><span>breaks - in both bytecode sets. This is weird.</span></div>
<div><span>I will have a look into it, maybe I can discover what's wrong.</span></div>
<div><span><br>
</span></div>
<div><span>In addition, I propose to write tests for this. But it's not the goal of the decompiler to yield exactly the same parse tree or source code as the original method consisted of? In this case, we will need to write a lot of fixtures for the tests.</span></div>
<div><span><br>
</span></div>
<div><span>Best,</span></div>
<div><span>Christoph</span></div>
<div><span></span></div>
<p></p>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Signature">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div name="divtagdefaultwrapper">
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
<br>
<br>
<div style="color:rgb(0,0,0)">
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>Von:</b> Squeak-dev <<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>>
 im Auftrag von Eliot Miranda <<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>><br>
<b>Gesendet:</b> Freitag, 27. März 2020 21:33 Uhr<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] [Etoys, Compiler] Help wanted: Trying to embed SyntaxMorphs into other tiles</font>
<div> </div>
</div>
<div>
<div dir="ltr">Hi Christoph,</div>
<div dir="ltr"><br>
<blockquote type="cite">On Mar 27, 2020, at 12:45 PM, Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de" target="_blank">Christoph.Thiede@student.hpi.uni-potsdam.de</a>> wrote:<br>
<br>
</blockquote>
</div>
<blockquote type="cite">
<div dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<span style="color:rgb(51,51,51);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.44px">Hi all! :-)</span><br style="color:rgb(51,51,51);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.44px">
<br style="color:rgb(51,51,51);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.44px">
<span style="color:rgb(51,51,51);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.44px">Just an update of the decompilation question:</span><br style="color:rgb(51,51,51);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.44px">
<blockquote style="color:rgb(51,51,51);border-color:rgb(49,76,87);border-left:2px solid rgb(49,76,87);margin:1.4em 1.8em;font-size:0.9em;font-family:Verdana,Geneva,Helvetica,Arial,sans-serif">
<div style="border-color:rgb(184,229,245);border-top:1px solid rgb(184,229,245);display:inline-block;padding:0px 1em">
<div style="padding:0.5em 0px;font-weight:bold">Christoph Thiede wrote</div>
<div style="overflow:hidden;margin:0.5em 0px">I don't know how to use #generate: exactly, but other senders usually appear to recompile a method before passing it to #generate:.<br>
For comparison:<br>
<br>
[ (Collection >> #asArray) decompile generate: CompiledMethodTrailer empty ] fails, but<br>
<br>
[ m := (Collection >> #asArray) decompile.<br>
<br>
  m := Compiler new compile: m in: Collection notifying: nil ifFail: #foo.<br>
  m generate: CompiledMethodTrailer empty ] works.<br>
Why is that recompilation required but decompilation is insufficient? Is this some bug, or is it expected behavior?</div>
</div>
</blockquote>
<span style="color:rgb(51,51,51);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.44px">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.</span><br style="color:rgb(51,51,51);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.44px">
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
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.
<div><br>
<blockquote type="cite">
<div dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Signature">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div name="divtagdefaultwrapper">
<div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Item.MessagePartBody">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Item.MessageUniqueBody" style="font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif,serif,EmojiFont">
<div dir="ltr">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper"><font face="Calibri,Helvetica,sans-serif,EmojiFont,Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Signature">
<div style="margin:0px"><font style="font-family:Calibri,Arial,Helvetica,sans-serif,serif,EmojiFont">
<div><font size="3" color="black"><span style="font-size:12pt"><a href="http://www.hpi.de/" rel="noopener noreferrer" id="gmail-m_-5151355506344077127gmail-m_8622492256078417255LPNoLP" target="_blank"><font size="2"><span id="gmail-m_-5151355506344077127gmail-m_8622492256078417255LPlnk909538"><font color="#757B80"></font></span></font></a></span></font></div>
</font></div>
</div>
</font></div>
</div>
</div>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Item.MessagePartBody"><br>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Item.MessagePartBody">I am going to complete the implementation of SyntaxMorph >> #parseNode :-)</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Item.MessagePartBody"><br>
</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Item.MessagePartBody">Best,</div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255Item.MessagePartBody">Christoph</div>
</div>
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>Von:</b> Squeak-dev <<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>>
 im Auftrag von Thiede, Christoph<br>
<b>Gesendet:</b> Dienstag, 15. Oktober 2019 21:08:24<br>
<b>An:</b> <a href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">
squeak-dev@lists.squeakfoundation.org</a><br>
<b>Betreff:</b> [squeak-dev] [Etoys, Compiler] Help wanted: Trying to embed SyntaxMorphs into other tiles</font>
<div> </div>
</div>
<div>
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
Hi all,</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
I'm currently trying to implement #parseNodeWith: on SyntaxMorph, in order to embed SyntaxMorphs into regular tiles. (Did this ever work in past?)</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
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.</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">To reproduce:</span></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">Compile the following:</span></p>
<p></p>
<p></p>
<blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px">
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div><span style="font-size:8pt">MyPlayer >> examplePlayerCode</span></div>
<p></p>
<p></p>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div>
<div><span style="white-space:pre-wrap;font-size:8pt"></span><span style="font-size:8pt">self forward: 6 * 7.</span></div>
</div>
<p></p>
<p></p>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div>
<div><span style="white-space:pre-wrap;font-size:8pt"></span><span style="font-size:8pt">self turn: (11 raisedTo: 13 modulo: 97)</span></div>
</div>
<p></p>
<p></p>
</blockquote>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div></div>
<span style="font-size:8pt">and evaluate:</span>
<p></p>
<p></p>
<blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px">
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">| e p |</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">p := Morph new openInWorld assuredPlayer.</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">e := (MyPlayer >> #examplePlayerCode) decompile asScriptEditorFor: p.</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">e openInHand.</span></div>
<p></p>
<p></p>
</blockquote>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">In Player>>#acceptScript:for:, #generate: is called on node, and
</span><span style="font-size:8pt">when </span><span style="font-size:8pt">I decompile the result, I get a strange result:</span><br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<br>
</p>
<p></p>
<blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px">
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div><span style="font-size:8pt">examplePlayerCodeTest</span></div>
<p></p>
<p></p>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div><span style="white-space:pre-wrap;font-size:8pt"></span><span style="font-size:8pt">self forward: 6 * 7.</span></div>
<p></p>
<p></p>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div><span style="white-space:pre-wrap;font-size:8pt"></span><span style="font-size:8pt">self</span></div>
<p></p>
<p></p>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div><span style="white-space:pre-wrap;font-size:8pt"></span><span style="font-size:8pt">forward: (#forward: forward: #forward:).</span></div>
<p></p>
<p></p>
</blockquote>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
</p>
<div></div>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
I don't know how to use #generate: exactly, but other senders usually appear to recompile a method before passing it to #generate:.<br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">For comparison:</span></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">[ </span><span><span style="font-size:8pt">(Collection >> #asArray) decompile generate: CompiledMethodTrailer empty </span><span style="font-size:8pt">] fails, but</span></span></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<span style="font-size:8pt">[ </span><span style="font-size:8pt">m := (Collection >> #asArray) decompile.</span><span></span></p>
<div><span style="font-size:8pt">  m := Compiler new compile: m in: Collection notifying: nil ifFail: #foo.</span></div>
<div><span style="font-size:8pt">  m generate: CompiledMethodTrailer empty ] works.</span></div>
<p></p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
Why is that recompilation required but decompilation is insufficient? Is this some bug, or is it expected behavior?</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
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?</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
tl;dr: What is the full story of #generate: and how can it be made to work in this example?</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
Many thanks in advance! :-)</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
<br>
</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
Best,</p>
<p style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols;font-size:16px">
Christoph</p>
<p></p>
<br>
<div style="color:rgb(0,0,0)">
<div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-5151355506344077127gmail-m_8622492256078417255x_divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>Von:</b> Squeak-dev <<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>>
 im Auftrag von <a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a> <<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>><br>
<b>Gesendet:</b> Dienstag, 15. Oktober 2019 14:46 Uhr<br>
<b>An:</b> <a href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">
squeak-dev@lists.squeakfoundation.org</a><br>
<b>Betreff:</b> [squeak-dev] The Inbox: EToys-ct.367.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt">
<div>A new version of EToys was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/EToys-ct.367.mcz" id="gmail-m_-5151355506344077127gmail-m_8622492256078417255LPlnk963010" target="_blank">http://source.squeak.org/inbox/EToys-ct.367.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: EToys-ct.367<br>
Author: ct<br>
Time: 15 October 2019, 2:46:24.862129 pm<br>
UUID: 1394344f-b1e3-5640-a13a-70c5dffd51f4<br>
Ancestors: EToys-mt.361<br>
<br>
Allow for embedding SyntaxMorphs into test tiles.<br>
<br>
=============== Diff against EToys-mt.361 ===============<br>
<br>
Item was added:<br>
+ ----- Method: SyntaxMorph>>parseNodeWith:asStatement: (in category '*Etoys-Squeakland-code generation') -----<br>
+ parseNodeWith: encoder asStatement: aBoolean<br>
+ <br>
+        ^ self parseNode!<br>
<br>
<br>
</div>
</span></font></div>
</div>
</div>
</div>
<span></span><br>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
</blockquote>
</div>
</div>
</div>
</div>

<br>
</blockquote></div></div>