diff options
Diffstat (limited to 'bytecomp/instruct.mli')
-rw-r--r-- | bytecomp/instruct.mli | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/bytecomp/instruct.mli b/bytecomp/instruct.mli index 73aaa7309..a0050b1b0 100644 --- a/bytecomp/instruct.mli +++ b/bytecomp/instruct.mli @@ -19,13 +19,19 @@ open Lambda type compilation_env = { ce_stack: int Ident.tbl; (* Positions of variables in the stack *) - ce_heap: int Ident.tbl } (* Structure of the heap-allocated env *) + ce_heap: int Ident.tbl; (* Structure of the heap-allocated env *) + ce_rec: int Ident.tbl } (* Functions bound by the same let rec *) (* The ce_stack component gives locations of variables residing in the stack. The locations are offsets w.r.t. the origin of the stack frame. The ce_heap component gives the positions of variables residing in the - heap-allocated environment. *) + heap-allocated environment. + The ce_rec component associate offsets to identifiers for functions + bound by the same let rec as the current function. The offsets + are used by the OFFSETCLOSURE instruction to recover the closure + pointer of the desired function from the env register (which + points to the closure for the current function). *) (* Debugging events *) @@ -73,15 +79,17 @@ type instruction = | Krestart | Kgrab of int (* number of arguments *) | Kclosure of label * int - | Kclosurerec of label * int + | Kclosurerec of label list * int + | Koffsetclosure of int | Kgetglobal of Ident.t | Ksetglobal of Ident.t | Kconst of structured_constant | Kmakeblock of int * int (* size, tag *) + | Kmakefloatblock of int | Kgetfield of int | Ksetfield of int - | Kdummy of int (* block size *) - | Kupdate of int (* block size *) + | Kgetfloatfield of int + | Ksetfloatfield of int | Kvectlength | Kgetvectitem | Ksetvectitem |