/usr/lib/ocaml/compiler-libs/switch.mli is in ocaml-compiler-libs 4.05.0-10ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | (**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Luc Maranget, projet Moscova, INRIA Rocquencourt *)
(* *)
(* Copyright 2000 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. *)
(* *)
(**************************************************************************)
(*
This module transforms generic switches in combinations
of if tests and switches.
*)
(* For detecting action sharing, object style *)
(* Store for actions in object style:
act_store : store an action, returns index in table
In case an action with equal key exists, returns index
of the stored action. Otherwise add entry in table.
act_store_shared : This stored action will always be shared.
act_get : retrieve table
act_get_shared : retrieve table, with sharing explicit
*)
type 'a shared = Shared of 'a | Single of 'a
type 'a t_store =
{act_get : unit -> 'a array ;
act_get_shared : unit -> 'a shared array ;
act_store : 'a -> int ;
act_store_shared : 'a -> int ; }
exception Not_simple
module type Stored = sig
type t
type key
val make_key : t -> key option
end
module Store(A:Stored) :
sig
val mk_store : unit -> A.t t_store
end
(* Arguments to the Make functor *)
module type S =
sig
(* type of basic tests *)
type primitive
(* basic tests themselves *)
val eqint : primitive
val neint : primitive
val leint : primitive
val ltint : primitive
val geint : primitive
val gtint : primitive
(* type of actions *)
type act
(* Various constructors, for making a binder,
adding one integer, etc. *)
val bind : act -> (act -> act) -> act
val make_const : int -> act
val make_offset : act -> int -> act
val make_prim : primitive -> act list -> act
val make_isout : act -> act -> act
val make_isin : act -> act -> act
val make_if : act -> act -> act -> act
(* construct an actual switch :
make_switch arg cases acts
NB: cases is in the value form *)
val make_switch :
act -> int array -> act array -> act
(* Build last minute sharing of action stuff *)
val make_catch : act -> int * (act -> act)
val make_exit : int -> act
end
(*
Make.zyva arg low high cases actions where
- arg is the argument of the switch.
- low, high are the interval limits.
- cases is a list of sub-interval and action indices
- actions is an array of actions.
All these arguments specify a switch construct and zyva
returns an action that performs the switch,
*)
module Make :
functor (Arg : S) ->
sig
(* Standard entry point, sharing is tracked *)
val zyva :
(int * int) ->
Arg.act ->
(int * int * int) array ->
Arg.act t_store ->
Arg.act
(* Output test sequence, sharing tracked *)
val test_sequence :
Arg.act ->
(int * int * int) array ->
Arg.act t_store ->
Arg.act
end
|