ocaml: phase 1 sequence operator ; (+10 tests, 123 total)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 53s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 53s
Two-phase grammar: parse-expr-no-seq (prior entry) + parse-expr wraps it with ;-chaining. List bodies keep parse-expr-no-seq so ; remains a separator inside [...]. Match clause bodies use the seq variant and stop at | — real OCaml semantics. Trailing ; before end/)/|/in/then/else/eof permitted.
This commit is contained in:
@@ -300,6 +300,28 @@ cat > "$TMPFILE" << 'EPOCHS'
|
||||
(epoch 308)
|
||||
(eval "(ocaml-parse \"match x with | () -> 0\")")
|
||||
|
||||
;; ── Sequences (;) ──────────────────────────────────────────────
|
||||
(epoch 320)
|
||||
(eval "(ocaml-parse \"1; 2\")")
|
||||
(epoch 321)
|
||||
(eval "(ocaml-parse \"1; 2; 3\")")
|
||||
(epoch 322)
|
||||
(eval "(ocaml-parse \"(1; 2)\")")
|
||||
(epoch 323)
|
||||
(eval "(ocaml-parse \"begin a; b; c end\")")
|
||||
(epoch 324)
|
||||
(eval "(ocaml-parse \"let x = 1 in x; x\")")
|
||||
(epoch 325)
|
||||
(eval "(ocaml-parse \"if c then (a; b) else c\")")
|
||||
(epoch 326)
|
||||
(eval "(ocaml-parse \"[1; 2; 3]\")")
|
||||
(epoch 327)
|
||||
(eval "(ocaml-parse \"1; 2;\")")
|
||||
(epoch 328)
|
||||
(eval "(ocaml-parse \"begin a; end\")")
|
||||
(epoch 329)
|
||||
(eval "(ocaml-parse \"match x with | _ -> a; b\")")
|
||||
|
||||
EPOCHS
|
||||
|
||||
OUTPUT=$(timeout 60 "$SX_SERVER" < "$TMPFILE" 2>/dev/null)
|
||||
@@ -476,6 +498,18 @@ check 306 "match ctor with tuple arg" '("pcon" "Pair" ("pvar" "a") ("pvar" "b
|
||||
check 307 "match string literal" '("plit" ("string" "hi"))'
|
||||
check 308 "match unit pattern" '("plit" ("unit"))'
|
||||
|
||||
# ── Sequences ───────────────────────────────────────────────────
|
||||
check 320 "seq 1;2" '("seq" ("int" 1) ("int" 2))'
|
||||
check 321 "seq 1;2;3" '("seq" ("int" 1) ("int" 2) ("int" 3))'
|
||||
check 322 "seq in parens" '("seq" ("int" 1) ("int" 2))'
|
||||
check 323 "seq in begin/end" '("seq" ("var" "a") ("var" "b") ("var" "c"))'
|
||||
check 324 "let body absorbs seq" '("let" "x" () ("int" 1) ("seq" ("var" "x") ("var" "x")))'
|
||||
check 325 "if-branch parens for seq" '("if" ("var" "c") ("seq" ("var" "a") ("var" "b"))'
|
||||
check 326 "list ; is separator" '("list" ("int" 1) ("int" 2) ("int" 3))'
|
||||
check 327 "trailing ; OK" '("seq" ("int" 1) ("int" 2))'
|
||||
check 328 "begin a; end singleton seq" '("seq" ("var" "a"))'
|
||||
check 329 "match clause body absorbs ;" '("case" ("pwild") ("seq" ("var" "a") ("var" "b")))'
|
||||
|
||||
TOTAL=$((PASS + FAIL))
|
||||
if [ $FAIL -eq 0 ]; then
|
||||
echo "ok $PASS/$TOTAL OCaml-on-SX tests passed"
|
||||
|
||||
Reference in New Issue
Block a user