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
(* SPDX-License-Identifier: AGPL-3.0-or-later *)
(* Copyright © 2021-2024 OCamlPro *)
(* Written by the Owi programmers *)
open Types
module type Value_types = sig
type int32
type int64
type float32
type float64
type vbool
end
module type Monad_type = sig
type 'a t
end
module type Memory_type = sig
type t
end
module type T_Extern_func = sig
type int32
type int64
type float32
type float64
type 'a m
type memory
type _ telt =
| I32 : int32 telt
| I64 : int64 telt
| F32 : float32 telt
| F64 : float64 telt
| Externref : 'a Type.Id.t -> 'a telt
type _ rtype =
| R0 : unit rtype
| R1 : 'a telt -> 'a rtype
| R2 : 'a telt * 'b telt -> ('a * 'b) rtype
| R3 : 'a telt * 'b telt * 'c telt -> ('a * 'b * 'c) rtype
| R4 : 'a telt * 'b telt * 'c telt * 'd telt -> ('a * 'b * 'c * 'd) rtype
type (_, _) atype =
| Mem : ('b, 'r) atype -> (memory -> 'b, 'r) atype
| UArg : ('b, 'r) atype -> (unit -> 'b, 'r) atype
| Arg : 'a telt * ('b, 'r) atype -> ('a -> 'b, 'r) atype
| NArg : string * 'a telt * ('b, 'r) atype -> ('a -> 'b, 'r) atype
| Res : ('r, 'r) atype
type _ func_type = Func : ('f, 'r m) atype * 'r rtype -> 'f func_type
type extern_func = Extern_func : 'a func_type * 'a -> extern_func
(* val extern_type : _ func_type -> Simplified.func_type *)
val extern_type : extern_func -> binary Types.func_type
end
type t =
| WASM of int * binary func * Env_id.t
| Extern of Func_id.t
module type T = sig
include T_Extern_func
type nonrec t = t
(* val typ : ('env, extern_func) t -> Simplified.func_type *)
val wasm : binary func -> Env_id.t -> t
end