Fix &rest param binding in OCaml evaluator + clean test suite: 0 failures
OCaml evaluator: has_rest_param and bind_lambda_params checked for String "&rest" but the parser produces Symbol "&rest". Both forms now accepted. Fixes swap! extra args (signal 10 → swap! s + 5 → 15). test-adapter-html.sx: fix define shorthand → explicit fn form, move defcomp/defisland to top level with (test-env) for component resolution. 2515 passed, 0 failed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -296,9 +296,10 @@ and strict_check_args name args =
|
||||
and bind_lambda_params params args local =
|
||||
(* Check for &rest in param list *)
|
||||
let param_strs = sx_to_list params in
|
||||
let is_rest_marker = function String "&rest" | Symbol "&rest" -> true | _ -> false in
|
||||
let rec find_rest idx = function
|
||||
| [] -> None
|
||||
| String "&rest" :: rest_name :: _ -> Some (idx, rest_name)
|
||||
| x :: rest_name :: _ when is_rest_marker x -> Some (idx, rest_name)
|
||||
| _ :: tl -> find_rest (idx + 1) tl
|
||||
in
|
||||
match find_rest 0 param_strs with
|
||||
@@ -313,7 +314,7 @@ and bind_lambda_params params args local =
|
||||
|
||||
and has_rest_param params =
|
||||
let param_strs = sx_to_list params in
|
||||
List.exists (function String "&rest" -> true | _ -> false) param_strs
|
||||
List.exists (function String "&rest" | Symbol "&rest" -> true | _ -> false) param_strs
|
||||
|
||||
and call_lambda f args caller_env =
|
||||
(let params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (caller_env)) in
|
||||
|
||||
Reference in New Issue
Block a user