Skip to content

Commit 8d72bc1

Browse files
committed
Runtime: fix for target-env browser
1 parent 83a01ed commit 8d72bc1

File tree

4 files changed

+60
-0
lines changed

4 files changed

+60
-0
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* Runtime/wasm: fix Unix.times (#2096)
1515
* Ppx: disable spurious warning for unused "self" in object litteral (#2128)
1616
* Ppx: fix labelled arguments for methods (#2126)
17+
* Runtime: runtime with target-env=browser should not rely on "require(..)" (#2129)
1718

1819
# 6.2.0 (2025-07-30) - Lille
1920

compiler/tests-compiler/target_env.ml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,46 @@ let () =
6161
without node filesystem
6262
Sys.readdir ok
6363
empty root |}]
64+
65+
module Jsoo = Js_of_ocaml_compiler
66+
module StringSet = Set.Make (String)
67+
68+
class find_require r =
69+
object
70+
inherit Jsoo.Js_traverse.iter as super
71+
72+
method! expression e =
73+
(match e with
74+
| ECall (EVar (Jsoo.Javascript.S { name = Utf8 "require"; loc; _ }), _, args, _)
75+
-> (
76+
match args with
77+
| [ Arg name ] -> (
78+
match name with
79+
| EStr (Utf8 name) -> r := (name, loc) :: !r
80+
| _ -> r := ("<Unknown>", loc) :: !r)
81+
| _ -> assert false)
82+
| _ -> ());
83+
super#expression e
84+
end
85+
86+
(* Check target-env=browser doesn't use 'require("node:...")' *)
87+
let%expect_test _ =
88+
let test flags =
89+
let r = ref [] in
90+
let o = new find_require r in
91+
let p = compile_and_parse_whole_program ~flags "" in
92+
o#program p;
93+
let ss =
94+
List.fold_left
95+
(fun acc (x, _loc) ->
96+
let x = if String.starts_with ~prefix:"node:" x then "node" else x in
97+
StringSet.add x acc)
98+
StringSet.empty
99+
!r
100+
in
101+
StringSet.iter (fun name -> Printf.eprintf "%s\n" name) ss
102+
in
103+
test [ "--linkall" ];
104+
[%expect {| node |}];
105+
test [ "--linkall"; "--target-env=browser" ];
106+
[%expect {| |}]

runtime/js/sys.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,14 @@ function caml_sys_temp_dir_name(_unit) {
384384
}
385385
}
386386

387+
//Provides: caml_sys_temp_dir_name
388+
//Requires: caml_string_of_jsstring
389+
//Version: >= 5.4
390+
//If: browser
391+
function caml_sys_temp_dir_name(_unit) {
392+
return caml_string_of_jsstring("");
393+
}
394+
387395
//Provides: caml_sys_convert_signal_number
388396
//Version: >= 5.4
389397
function caml_sys_convert_signal_number(signo) {

runtime/js/unix.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,14 @@ function caml_strerror(errno) {
228228
}
229229
}
230230

231+
//Provides: caml_strerror
232+
//Requires: unix_error
233+
//If: browser
234+
function caml_strerror(errno) {
235+
const code = unix_error[errno];
236+
code || "Unknown error " + errno;
237+
}
238+
231239
//Provides: unix_error_message
232240
//Alias: caml_unix_error_message
233241
//Requires: caml_strerror, caml_string_of_jsstring

0 commit comments

Comments
 (0)