Просмотр исходного кода

avoid macro context setup unless we actually compile

This should save some time for any --connect request
Simon Krajewski 3 лет назад
Родитель
Сommit
1916d01954
4 измененных файлов с 21 добавлено и 5 удалено
  1. 2 1
      src/compiler/compilationContext.ml
  2. 2 1
      src/compiler/compiler.ml
  3. 0 1
      src/compiler/haxe.ml
  4. 17 2
      src/compiler/server.ml

+ 2 - 1
src/compiler/compilationContext.ml

@@ -45,7 +45,8 @@ and compilation_context = {
 type server_accept = unit -> (bool * (bool -> string option) * (string -> unit) * (unit -> unit))
 
 type server_api = {
-	setup_new_context : Common.context -> unit;
+	before_anything : compilation_context -> unit;
+	after_arg_parsing : compilation_context -> unit;
 	init_wait_socket : string -> int -> server_accept;
 	init_wait_connect : string -> int -> server_accept;
 	init_wait_stdio : unit -> server_accept;

+ 2 - 1
src/compiler/compiler.ml

@@ -697,6 +697,7 @@ with
 
 let compile_ctx server_api comm ctx =
 	let run ctx =
+		server_api.before_anything ctx;
 		setup_common_context ctx;
 		compile_safe ctx (fun () ->
 			let actx = Args.parse_args ctx.com in
@@ -717,7 +718,7 @@ let compile_ctx server_api comm ctx =
 			| SMNone ->
 				()
 			end;
-			server_api.setup_new_context ctx.com;
+			server_api.after_arg_parsing ctx;
 			compile ctx actx;
 		);
 		finalize ctx;

+ 0 - 1
src/compiler/haxe.ml

@@ -45,7 +45,6 @@ open Server
 
 let other = Timer.timer ["other"];;
 Sys.catch_break true;
-MacroContext.setup();
 
 let args = List.tl (Array.to_list Sys.argv) in
 (try

+ 17 - 2
src/compiler/server.ml

@@ -113,6 +113,8 @@ module ServerCompilationContext = struct
 		mutable delays : (unit -> unit) list;
 		(* True if it's an actual compilation, false if it's a display operation *)
 		mutable was_compilation : bool;
+		(* True if the macro context has been set up *)
+		mutable macro_context_setup : bool;
 	}
 
 	let create verbose cs = {
@@ -125,6 +127,7 @@ module ServerCompilationContext = struct
 		mark_loop = 0;
 		delays = [];
 		was_compilation = false;
+		macro_context_setup = false;
 	}
 
 	let add_delay sctx f =
@@ -159,6 +162,12 @@ module ServerCompilationContext = struct
 			ServerMessage.cached_modules com "" (List.length com.modules);
 		end
 
+	let ensure_macro_setup sctx =
+		if not sctx.macro_context_setup then begin
+			sctx.macro_context_setup <- true;
+			MacroContext.setup();
+		end
+
 	let cleanup () = match !MacroContext.macro_interp_cache with
 		| Some interp -> EvalContext.GlobalState.cleanup interp
 		| None -> ()
@@ -472,7 +481,11 @@ let type_module sctx (ctx:Typecore.typer) mpath p =
 		t();
 		None
 
-let setup_new_context sctx com =
+let before_anything sctx ctx =
+	ensure_macro_setup sctx
+
+let after_arg_parsing sctx ctx =
+	let com = ctx.com in
 	let cs = sctx.cs in
 	let sign = Define.get_signature com.defines in
 	ServerMessage.defines com "";
@@ -616,7 +629,8 @@ let rec process sctx comm args =
 	ServerMessage.arguments args;
 	reset sctx;
 	let api = {
-		setup_new_context = setup_new_context sctx;
+		before_anything = before_anything sctx;
+		after_arg_parsing = after_arg_parsing sctx;
 		init_wait_socket = init_wait_socket;
 		init_wait_connect = init_wait_connect;
 		init_wait_stdio = init_wait_stdio;
@@ -637,6 +651,7 @@ and wait_loop verbose accept =
 	let sctx = ServerCompilationContext.create verbose cs in
 	TypeloadModule.type_module_hook := type_module sctx;
 	MacroContext.macro_enable_cache := true;
+	ServerCompilationContext.ensure_macro_setup sctx;
 	TypeloadParse.parse_hook := parse_file cs;
 	let ring = Ring.create 10 0. in
 	let gc_heap_stats () =