Selaa lähdekoodia

small renaming : mctx for macro type context and mint for macro interpreter

Nicolas Cannasse 12 vuotta sitten
vanhempi
commit
048ba11cbd
1 muutettua tiedostoa jossa 60 lisäystä ja 60 poistoa
  1. 60 60
      typer.ml

+ 60 - 60
typer.ml

@@ -3124,8 +3124,8 @@ let make_macro_api ctx p =
 			ctx.m.curmod
 			ctx.m.curmod
 		);
 		);
 		Interp.delayed_macro = (fun i ->
 		Interp.delayed_macro = (fun i ->
-			let ctx2 = (match ctx.g.macros with None -> assert false | Some (_,ctx2) -> ctx2) in
-			let f = (try DynArray.get ctx2.g.delayed_macros i with _ -> failwith "Delayed macro retrieve failure") in
+			let mctx = (match ctx.g.macros with None -> assert false | Some (_,mctx) -> mctx) in
+			let f = (try DynArray.get mctx.g.delayed_macros i with _ -> failwith "Delayed macro retrieve failure") in
 			f();
 			f();
 			let ret = !delayed_macro_result in
 			let ret = !delayed_macro_result in
 			delayed_macro_result := (fun() -> assert false);
 			delayed_macro_result := (fun() -> assert false);
@@ -3133,42 +3133,42 @@ let make_macro_api ctx p =
 		);
 		);
 	}
 	}
 
 
-let rec init_macro_interp ctx ctx2 mctx =
+let rec init_macro_interp ctx mctx mint =
 	let p = Ast.null_pos in
 	let p = Ast.null_pos in
-	ignore(Typeload.load_module ctx2 (["haxe";"macro"],"Expr") p);
-	ignore(Typeload.load_module ctx2 (["haxe";"macro"],"Type") p);
-	flush_macro_context mctx ctx;
-	Interp.init mctx;
-	if !macro_enable_cache && not (Common.defined ctx2.com Define.NoMacroCache) then macro_interp_cache := Some mctx
-
-and flush_macro_context mctx ctx =
-	let ctx2 = (match ctx.g.macros with None -> assert false | Some (_,ctx2) -> ctx2) in
-	finalize ctx2;
-	let _, types, modules = generate ctx2 in
-	ctx2.com.types <- types;
-	ctx2.com.Common.modules <- modules;
+	ignore(Typeload.load_module mctx (["haxe";"macro"],"Expr") p);
+	ignore(Typeload.load_module mctx (["haxe";"macro"],"Type") p);
+	flush_macro_context mint ctx;
+	Interp.init mint;
+	if !macro_enable_cache && not (Common.defined mctx.com Define.NoMacroCache) then macro_interp_cache := Some mint
+
+and flush_macro_context mint ctx =
+	let mctx = (match ctx.g.macros with None -> assert false | Some (_,mctx) -> mctx) in
+	finalize mctx;
+	let _, types, modules = generate mctx in
+	mctx.com.types <- types;
+	mctx.com.Common.modules <- modules;
 	(* if one of the type we are using has been modified, we need to create a new macro context from scratch *)
 	(* if one of the type we are using has been modified, we need to create a new macro context from scratch *)
-	let mctx = if List.exists (Interp.has_old_version mctx) types then begin
-		let com2 = ctx2.com in
-		let mctx = Interp.create com2 (make_macro_api ctx Ast.null_pos) in
-		let macro = ((fun() -> Interp.select mctx), ctx2) in
+	let mint = if List.exists (Interp.has_old_version mint) types then begin
+		let com2 = mctx.com in
+		let mint = Interp.create com2 (make_macro_api ctx Ast.null_pos) in
+		let macro = ((fun() -> Interp.select mint), mctx) in
 		ctx.g.macros <- Some macro;
 		ctx.g.macros <- Some macro;
-		ctx2.g.macros <- Some macro;
-		init_macro_interp ctx ctx2 mctx;
-		mctx
-	end else mctx in
+		mctx.g.macros <- Some macro;
+		init_macro_interp ctx mctx mint;
+		mint
+	end else mint in
 	(* we should maybe ensure that all filters in Main are applied. Not urgent atm *)
 	(* we should maybe ensure that all filters in Main are applied. Not urgent atm *)
-	Interp.add_types mctx types (Codegen.post_process [Codegen.captured_vars ctx2.com; Codegen.rename_local_vars ctx2.com]);
+	Interp.add_types mint types (Codegen.post_process [Codegen.captured_vars mctx.com; Codegen.rename_local_vars mctx.com]);
 	Codegen.post_process_end()
 	Codegen.post_process_end()
 	
 	
-let create_macro_interp ctx ctx2 =
-	let com2 = ctx2.com in
-	let mctx, init = (match !macro_interp_cache with
+let create_macro_interp ctx mctx =
+	let com2 = mctx.com in
+	let mint, init = (match !macro_interp_cache with
 		| None ->
 		| None ->
-			let mctx = Interp.create com2 (make_macro_api ctx Ast.null_pos) in
-			mctx, (fun() -> init_macro_interp ctx ctx2 mctx)
-		| Some mctx ->
-			mctx, (fun() -> ())
+			let mint = Interp.create com2 (make_macro_api ctx Ast.null_pos) in
+			mint, (fun() -> init_macro_interp ctx mctx mint)
+		| Some mint ->
+			mint, (fun() -> ())
 	) in
 	) in
 	let on_error = com2.error in
 	let on_error = com2.error in
 	com2.error <- (fun e p ->
 	com2.error <- (fun e p ->
@@ -3176,10 +3176,10 @@ let create_macro_interp ctx ctx2 =
 		macro_interp_cache := None;
 		macro_interp_cache := None;
 		on_error e p
 		on_error e p
 	);
 	);
-	let macro = ((fun() -> Interp.select mctx), ctx2) in
+	let macro = ((fun() -> Interp.select mint), mctx) in
 	ctx.g.macros <- Some macro;
 	ctx.g.macros <- Some macro;
-	ctx2.g.macros <- Some macro;
-	(* ctx2.g.core_api <- ctx.g.core_api; // causes some issues because of optional args and Null type in Flash9 *)
+	mctx.g.macros <- Some macro;
+	(* mctx.g.core_api <- ctx.g.core_api; // causes some issues because of optional args and Null type in Flash9 *)
 	init()
 	init()
 	
 	
 let get_macro_context ctx p =
 let get_macro_context ctx p =
@@ -3203,9 +3203,9 @@ let get_macro_context ctx p =
 		com2.defines <- PMap.foldi (fun k v acc -> if List.mem k to_remove then acc else PMap.add k v acc) com2.defines PMap.empty;
 		com2.defines <- PMap.foldi (fun k v acc -> if List.mem k to_remove then acc else PMap.add k v acc) com2.defines PMap.empty;
 		Common.define com2 Define.Macro;
 		Common.define com2 Define.Macro;
 		Common.init_platform com2 Neko;
 		Common.init_platform com2 Neko;
-		let ctx2 = ctx.g.do_create com2 in
-		create_macro_interp ctx ctx2;
-		api, ctx2
+		let mctx = ctx.g.do_create com2 in
+		create_macro_interp ctx mctx;
+		api, mctx
 
 
 let load_macro ctx cpath f p =
 let load_macro ctx cpath f p =
 	(*
 	(*
@@ -3214,11 +3214,11 @@ let load_macro ctx cpath f p =
 		typing the classes needed for macro execution.
 		typing the classes needed for macro execution.
 	*)
 	*)
 	let t = macro_timer ctx "typing (+init)" in
 	let t = macro_timer ctx "typing (+init)" in
-	let api, ctx2 = get_macro_context ctx p in
-	let mctx = Interp.get_ctx() in
+	let api, mctx = get_macro_context ctx p in
+	let mint = Interp.get_ctx() in
 	let m = (try Hashtbl.find ctx.g.types_module cpath with Not_found -> cpath) in
 	let m = (try Hashtbl.find ctx.g.types_module cpath with Not_found -> cpath) in
-	let mloaded = Typeload.load_module ctx2 m p in
-	ctx2.m <- {
+	let mloaded = Typeload.load_module mctx m p in
+	mctx.m <- {
 		curmod = mloaded;
 		curmod = mloaded;
 		module_types = [];
 		module_types = [];
 		module_using = [];
 		module_using = [];
@@ -3226,14 +3226,14 @@ let load_macro ctx cpath f p =
 		wildcard_packages = [];
 		wildcard_packages = [];
 	};
 	};
 	add_dependency ctx.m.curmod mloaded;
 	add_dependency ctx.m.curmod mloaded;
-	let cl, meth = (match Typeload.load_instance ctx2 { tpackage = fst cpath; tname = snd cpath; tparams = []; tsub = None } p true with
+	let cl, meth = (match Typeload.load_instance mctx { tpackage = fst cpath; tname = snd cpath; tparams = []; tsub = None } p true with
 		| TInst (c,_) ->
 		| TInst (c,_) ->
-			finalize ctx2;
+			finalize mctx;
 			c, (try PMap.find f c.cl_statics with Not_found -> error ("Method " ^ f ^ " not found on class " ^ s_type_path cpath) p)
 			c, (try PMap.find f c.cl_statics with Not_found -> error ("Method " ^ f ^ " not found on class " ^ s_type_path cpath) p)
 		| _ -> error "Macro should be called on a class" p
 		| _ -> error "Macro should be called on a class" p
 	) in
 	) in
 	let meth = (match follow meth.cf_type with TFun (args,ret) -> args,ret,cl,meth | _ -> error "Macro call should be a method" p) in
 	let meth = (match follow meth.cf_type with TFun (args,ret) -> args,ret,cl,meth | _ -> error "Macro call should be a method" p) in
-	if not ctx.in_macro then flush_macro_context mctx ctx;
+	if not ctx.in_macro then flush_macro_context mint ctx;
 	t();
 	t();
 	let call args =
 	let call args =
 		let t = macro_timer ctx (s_type_path cpath ^ "." ^ f) in
 		let t = macro_timer ctx (s_type_path cpath ^ "." ^ f) in
@@ -3242,24 +3242,24 @@ let load_macro ctx cpath f p =
 		t();
 		t();
 		r
 		r
 	in
 	in
-	ctx2, meth, call
+	mctx, meth, call
 
 
 let type_macro ctx mode cpath f (el:Ast.expr list) p =
 let type_macro ctx mode cpath f (el:Ast.expr list) p =
-	let ctx2, (margs,mret,mclass,mfield), call_macro = load_macro ctx cpath f p in
+	let mctx, (margs,mret,mclass,mfield), call_macro = load_macro ctx cpath f p in
 	let mpos = mfield.cf_pos in
 	let mpos = mfield.cf_pos in
 	let ctexpr = { tpackage = ["haxe";"macro"]; tname = "Expr"; tparams = []; tsub = None } in
 	let ctexpr = { tpackage = ["haxe";"macro"]; tname = "Expr"; tparams = []; tsub = None } in
-	let expr = Typeload.load_instance ctx2 ctexpr p false in
+	let expr = Typeload.load_instance mctx ctexpr p false in
 	(match mode with
 	(match mode with
 	| MExpr ->
 	| MExpr ->
-		unify ctx2 mret expr mpos;
+		unify mctx mret expr mpos;
 	| MBuild ->
 	| MBuild ->
 		let ctfields = { tpackage = []; tname = "Array"; tparams = [TPType (CTPath { tpackage = ["haxe";"macro"]; tname = "Expr"; tparams = []; tsub = Some "Field" })]; tsub = None } in
 		let ctfields = { tpackage = []; tname = "Array"; tparams = [TPType (CTPath { tpackage = ["haxe";"macro"]; tname = "Expr"; tparams = []; tsub = Some "Field" })]; tsub = None } in
-		let tfields = Typeload.load_instance ctx2 ctfields p false in
-		unify ctx2 mret tfields mpos
+		let tfields = Typeload.load_instance mctx ctfields p false in
+		unify mctx mret tfields mpos
 	| MMacroType ->
 	| MMacroType ->
 		let cttype = { tpackage = ["haxe";"macro"]; tname = "Type"; tparams = []; tsub = None } in
 		let cttype = { tpackage = ["haxe";"macro"]; tname = "Type"; tparams = []; tsub = None } in
-		let ttype = Typeload.load_instance ctx2 cttype p false in
-		unify ctx2 mret ttype mpos
+		let ttype = Typeload.load_instance mctx cttype p false in
+		unify mctx mret ttype mpos
 	);
 	);
 	(*
 	(*
 		if the function's last argument is of Array<Expr>, split the argument list and use [] for unify_call_params
 		if the function's last argument is of Array<Expr>, split the argument list and use [] for unify_call_params
@@ -3290,7 +3290,7 @@ let type_macro ctx mode cpath f (el:Ast.expr list) p =
 		(*
 		(*
 			force default parameter types to haxe.macro.Expr, and if success allow to pass any value type since it will be encoded
 			force default parameter types to haxe.macro.Expr, and if success allow to pass any value type since it will be encoded
 		*)
 		*)
-		let eargs = List.map (fun (n,o,t) -> try unify_raise ctx2 t expr p; (n, o, t_dynamic), true with Error (Unify _,_) -> (n,o,t), false) margs in
+		let eargs = List.map (fun (n,o,t) -> try unify_raise mctx t expr p; (n, o, t_dynamic), true with Error (Unify _,_) -> (n,o,t), false) margs in
 		(*
 		(*
 			this is quite tricky here : we want to use unify_call_params which will type our AST expr
 			this is quite tricky here : we want to use unify_call_params which will type our AST expr
 			but we want to be able to get it back after it's been padded with nulls
 			but we want to be able to get it back after it's been padded with nulls
@@ -3316,7 +3316,7 @@ let type_macro ctx mode cpath f (el:Ast.expr list) p =
 			incr index;
 			incr index;
 			(EArray ((EArrayDecl [e],p),(EConst (Int (string_of_int (!index))),p)),p)
 			(EArray ((EArrayDecl [e],p),(EConst (Int (string_of_int (!index))),p)),p)
 		) el in
 		) el in
-		let elt, _ = unify_call_params ctx2 (Some (TInst(mclass,[]),mfield)) constants (List.map fst eargs) t_dynamic p false in
+		let elt, _ = unify_call_params mctx (Some (TInst(mclass,[]),mfield)) constants (List.map fst eargs) t_dynamic p false in
 		List.iter (fun f -> f()) (!todo);
 		List.iter (fun f -> f()) (!todo);
 		List.map2 (fun (_,ise) e ->
 		List.map2 (fun (_,ise) e ->
 			let e, et = (match e.eexpr with
 			let e, et = (match e.eexpr with
@@ -3373,13 +3373,13 @@ let type_macro ctx mode cpath f (el:Ast.expr list) p =
 		let ctx = {
 		let ctx = {
 			ctx with locals = ctx.locals;
 			ctx with locals = ctx.locals;
 		} in
 		} in
-		let pos = DynArray.length ctx2.g.delayed_macros in
-		DynArray.add ctx2.g.delayed_macros (fun() ->
+		let pos = DynArray.length mctx.g.delayed_macros in
+		DynArray.add mctx.g.delayed_macros (fun() ->
 			delayed_macro_result := (fun() ->
 			delayed_macro_result := (fun() ->
-				let mctx = Interp.get_ctx() in
+				let mint = Interp.get_ctx() in
 				match call() with
 				match call() with
 				| None -> (fun() -> raise Interp.Abort)
 				| None -> (fun() -> raise Interp.Abort)
-				| Some e -> Interp.eval mctx (Genneko.gen_expr mctx.Interp.gen (type_expr ctx e Value))
+				| Some e -> Interp.eval mint (Genneko.gen_expr mint.Interp.gen (type_expr ctx e Value))
 			);
 			);
 		);
 		);
 		ctx.m.curmod.m_extra.m_time <- -1.; (* disable caching for modules having macro-in-macro *)
 		ctx.m.curmod.m_extra.m_time <- -1.; (* disable caching for modules having macro-in-macro *)
@@ -3391,8 +3391,8 @@ let type_macro ctx mode cpath f (el:Ast.expr list) p =
 	e
 	e
 
 
 let call_macro ctx path meth args p =
 let call_macro ctx path meth args p =
-	let ctx2, (margs,_,mclass,mfield), call = load_macro ctx path meth p in
-	let el, _ = unify_call_params ctx2 (Some (TInst(mclass,[]),mfield)) args margs t_dynamic p false in
+	let mctx, (margs,_,mclass,mfield), call = load_macro ctx path meth p in
+	let el, _ = unify_call_params mctx (Some (TInst(mclass,[]),mfield)) args margs t_dynamic p false in
 	call (List.map (fun e -> try Interp.make_const e with Exit -> error "Parameter should be a constant" e.epos) el)
 	call (List.map (fun e -> try Interp.make_const e with Exit -> error "Parameter should be a constant" e.epos) el)
 
 
 let call_init_macro ctx e =
 let call_init_macro ctx e =