Give argument lists their own link, not each argument's .right

An identifier's subscript list, a unary's operand and a binary's right-hand
side all lived in the same field the argument chain used, so ABS(-9),
MOD(A#, B# + 12) and any array reference in a parameter list were counted as
extra arguments and refused. Subscript lists move to .expr and arguments now
chain through a dedicated .next.

This is the third time the same collision was fixed; the first two moved it
along rather than removing it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-31 11:58:15 -04:00
parent 5b7b7d2ed9
commit f4007d80d4
14 changed files with 133 additions and 55 deletions

View File

@@ -0,0 +1,19 @@
10 REM An array reference used as a function argument, and as one of several.
20 REM An identifier's subscript list used to hang off .right, which is also
30 REM where an argument list chains its arguments -- so the arity counter walked
40 REM straight into the subscripts and refused the call. TODO.md section 4.
50 DIM C#(4)
60 C#(1) = -9
70 C#(2) = 7
80 PRINT ABS(C#(1))
90 PRINT MOD(C#(2), 4)
100 PRINT MOD(C#(2), C#(1) + 12)
110 DIM S$(2)
120 S$(0) = "HELLO"
130 PRINT LEN(S$(0))
140 PRINT INSTR(S$(0), "LL")
150 REM And a READ into an array element alongside a scalar.
160 READ S$(1), D#
170 DATA "WORLD", 99
180 PRINT S$(1)
190 PRINT D#

View File

@@ -0,0 +1,7 @@
9
3
1
5
2
WORLD
99