Skip to content

Commit 967cb20

Browse files
committed
Wasm_of_ocaml: support JavaScript strings in prelude code
1 parent 3137c57 commit 967cb20

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

compiler/bin-wasm_of_ocaml/compile.ml

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -227,25 +227,25 @@ let generate_prelude ~out_file =
227227
in
228228
let context = Generate.start () in
229229
let debug = Parse_bytecode.Debug.create ~include_cmis:false false in
230-
let _ =
230+
let _, generated_js =
231231
Generate.f
232232
~context
233-
~unit_name:(Some "prelude")
233+
~unit_name:(Some "wasmoo_prelude")
234234
~live_vars:variable_uses
235235
~in_cps
236236
~deadcode_sentinal
237237
~debug
238238
program
239239
in
240240
Generate.output ch ~context;
241-
uinfo.provides
241+
uinfo.provides, generated_js
242242

243243
let build_prelude z =
244244
Fs.with_intermediate_file (Filename.temp_file "prelude" ".wasm")
245245
@@ fun prelude_file ->
246246
Fs.with_intermediate_file (Filename.temp_file "prelude_file" ".wasm")
247247
@@ fun tmp_prelude_file ->
248-
let predefined_exceptions = generate_prelude ~out_file:prelude_file in
248+
let info = generate_prelude ~out_file:prelude_file in
249249
Binaryen.optimize
250250
~profile:(Driver.profile 1)
251251
~input_file:prelude_file
@@ -254,7 +254,7 @@ let build_prelude z =
254254
~opt_output_sourcemap:None
255255
();
256256
Zip.add_file z ~name:"prelude.wasm" ~file:tmp_prelude_file;
257-
predefined_exceptions
257+
info
258258

259259
let build_js_runtime ~primitives ?runtime_arguments () =
260260
let always_required_js, primitives =
@@ -432,12 +432,18 @@ let run
432432
let z = Zip.open_out tmp_output_file in
433433
Zip.add_file z ~name:"runtime.wasm" ~file:tmp_wasm_file;
434434
Zip.add_entry z ~name:"runtime.js" ~contents:js_runtime;
435-
let predefined_exceptions = build_prelude z in
435+
let predefined_exceptions, (strings, fragments) = build_prelude z in
436436
Link.add_info
437437
z
438438
~predefined_exceptions
439439
~build_info:(Build_info.create `Runtime)
440-
~unit_data:[]
440+
~unit_data:
441+
[ { Link.unit_name = "wasmoo_prelude"
442+
; unit_info = Unit_info.empty
443+
; strings
444+
; fragments
445+
}
446+
]
441447
();
442448
Zip.close_out z)
443449
else

compiler/lib-wasm/link.ml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ let generate_start_function ~to_link ~out_file =
401401
Filename.gen_file out_file
402402
@@ fun ch ->
403403
let context = Generate.start () in
404-
Generate.add_init_function ~context ~to_link:("prelude" :: to_link);
404+
Generate.add_init_function ~context ~to_link:("wasmoo_prelude" :: to_link);
405405
Generate.wasm_output ch ~context;
406406
if times () then Format.eprintf " generate start: %a@." Timer.print t1
407407

@@ -682,11 +682,11 @@ let load_information files =
682682
match files with
683683
| [] -> assert false
684684
| runtime :: other_files ->
685-
let build_info, predefined_exceptions, _unit_data =
685+
let build_info, predefined_exceptions, unit_data =
686686
Zip.with_open_in runtime read_info
687687
in
688688
( predefined_exceptions
689-
, (runtime, (build_info, []))
689+
, (runtime, (build_info, unit_data))
690690
:: List.map other_files ~f:(fun file ->
691691
let build_info, _predefined_exceptions, unit_data =
692692
Zip.with_open_in file read_info
@@ -783,7 +783,8 @@ let link ~output_file ~linkall ~enable_source_maps ~files =
783783
|| cmo_file
784784
|| linkall
785785
|| unit_info.force_link
786-
|| not (StringSet.is_empty (StringSet.inter requires unit_info.provides))
786+
|| (not (StringSet.is_empty (StringSet.inter requires unit_info.provides)))
787+
|| String.equal unit_name "wasmoo_prelude"
787788
then
788789
( StringSet.diff
789790
(StringSet.union unit_info.requires requires)

0 commit comments

Comments
 (0)