blob: a996f7505641050ecb2ac69add4639f04db3aa69 (
plain)
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
|
open Names
open Term
type tag = int
type structured_constant =
| Const_sorts of sorts
| Const_ind of inductive
| Const_b0 of tag
| Const_bn of tag * structured_constant array
type reloc_table = (tag * int) array
type annot_switch =
{ci : case_info; rtbl : reloc_table; tailcall : bool}
module Label :
sig
type t = int
val no : t
val create : unit -> t
val reset_label_counter : unit -> unit
end
type instruction =
| Klabel of Label.t
| Kacc of int
| Kenvacc of int
| Koffsetclosure of int
| Kpush
| Kpop of int
| Kpush_retaddr of Label.t
| Kapply of int (* number of arguments *)
| Kappterm of int * int (* number of arguments, slot size *)
| Kreturn of int (* slot size *)
| Kjump
| Krestart
| Kgrab of int (* number of arguments *)
| Kgrabrec of int (* rec arg *)
| Kcograb of int (* number of arguments *)
| Kclosure of Label.t * int (* label, number of free variables *)
| Kclosurerec of int * int * Label.t array * Label.t array
(* nb fv, init, lbl types, lbl bodies *)
| Kgetglobal of constant
| Kconst of structured_constant
| Kmakeblock of int * tag (* size, tag *)
| Kmakeprod
| Kmakeswitchblock of Label.t * Label.t * annot_switch * int
| Kforce
| Kswitch of Label.t array * Label.t array (* consts,blocks *)
| Kpushfield of int
| Kstop
| Ksequence of bytecodes * bytecodes
and bytecodes = instruction list
type fv_elem = FVnamed of identifier | FVrel of int
type fv = fv_elem array
val draw_instr : bytecodes -> unit
|