Skip to content

Commit 18105b5

Browse files
Reduce the amount of modules that depend on version.ml. (#12007)
* Reduce the amount of modules that depend on version.ml. * Better match old behavior for safe_compile.
1 parent 6414bf8 commit 18105b5

File tree

12 files changed

+53
-28
lines changed

12 files changed

+53
-28
lines changed

src/compiler/args.ml

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ let process_args arg_spec =
4343
let parse_args com =
4444
let usage = Printf.sprintf
4545
"Haxe Compiler %s - (C)2005-2024 Haxe Foundation\nUsage: haxe%s <target> [options] [hxml files and dot paths...]\n"
46-
s_version_full (if Sys.os_type = "Win32" then ".exe" else "")
46+
(s_version_full com.version) (if Sys.os_type = "Win32" then ".exe" else "")
4747
in
4848
let actx = {
4949
classes = [([],"Std")];
@@ -154,7 +154,7 @@ let parse_args com =
154154
com.debug <- true;
155155
),"","add debug information to the compiled code");
156156
("Miscellaneous",["--version"],["-version"],Arg.Unit (fun() ->
157-
raise (Helper.HelpMessage s_version_full);
157+
raise (Helper.HelpMessage (s_version_full com.version));
158158
),"","print version and exit");
159159
("Miscellaneous", ["-h";"--help"], ["-help"], Arg.Unit (fun () ->
160160
raise (Arg.Help "")

src/compiler/compiler.ml

+19-2
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ module Setup = struct
230230
let setup_common_context ctx =
231231
let com = ctx.com in
232232
ctx.com.print <- ctx.comm.write_out;
233-
Common.define_value com Define.HaxeVer (Printf.sprintf "%.3f" (float_of_int Globals.version /. 1000.));
233+
Common.define_value com Define.HaxeVer (Printf.sprintf "%.3f" (float_of_int version /. 1000.));
234234
Common.raw_define com "haxe3";
235235
Common.raw_define com "haxe4";
236236
Common.raw_define com "haxe5";
@@ -419,6 +419,10 @@ let compile ctx actx callbacks =
419419
) (List.rev actx.cmds)
420420
end
421421

422+
let make_ice_message com msg backtrace =
423+
let ver = (s_version_full com.version) in
424+
let os_type = if Sys.unix then "unix" else "windows" in
425+
Printf.sprintf "%s\nHaxe: %s; OS type: %s;\n%s" msg ver os_type backtrace
422426
let compile_safe ctx f =
423427
let com = ctx.com in
424428
try
@@ -446,6 +450,12 @@ with
446450
handle_diagnostics ctx msg null_pos DKCompilerMessage;
447451
| Failure msg when not Helper.is_debug_run ->
448452
error ctx ("Error: " ^ msg) null_pos
453+
| Globals.Ice (msg,backtrace) when is_diagnostics com ->
454+
let s = make_ice_message com msg backtrace in
455+
handle_diagnostics ctx s null_pos DKCompilerMessage
456+
| Globals.Ice (msg,backtrace) when not Helper.is_debug_run ->
457+
let s = make_ice_message com msg backtrace in
458+
error ctx ("Error: " ^ s) null_pos
449459
| Helper.HelpMessage msg ->
450460
print_endline msg
451461
| Parser.TypePath (p,c,is_import,pos) ->
@@ -517,7 +527,14 @@ let compile_ctx callbacks ctx =
517527
catch_completion_and_exit ctx callbacks run
518528

519529
let create_context comm cs compilation_step params = {
520-
com = Common.create compilation_step cs version params (DisplayTypes.DisplayMode.create !Parser.display_mode);
530+
com = Common.create compilation_step cs {
531+
version = version;
532+
major = version_major;
533+
minor = version_minor;
534+
revision = version_revision;
535+
pre = version_pre;
536+
extra = Version.version_extra;
537+
} params (DisplayTypes.DisplayMode.create !Parser.display_mode);
521538
messages = [];
522539
has_next = false;
523540
has_error = false;

src/compiler/hxb/hxbReader.ml

+1-2
Original file line numberDiff line numberDiff line change
@@ -2079,8 +2079,7 @@ class hxb_reader
20792079
^ "Attach the following information:"
20802080
in
20812081
let backtrace = Printexc.raw_backtrace_to_string backtrace in
2082-
let s = Printf.sprintf "%s\nHaxe: %s\n%s" msg s_version_full backtrace in
2083-
failwith s
2082+
raise (Globals.Ice (msg, backtrace))
20842083

20852084
method private read_chunk_data kind =
20862085
let path = String.concat "_" (ExtLib.String.nsplit (s_type_path mpath) ".") in

src/compiler/hxb/hxbWriter.ml

+1-2
Original file line numberDiff line numberDiff line change
@@ -452,8 +452,7 @@ module HxbWriter = struct
452452
^ "Attach the following information:"
453453
in
454454
let backtrace = Printexc.raw_backtrace_to_string backtrace in
455-
let s = Printf.sprintf "%s\nHaxe: %s\n%s" msg s_version_full backtrace in
456-
failwith s
455+
raise (Globals.Ice (msg, backtrace))
457456

458457
let in_nested_scope writer = match writer.field_stack with
459458
| [] -> false (* can happen for cl_init and in EXD *)

src/context/common.ml

+2-2
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ type context = {
356356
is_macro_context : bool;
357357
mutable json_out : json_api option;
358358
(* config *)
359-
version : int;
359+
version : compiler_version;
360360
mutable args : string list;
361361
mutable display : DisplayTypes.DisplayMode.settings;
362362
mutable debug : bool;
@@ -968,7 +968,7 @@ let init_platform com =
968968
end;
969969
(* Set the source header, unless the user has set one already or the platform sets a custom one *)
970970
if not (defined com Define.SourceHeader) && (com.platform <> Hl) then
971-
define_value com Define.SourceHeader ("Generated by Haxe " ^ s_version_full);
971+
define_value com Define.SourceHeader ("Generated by Haxe " ^ (s_version_full com.version));
972972
let forbid acc p = if p = name || PMap.mem p acc then acc else PMap.add p Forbidden acc in
973973
com.package_rules <- List.fold_left forbid com.package_rules ("java" :: (List.map platform_name platforms));
974974
update_platform_config com;

src/context/display/displayJson.ml

+5-5
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,11 @@ let handler =
179179
hctx.send_result (JObject [
180180
"methods",jarray methods;
181181
"haxeVersion",jobject [
182-
"major",jint version_major;
183-
"minor",jint version_minor;
184-
"patch",jint version_revision;
185-
"pre",(match version_pre with None -> jnull | Some pre -> jstring pre);
186-
"build",(match Version.version_extra with None -> jnull | Some(_,build) -> jstring build);
182+
"major",jint hctx.com.version.major;
183+
"minor",jint hctx.com.version.minor;
184+
"patch",jint hctx.com.version.revision;
185+
"pre",(match hctx.com.version.pre with None -> jnull | Some pre -> jstring pre);
186+
"build",(match hctx.com.version.extra with None -> jnull | Some(_,build) -> jstring build);
187187
];
188188
"protocolVersion",jobject [
189189
"major",jint 0;

src/core/globals.ml

+16-6
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ type platform =
2424
| Eval
2525
| CustomTarget of string
2626

27+
type compiler_version = {
28+
version: int;
29+
major: int;
30+
minor: int;
31+
revision: int;
32+
pre: string option;
33+
extra: (string * string) option;
34+
}
35+
2736
let version = 5000
2837
let version_major = version / 1000
2938
let version_minor = (version mod 1000) / 100
@@ -135,14 +144,17 @@ let s_version =
135144
let pre = Option.map_default (fun pre -> "-" ^ pre) "" version_pre in
136145
Printf.sprintf "%d.%d.%d%s" version_major version_minor version_revision pre
137146

138-
let s_version_full =
139-
match Version.version_extra with
147+
let s_version_full v =
148+
match v.extra with
140149
| Some (_,build) -> s_version ^ "+" ^ build
141150
| _ -> s_version
142151

143152

144153
let patch_string_pos p s = { p with pmin = p.pmax - String.length s }
145154

155+
(* msg * backtrace *)
156+
exception Ice of string * string
157+
146158
(**
147159
Terminates compiler process and prints user-friendly instructions about filing an issue.
148160
Usage: `die message __LOC__`, where `__LOC__` is a built-in ocaml constant
@@ -163,10 +175,8 @@ let die ?p msg ml_loc =
163175
try snd (ExtString.String.split backtrace "\n")
164176
with ExtString.Invalid_string -> backtrace
165177
in
166-
let ver = s_version_full
167-
and os_type = if Sys.unix then "unix" else "windows" in
168-
let s = Printf.sprintf "%s\nHaxe: %s; OS type: %s;\n%s\n%s" msg ver os_type ml_loc backtrace in
169-
failwith s
178+
let backtrace = ml_loc ^ "\n" ^ backtrace in
179+
raise (Ice (msg,backtrace))
170180

171181
let dump_callstack () =
172182
print_endline (Printexc.raw_backtrace_to_string (Printexc.get_callstack 200))

src/generators/gctx.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type t = {
2222
basic : basic_types;
2323
debug : bool;
2424
file : string;
25-
version : int;
25+
version : compiler_version;
2626
features : (string,bool) Hashtbl.t;
2727
modules : Type.module_def list;
2828
main : context_main;

src/generators/genhl.ml

+3-3
Original file line numberDiff line numberDiff line change
@@ -4296,9 +4296,9 @@ let generate com =
42964296
let gnames = Array.make (Array.length code.globals) "" in
42974297
PMap.iter (fun n i -> gnames.(i) <- n) ctx.cglobals.map;
42984298
if not (Gctx.defined com Define.SourceHeader) then begin
4299-
let version_major = com.version / 1000 in
4300-
let version_minor = (com.version mod 1000) / 100 in
4301-
let version_revision = (com.version mod 100) in
4299+
let version_major = com.version.major in
4300+
let version_minor = com.version.minor in
4301+
let version_revision = com.version.revision in
43024302
Gctx.define_value com Define.SourceHeader (Printf.sprintf "Generated by HLC %d.%d.%d (HL v%d)" version_major version_minor version_revision code.version);
43034303
end;
43044304
Hl2c.write_c com com.file code gnames;

src/generators/genswf.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ let build_swc_catalog com types =
207207
let x = node "swc" ["xmlns","http://www.adobe.com/flash/swccatalog/9"] [
208208
node "versions" [] [
209209
node "swc" ["version","1.2"] [];
210-
node "haxe" ["version",Printf.sprintf "%d.%.2d" (com.version/10000) (com.version mod 10000)] [];
210+
node "haxe" ["version",Printf.sprintf "%d.%.2d" (com.Gctx.version.version/10000) (com.version.version mod 10000)] [];
211211
];
212212
node "features" [] [
213213
node "feature-script-deps" [] [];

src/generators/hl2c.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1463,7 +1463,7 @@ let write_c com file (code:code) gnames =
14631463
let bnames = Array.map (fun b -> "bytes$" ^ short_digest (Digest.to_hex (Digest.bytes b))) code.bytes in
14641464

14651465
let ctx = {
1466-
version = com.Gctx.version;
1466+
version = com.Gctx.version.version;
14671467
out = Buffer.create 1024;
14681468
tabs = "";
14691469
hlcode = code;

src/macro/macroApi.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2238,7 +2238,7 @@ let macro_api ccom get_api =
22382238
"get_configuration", vfun0 (fun() ->
22392239
let com = ccom() in
22402240
encode_obj [
2241-
"version", vint com.version;
2241+
"version", vint com.version.version;
22422242
"args", encode_array (List.map encode_string com.args);
22432243
"debug", vbool com.debug;
22442244
"verbose", vbool com.verbose;

0 commit comments

Comments
 (0)