Source file fake.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
65
66
67
68
69
70
71
72
73
74
open Parsetree
let app a b =
let loc =
if a.pexp_loc.Location.loc_ghost
then {b.pexp_loc with Location.loc_ghost = true}
else b.pexp_loc
in
Ast_helper.Exp.apply ~loc a [Ast_helper.no_label, b]
let pat_app f (pat,expr) = pat, app f expr
let prim_ident prim = Longident.parse ("_." ^ prim)
let prim ?(ghost=true) prim =
let open Location in
let ident = mknoloc (prim_ident prim) in
let ident = if ghost
then ident
else {ident with loc = {ident.loc with loc_ghost = false}}
in
Ast_helper.Exp.ident ~loc:ident.loc ident
module Lwt = struct
let un_lwt = prim "Lwt.un_lwt"
let to_lwt = prim "Lwt.to_lwt"
let in_lwt = prim "Lwt.in_lwt"
let unit_lwt = prim "Lwt.unit_lwt"
let un_stream = prim "Lwt.un_stream"
let finally_ = prim "Lwt.finally'"
let raise_lwt_ = prim_ident "Lwt.raise_lwt'"
end
module Meta = struct
let prim_code = prim "Meta.code"
let prim_uncode = prim "Meta.uncode"
let code loc_start loc_end expr =
let loc = {expr.pexp_loc with Location. loc_start; loc_end} in
Ast_helper.Exp.apply ~loc prim_code [Ast_helper.no_label, expr]
let uncode loc_start loc_end expr =
let loc = {expr.pexp_loc with Location. loc_start; loc_end} in
Ast_helper.Exp.apply ~loc prim_uncode [Ast_helper.no_label, expr]
end