This was a funny one! Please review. :-)<br>
<br>
Best,<br>
Christoph<br>
<br>
<b>=============== Summary ===============</b><br>
<br>
Change Set:        fix-directedSuperSend-frameSize<br>
Date:            14 September 2022<br>
Author:            Christoph Thiede<br>
<br>
Fixes omission fault in encoder that caused an insufficient frame size for compiled blocks with a directed super send. While the Cog VM was able to execute these methods anyway (probably performing invalid mem accesses?), the debugger aka image simulator failed to do so.<br>
<br>
<b>=============== Diff ===============</b><br>
<br>
<b>CompilerTest>>testDirectedSuperSendStackSize {tests - syntax} · ct 9/14/2022 16:35</b><br>
<font color="#FF0000">+ testDirectedSuperSendStackSize<br>
+ <br>
+     {13. CompiledCode smallFrameSize.<br>
+     14. CompiledCode fullFrameSize}<br>
+         pairsDo: [:numTemps :expectedBlockFrame |<br>
+         | temps compiledMethod methodNode compiledBlock |<br>
+         temps := (Character alphabet first: numTemps) asArray.<br>
+         methodNode := Compiler new<br>
+             compile: 'griffle<br>
+ |' , (temps joinSeparatedBy: $ ) , '|<br>
+ ' , (temps withIndexCollect: [:t :i | '' , t , ':=' , i , '. ']) join , '<br>
+ [' , (temps joinSeparatedBy: $+) , '.<br>
+ super someDirectedSend: a] value.'<br>
+             in: nil class<br>
+             environment: nil environment<br>
+             notifying: nil<br>
+             ifFail: [^ self fail].<br>
+         compiledMethod := methodNode generateWithTempNames.<br>
+         <br>
+         self<br>
+             assert: compiledMethod equals: compiledMethod codeLiterals first;<br>
+             assert: 2 equals: compiledMethod codeLiterals size.<br>
+         self assert: CompiledCode fullFrameSize equals: compiledMethod frameSize.<br>
+         compiledBlock := compiledMethod codeLiterals second.<br>
+         self<br>
+             assert: compiledBlock isCompiledBlock;<br>
+             assert: expectedBlockFrame equals: compiledBlock frameSize].</font><br>
<br>
<b>SelectorNode>>emitCode:args:encoder:super: {code generation} · ct 9/14/2022 16:19 (changed)</b><br>
emitCode: stack args: nArgs encoder: encoder super: supered<br>
    code < Send ifTrue:<br>
        [self internalEncodingError].<br>
<s><font color="#0000FF">-     stack pop: nArgs.<br>
</font></s>    supered<br>
        ifTrue:<br>
            [(encoder supportsFullBlocks<br>
              and: [encoder generatingFullBlock])<br>
                ifTrue:<br>
<s><font color="#0000FF">-                     [encoder genPushLiteral: (encoder sharableLitIndex: encoder classEncoding).<br>
</font></s><font color="#FF0000">+                     [stack push: 1. "superclass"<br>
+                      encoder genPushLiteral: (encoder sharableLitIndex: encoder classEncoding).<br>
+                      stack pop: 1 "superclass".<br>
+                      stack pop: nArgs. <br>
</font>                     encoder genSendDirectedSuper: index numArgs: nArgs]<br>
<s><font color="#0000FF">-                 ifFalse: [encoder genSendSuper: index numArgs: nArgs]]<br>
</font></s><font color="#FF0000">+                 ifFalse:<br>
+                     [stack pop: nArgs.<br>
+                      encoder genSendSuper: index numArgs: nArgs]]<br>
</font>        ifFalse:<br>
<s><font color="#0000FF">-             [encoder genSend: index numArgs: nArgs]<br>
</font></s><font color="#FF0000">+             [stack pop: nArgs.<br>
+              encoder genSend: index numArgs: nArgs]</font><br>
<br>
["fix-directedSuperSend-frameSize.1.cs"]<br>
<br>
<font color="#808080">---<br>
</font><font color="#808080"><i>Sent from </i></font><font color="#808080"><i><a href="https://github.com/hpi-swa-lab/squeak-inbox-talk"><u><font color="#808080">Squeak Inbox Talk</font></u></a></i></font><br>
["fix-directedSuperSend-frameSize.1.cs"]