package binaryen

  1. Overview
  2. Docs

Source file memory.ml

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
external set_memory :
  Module.t ->
  int ->
  int ->
  string ->
  bytes list ->
  bool list ->
  Expression.t list ->
  int list ->
  bool ->
  unit = "caml_binaryen_set_memory__bytecode" "caml_binaryen_set_memory"

type segment = { data : bytes; kind : segment_kind; size : int }
and segment_kind = Passive | Active of { offset : Expression.t }

(** Module, initial size, maximum size, export name, segments, shared. *)
let set_memory wasm_mod initial maximum export_name (segments : segment list)
    shared =
  let split_segments segments =
    List.fold_right
      (fun { data; kind; size }
           (segment_data, segment_passive, segment_offsets, segment_sizes) ->
        match kind with
        | Active { offset } ->
            ( data :: segment_data,
              false :: segment_passive,
              offset :: segment_offsets,
              size :: segment_sizes )
        | Passive ->
            ( data :: segment_data,
              true :: segment_passive,
              Expression.Null.make () :: segment_offsets,
              size :: segment_sizes ))
      segments ([], [], [], [])
  in
  let segment_data, segment_passive, segment_offsets, segment_sizes =
    split_segments segments
  in
  set_memory wasm_mod initial maximum export_name segment_data segment_passive
    segment_offsets segment_sizes shared

let unlimited = -1
OCaml

Innovation. Community. Security.