package ortac-wrapper

  1. Overview
  2. Docs
Wrapper plugin for Ortac

Install

Dune Dependency

Authors

Maintainers

Sources

0.7.0.tar.gz
md5=1429cb7ec517060772f97504d84ff789
sha512=498e1b40dd29f5feef3df5fa54f924c7b53f24726b1613a5d8dd7ef8ca16b8cf97a76b9fd2951f32143b59a67b8d80fe13b081890fca07787a5a5fda30102a97

doc/src/ortac-wrapper.plugin/failure.ml.html

Source file failure.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
open Ppxlib
open Ortac_core.Builder

let eterm t = estring t

let term_kind kind =
  (match kind with
  | `Check -> "Check"
  | `Pre -> "Pre"
  | `Post -> "Post"
  | `XPost -> "XPost"
  | `Invariant -> "Invariant")
  |> lident
  |> fun c -> pexp_construct c None

let register ~register_name e =
  [%expr [%e e] |> Ortac_runtime.Errors.register [%e register_name]]

let violated_condition kind ~term ~register_name =
  let kind = term_kind kind in
  [%expr
    Ortac_runtime.Violated_condition
      { term = [%e eterm term]; term_kind = [%e kind] }]
  |> register ~register_name

let violated_invariant kind ~term ~register_name =
  [%expr
    Ortac_runtime.Violated_invariant
      { term = [%e eterm term]; position = [%e kind] }]
  |> register ~register_name

let violated_axiom ~register_name =
  register ~register_name [%expr Ortac_runtime.Violated_axiom]

let axiom_failure ~exn ~register_name =
  [%expr Ortac_runtime.Axiom_failure { exn = [%e exn] }]
  |> register ~register_name

let invariant_failure kind ~term ~exn ~register_name =
  [%expr
    Ortac_runtime.Specification_failure
      { term = [%e eterm term]; term_kind = [%e kind]; exn = [%e exn] }]
  |> register ~register_name

let spec_failure kind = invariant_failure (term_kind kind)

let unexpected_exn ~allowed_exn ~exn ~register_name =
  let allowed_exn = List.map estring allowed_exn |> elist in
  [%expr
    Ortac_runtime.Unexpected_exception
      { allowed_exn = [%e allowed_exn]; exn = [%e exn] }]
  |> register ~register_name

let uncaught_checks ~term ~register_name =
  [%expr Ortac_runtime.Uncaught_checks { term = [%e eterm term] }]
  |> register ~register_name

let unexpected_checks ~register_name =
  (* let terms = List.map eterm terms |> elist in *)
  [%expr Ortac_runtime.Unexpected_checks { terms = [] }]
  |> register ~register_name

let report ~register_name =
  [%expr Ortac_runtime.Errors.report [%e register_name]]
OCaml

Innovation. Community. Security.