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:
@@ -99,7 +99,7 @@ static akerr_ErrorContext *collect_numbers(akbasic_Runtime *obj, akbasic_ASTLeaf
|
||||
values[*count] = (double)value->intval;
|
||||
}
|
||||
*count += 1;
|
||||
arg = arg->right;
|
||||
arg = arg->next;
|
||||
}
|
||||
SUCCEED_RETURN(errctx);
|
||||
}
|
||||
@@ -557,7 +557,7 @@ static akerr_ErrorContext *shape_variable(akbasic_Runtime *obj, akbasic_ASTLeaf
|
||||
PASS(errctx, akbasic_environment_get(obj->environment, arg->identifier, dest));
|
||||
FAIL_ZERO_RETURN(errctx, (*dest != NULL), AKBASIC_ERR_UNDEFINED,
|
||||
"%s could not reach the variable %s", verb, arg->identifier);
|
||||
*rest = arg->right;
|
||||
*rest = arg->next;
|
||||
SUCCEED_RETURN(errctx);
|
||||
}
|
||||
|
||||
@@ -584,7 +584,7 @@ akerr_ErrorContext *akbasic_cmd_sshape(akbasic_Runtime *obj, akbasic_ASTLeaf *ex
|
||||
coords[count] = (value->valuetype == AKBASIC_TYPE_FLOAT)
|
||||
? value->floatval : (double)value->intval;
|
||||
count += 1;
|
||||
arg = arg->right;
|
||||
arg = arg->next;
|
||||
}
|
||||
FAIL_ZERO_RETURN(errctx, (count >= 2), AKBASIC_ERR_SYNTAX,
|
||||
"SSHAPE expected A$, X1, Y1");
|
||||
@@ -636,7 +636,7 @@ akerr_ErrorContext *akbasic_cmd_gshape(akbasic_Runtime *obj, akbasic_ASTLeaf *ex
|
||||
coords[count] = (value->valuetype == AKBASIC_TYPE_FLOAT)
|
||||
? value->floatval : (double)value->intval;
|
||||
count += 1;
|
||||
arg = arg->right;
|
||||
arg = arg->next;
|
||||
}
|
||||
x = (count >= 1) ? coords[0] : obj->gfx.x;
|
||||
y = (count >= 2) ? coords[1] : obj->gfx.y;
|
||||
|
||||
Reference in New Issue
Block a user