I might have a clue as to what's going on with the optimization. This is 
beginning to look like it's related to the FT_DIRECT_BRANCHES (unconditional 
branches) optimization. More digging with the debugger, except now with 
Hans-Peter's sample function:


[0] WWW
[1] ws←3↓1⊃⍎')WSID' 
[2] → x                                                                         
                   
[3] x:
[4] marker ← ⊂'⍝','∆∆∆'                                                         
                          


Here's the tokens we start out with before the FT_LABEL_LITERAL optimization 
(starting at the branch statement on line 2)

[pc 9] TOK_SYMBOL
[pc 10] TOK_R_ARROW
[pc 11] TOK_ENDL
[pc 12] TOK_APL_VALUE_1.            (start of line 4)
[pc 13] TOK_APL_F12_COMMA

The FT_LABEL_LITERAL rewrites the tokens as:

[pc 9] TOK_APL_VALUE1.     (value 12)
[pc 10] TOK_R_ARROW
[pc 11] TOK_ENDL
[pc 12] TOK_APL_VALUE_1.            (start of line 4)
[pc 13] TOK_APL_F12_COMMA

The FT_DIRECT_BRANCHES optimization in optnimize_unconditional replaces pc 9 
with the optimization of TOK_GOTO_PC as follows:

[pc 9] TOK_GOTO_PC (pc 12)
[pc 10] TOK_ENDL
[pc 11] TOK_VOID
[pc 12] TOK_APL_VALUE_1             (start of line 4)
[pc 13] TOK_APL_F12_COMMA

optimize_unconditional_branches then calls remove_TOK_VOID to collapse the 
tokens (what I interpret to be "removing a No-op"). 

The resulting token string is collapsed into the following:

[pc 9] TOK_GOTO_PC (pc 12)
[pc 10] TOK_ENDL
[pc 11] TOK_APL_VALUE_1             (new start of line 4)
[pc 12] TOK_APL_F12_COMMA


When execuring, the interpreter is jumping to PC 12 - which inow points to the 
middle of line 4, not the beginning. The SYNTAX ERROR message seems to be 
pointing to the "," (ravel0 operator in line 4:

SYNTAX ERROR
WWW[4]  marker←⊂'⍝','∆∆∆'
        ^          ^
Whidh would make sense if the interpreter is jumping to PC 12 instead of 11 in 
the optimized code.


While in the debugger, I changed the value of the target PC for the TOK_GOTO_PC 
to 11 (the correct start of line 4 of the optimized function. No syntax error. 

Seems that the optimization has to go back and fix up any hard-coded PCs in 
TOK_GOTO_PC tokens.

- paul


> On Feb 12, 2025, at 9:13 AM, Dr. Jürgen Sauermann 
> <m...@xn--jrgen-sauermann-zvb.de> wrote:
> 
> Hi,
> 
> thanks you all for your hints to the problem.
> 
> It very much looks like the problem was caused by an optimization.
> I cannot see why it fails, but until then I have completely disabled
> it (even if enabled in Performance.def).
> 
> SVN 1836.
> 
> Best Regards,
> Jürgen
> 
> 

Reply via email to