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
75
76
77
78
79
80
81
82
83
84
85
type binary_module = Wax_wasm.Ast.location Wax_wasm.Ast.Binary.module_
module Wat_parser =
Wax_wasm.Parsing.Make_parser
(struct
type t = Wax_wasm.Ast.location Wax_wasm.Ast.Text.module_
end)
(Wax_wasm.Tokens)
(Wax_wasm.Parser)
(Wax_wasm.Fast_parser)
(Wax_wasm.Parser_messages)
(Wax_wasm.Lexer)
module Wax_parser =
Wax_wasm.Parsing.Make_parser
(struct
type t = Wax_lang.Ast.location Wax_lang.Ast.module_
end)
(Wax_lang.Tokens)
(Wax_lang.Parser)
(Wax_lang.Fast_parser)
(Wax_lang.Parser_messages)
(Wax_lang.Lexer)
let wax_parse_recover ~filename text =
Wax_parser.parse_recover ~filename ~sync:Wax_lang.Recover.sync
~insert:Wax_lang.Recover.insert ~closers:Wax_lang.Recover.closers text
let wat_parse_recover ~filename text =
Wat_parser.parse_recover ~filename ~sync:Wax_wasm.Recover.sync
~insert:Wax_wasm.Recover.insert ~closers:Wax_wasm.Recover.closers
~barrier:Wax_wasm.Recover.barrier text
let wat_to_binary ?(color = Wax_utils.Colors.Never)
?(defines = Wax_wasm.Cond_specialize.of_list []) ?(name_functions = false)
?(validate = false) ~filename text =
let ast, _ctx = Wat_parser.parse_from_string ~color ~filename text in
let ast =
if Wax_wasm.Cond_specialize.is_empty defines then ast
else
Wax_utils.Diagnostic.run ~color ~palette:Wax_utils.Colors.wat_theme
~source:(Some text) (fun d ->
fst (Wax_wasm.Cond_specialize.module_ d defines ast))
in
let ast =
if name_functions then Wax_wasm.Naming.name_functions_from_exports ast
else ast
in
if validate then
Wax_utils.Diagnostic.run ~color ~palette:Wax_utils.Colors.wat_theme
~source:(Some text) (fun d -> Wax_wasm.Validation.f d ast);
Wax_wasm.Text_to_binary.module_ ast
let wax_to_binary ?(color = Wax_utils.Colors.Never)
?(defines = Wax_wasm.Cond_specialize.of_list []) ?(validate = false)
~filename text =
let ast, _ctx = Wax_parser.parse_from_string ~color ~filename text in
let ast =
if Wax_wasm.Cond_specialize.is_empty defines then ast
else
Wax_utils.Diagnostic.run ~color ~palette:Wax_utils.Colors.wax_theme
~source:(Some text) (fun d ->
fst (Wax_lang.Cond_specialize.module_ d defines ast))
in
let types, ast =
Wax_utils.Diagnostic.run ~color ~palette:Wax_utils.Colors.wax_theme
~source:(Some text) (fun d ->
Wax_lang.Typing.f ~warn_unused:validate d ast)
in
let wasm_ast =
Wax_utils.Diagnostic.run ~color ~palette:Wax_utils.Colors.wax_theme
~source:(Some text) (fun d -> To_wasm.module_ d types ast)
in
if validate then
Wax_utils.Diagnostic.run ~color ~palette:Wax_utils.Colors.wat_theme
~source:(Some text) (fun d ->
Wax_wasm.Validation.f ~warn_unused:false d wasm_ast);
Wax_wasm.Text_to_binary.module_ wasm_ast
let output_binary ~out_channel ?(source_map = false) ast =
Wax_wasm.Wasm_output.module_ ~out_channel ~source_map ast