···101101102102let dcs_filename = "dynamic_cmis.json"
103103104104-let fetch_dynamic_cmis url =
105105- match Jslib.sync_get url with
104104+let fetch_dynamic_cmis sync_get url =
105105+ match sync_get url with
106106 | None -> Error (`Msg "Failed to fetch dynamic cmis")
107107 | Some json ->
108108 let rpc = Jsonrpc.of_string json in
109109 Rpcmarshal.unmarshal
110110 Js_top_worker_rpc.Toplevel_api_gen.typ_of_dynamic_cmis rpc
111111112112-let init findlib_index : t =
112112+let init sync_get findlib_index : t =
113113 let findlib_metas =
114114- match Jslib.sync_get findlib_index with
114114+ match sync_get findlib_index with
115115 | None -> []
116116 | Some txt -> Astring.String.fields ~empty:false txt
117117 in
118118 let metas =
119119 List.filter_map
120120 (fun x ->
121121- match Jslib.sync_get x with Some meta -> Some (x, meta) | None -> None)
121121+ match sync_get x with Some meta -> Some (x, meta) | None -> None)
122122 findlib_metas
123123 in
124124 List.filter_map
···150150 None)
151151 metas |> flatten_libs
152152153153-let require cmi_only v packages =
153153+let require sync_get cmi_only v packages =
154154 let rec require dcss package :
155155 Js_top_worker_rpc.Toplevel_api_gen.dynamic_cmis list =
156156 match List.find (fun lib -> lib.name = package) v with
···170170 let dcs = Fpath.(dir / dcs_filename |> to_string) in
171171 let uri = Uri.with_path lib.meta_uri dcs in
172172 Jslib.log "uri: %s" (Uri.to_string uri);
173173- match fetch_dynamic_cmis (Uri.to_string uri) with
173173+ match fetch_dynamic_cmis sync_get (Uri.to_string uri) with
174174 | Ok dcs ->
175175 let () =
176176 match lib.archive_name with
+6-3
lib/impl.ml
···353353354354 requires := init_libs.findlib_requires;
355355 functions := Some [];
356356+ execution_allowed := init_libs.execute;
357357+358358+ (* Set up the toplevel environment *)
356359 Logs.info (fun m -> m "init() finished");
357360358361 IdlM.ErrM.return ()
···775778 let filename = modname_of_id id |> String.uncapitalize_ascii in
776779 let prefix = Printf.sprintf "%s/%s" path filename in
777780 let filename = Printf.sprintf "%s.ml" prefix in
778778- Logs.info (fun m -> m "prefix: %s\n%!" prefix);
781781+ Logs.info (fun m -> m "prefix: %s" prefix);
779782 let oc = open_out filename in
780783 Printf.fprintf oc "%s" source;
781784 close_out oc;
782782- (try Sys.remove (prefix ^ ".cmi") with e -> Logs.err (fun m -> m "Error removing %s: %s" filename (Printexc.to_string e)));
785785+ (try Sys.remove (prefix ^ ".cmi") with | Sys_error _ -> ());
783786 let unit_info = Unit_info.make ~source_file:filename prefix in
784787 try
785788 let store = Local_store.fresh () in
···792795 let _ = Typemod.type_implementation unit_info env ast in
793796 let b = Sys.file_exists (prefix ^ ".cmi") in
794797 failed_cells := StringSet.remove id !failed_cells;
795795- Logs.info (fun m -> m "file_exists: %s = %b\n%!" (prefix ^ ".cmi") b));
798798+ Logs.info (fun m -> m "file_exists: %s = %b" (prefix ^ ".cmi") b));
796799 (* reset_dirs () *) ()
797800 with
798801 | Env.Error e ->
+3-3
lib/worker.ml
···53535454 let sync_get = Jslib.sync_get
5555 let create_file = Js_of_ocaml.Sys_js.create_file
5656- let get_stdlib_dcs uri = Findlibish.fetch_dynamic_cmis uri |> Result.to_list
5656+ let get_stdlib_dcs uri = Findlibish.fetch_dynamic_cmis sync_get uri |> Result.to_list
5757 let import_scripts = Js_of_ocaml.Worker.import_scripts
5858- let findlib_init = Findlibish.init
5858+ let findlib_init = Findlibish.init sync_get
59596060 let require b v = function
6161 | [] -> []
6262- | packages -> Findlibish.require b v packages
6262+ | packages -> Findlibish.require sync_get b v packages
63636464 let init_function func_name =
6565 let open Js_of_ocaml in
···11+22+fs=require('fs');
33+vm=require('vm');// vm must be in the global context to work properly
44+55+66+function include(filename){
77+ var code = fs.readFileSync(filename, 'utf-8');
88+ vm.runInThisContext(code, filename);
99+}
1010+1111+function importScripts(filename){
1212+ console.log('importScripts: ' + filename);
1313+ filename='./'+filename;
1414+ include(filename);
1515+}
1616+1717+global.importScripts=importScripts;
1818+global.include=include;