mirror of
https://github.com/ocaml/ocaml.git
synced 2026-08-01 06:50:29 +08:00
Some lambda information, such as whether an allocated block is immutable, or the kind and layout of a bigarray we are accessing, are not taken into account when generating bytecode. This information could be useful for Js_of_ocaml and Wasm_of_ocaml to generate better code. We insert it as an additional section in bytecode modules and executables, similarly to what is done for debug events.
58 lines
2.5 KiB
OCaml
58 lines
2.5 KiB
OCaml
(**************************************************************************)
|
|
(* *)
|
|
(* OCaml *)
|
|
(* *)
|
|
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. *)
|
|
(* *)
|
|
(* All rights reserved. This file is distributed under the terms of *)
|
|
(* the GNU Lesser General Public License version 2.1, with the *)
|
|
(* special exception on linking described in the file LICENSE. *)
|
|
(* *)
|
|
(**************************************************************************)
|
|
|
|
(* Generation of bytecode for .cmo files *)
|
|
|
|
open Cmo_format
|
|
open Instruct
|
|
|
|
val to_file: out_channel -> Unit_info.Artifact.t ->
|
|
required_globals:Ident.Set.t -> instruction list -> unit
|
|
(* Arguments:
|
|
channel on output file
|
|
name of compilation unit implemented
|
|
path of cmo file being written
|
|
required_globals: list of compilation units that must be
|
|
evaluated before this one
|
|
list of instructions to emit *)
|
|
val to_memory:
|
|
instruction list ->
|
|
(char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t *
|
|
(reloc_info * int) list * debug_event list
|
|
(* Arguments:
|
|
initialization code (terminated by STOP)
|
|
function code
|
|
Results:
|
|
block of relocatable bytecode
|
|
relocation information
|
|
debug events *)
|
|
val to_packed_file:
|
|
out_channel -> instruction list ->
|
|
int * (reloc_info * int) list * debug_event list *
|
|
Misc.Stdlib.String.Set.t * (int * optimization_hint) list
|
|
(* Arguments:
|
|
channel on output file
|
|
list of instructions to emit
|
|
Result:
|
|
size of the emitted code
|
|
relocation information
|
|
debug events
|
|
debug directory
|
|
performance hints
|
|
*)
|
|
|
|
val marshal_to_channel_with_possibly_32bit_compat :
|
|
filename:string -> kind:string -> out_channel -> 'a -> unit
|