Skip to content

Commit 34ff2ec

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

File tree

4 files changed

+61
-0
lines changed

4 files changed

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