ocaml: phase 2+3 'when' guard in try/with (+3 tests, 467 total)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
parse-try now consumes optional 'when GUARD-EXPR' before -> and emits (:case-when PAT GUARD BODY). Eval try clause loop dispatches on case / case-when and falls through on guard false — same semantics as match. Examples: try raise (E 5) with | E n when n > 0 -> n | _ -> 0 = 5 try raise (E (-3)) with | E n when n > 0 -> n | _ -> 0 = 0 try raise (E 5) with | E n when n > 100 -> n | E n -> n + 1000 = 1005
This commit is contained in:
@@ -773,11 +773,18 @@
|
||||
(begin
|
||||
(define one
|
||||
(fn ()
|
||||
(let ((p (parse-pattern)))
|
||||
(let ((p (parse-pattern)) (guard nil))
|
||||
(begin
|
||||
(when (at-kw? "when")
|
||||
(begin (advance-tok!)
|
||||
(set! guard (parse-expr-no-seq))))
|
||||
(consume! "op" "->")
|
||||
(let ((body (parse-expr)))
|
||||
(append! cases (list :case p body)))))))
|
||||
(cond
|
||||
((= guard nil)
|
||||
(append! cases (list :case p body)))
|
||||
(else
|
||||
(append! cases (list :case-when p guard body)))))))))
|
||||
(one)
|
||||
(define loop
|
||||
(fn ()
|
||||
|
||||
Reference in New Issue
Block a user