ocaml: phase 5.1 roman.ml baseline + top-level 'let () = expr'
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 51s

Side-quest emerged from adding roman.ml baseline (Roman numeral greedy
encoding): top-level 'let () = expr' was unsupported because
ocaml-parse-program's parse-decl-let consumed an ident strictly. Now
parse-decl-let recognises a leading '()' as a unit binding and
synthesises a __unit_NN name (matching how parse-let already handles
inner-let unit patterns).

roman.ml exercises:
  * tuple list literal [(int * string); ...]
  * recursive pattern match on tuple-cons
  * String.length + List.fold_left
  * the new top-level let () support (sanity in a comment, even though
    the program ends with a bare expression for the test harness)

Bumped lib/ocaml/test.sh server timeout 180->360s — the recent surge in
test count plus a CPU-contended host was crowding out the sole epoch
reaching the deeper smarts.
This commit is contained in:
2026-05-08 23:40:36 +00:00
parent 982e9680fe
commit bc4f4a5477
5 changed files with 41 additions and 2 deletions

View File

@@ -1147,7 +1147,16 @@
(when (at-kw? "rec") (begin (advance-tok!) (set! reccy true)))
(define parse-one!
(fn ()
(let ((nm (ocaml-tok-value (consume! "ident" nil)))
(let ((nm (cond
((and (at-op? "(")
(< (+ idx 1) tok-len)
(let ((t1 (nth tokens (+ idx 1))))
(and (= (ocaml-tok-type t1) "op")
(= (ocaml-tok-value t1) ")"))))
(begin (advance-tok!) (advance-tok!)
(str "__unit_" idx)))
(else
(ocaml-tok-value (consume! "ident" nil)))))
(ps (list)))
(begin
(define collect-params