File: node_wrapper.ml

package info (click to toggle)
js-of-ocaml 6.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 37,932 kB
  • sloc: ml: 135,957; javascript: 58,364; ansic: 437; makefile: 422; sh: 12; perl: 4
file content (48 lines) | stat: -rw-r--r-- 1,254 bytes parent folder | download
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
let extra_args_for_wasoo =
  [ "--experimental-wasm-imported-strings"
  ; "--experimental-wasm-stack-switching"
  ; "--stack-size=10000"
  ]

let extra_args_for_jsoo = []

let env = Unix.environment ()

let env =
  Array.map
    (fun e ->
      if String.starts_with ~prefix:"PATH=" e
      then
        let path_sep = if Sys.win32 then ';' else ':' in
        let path = String.sub e 5 (String.length e - 5) in
        match String.split_on_char path_sep path with
        | _drop :: paths ->
            let paths = String.concat (String.make 1 path_sep) paths in
            "PATH=" ^ paths
        | _ -> e
      else e)
    env

let args =
  match Array.to_list Sys.argv with
  | exe :: argv ->
      let argv =
        match argv with
        | file :: _ when Filename.check_suffix file ".wasm.js" ->
            extra_args_for_wasoo @ argv
        | _ -> extra_args_for_jsoo @ argv
      in
      Array.of_list (exe :: argv)
  | [] -> assert false

let () =
  if Sys.win32
  then
    let pid =
      Unix.create_process_env "node.exe" args env Unix.stdin Unix.stdout Unix.stderr
    in
    match Unix.waitpid [] pid with
    | _, WEXITED n -> exit n
    | _, WSIGNALED _ -> exit 9
    | _, WSTOPPED _ -> exit 9
  else Unix.execvpe "node" args env