Ver código fonte

move some display stuff around

Simon Krajewski 9 anos atrás
pai
commit
7dcfc69abb
1 arquivos alterados com 21 adições e 14 exclusões
  1. 21 14
      src/typing/typeload.ml

+ 21 - 14
src/typing/typeload.ml

@@ -1528,11 +1528,24 @@ let type_function_params ctx fd fname p =
 	params := type_type_params ctx ([],fname) (fun() -> !params) p fd.f_params;
 	!params
 
+module Display = struct
+	let is_display_file ctx p = match ctx.com.display with
+			| DMNone -> false
+			| DMResolve s ->
+				let mt = load_type_def ctx p {tname = s; tpackage = []; tsub = None; tparams = []} in
+				let p = (t_infos mt).mt_pos in
+				raise (DisplayPosition [p]);
+			| _ ->
+				Common.unique_full_path p.pfile = (!Parser.resume_display).pfile
+
+	let encloses_position p_target p =
+		p.pmin <= p_target.pmin && p.pmax >= p_target.pmax
+
 let find_enclosing com e =
 	let display_pos = ref (!Parser.resume_display) in
 	let mk_null p = (EDisplay(((EConst(Ident "null")),p),false),p) in
 	let encloses_display_pos p =
-		if p.pmin <= !display_pos.pmin && p.pmax >= !display_pos.pmax then begin
+			if encloses_position !display_pos p then begin
 			let p = !display_pos in
 			display_pos := { pfile = ""; pmin = -2; pmax = -2 };
 			Some p
@@ -1590,6 +1603,8 @@ let find_before_pos com e =
 	in
 	map e
 
+end
+
 let type_function ctx args ret fmode f do_display p =
 	let locals = save_locals ctx in
 	let fargs = List.map (fun (n,c,t) ->
@@ -1610,8 +1625,8 @@ let type_function ctx args ret fmode f do_display p =
 		type_expr ctx e NoValue
 	else begin
 		let e = match ctx.com.display with
-			| DMToplevel -> find_enclosing ctx.com e
-			| DMPosition | DMUsage | DMType -> find_before_pos ctx.com e
+			| DMToplevel -> Display.find_enclosing ctx.com e
+			| DMPosition | DMUsage | DMType -> Display.find_before_pos ctx.com e
 			| _ -> e
 		in
 		try
@@ -1621,7 +1636,7 @@ let type_function ctx args ret fmode f do_display p =
 		| Parser.TypePath (_,None,_) | Exit ->
 			type_expr ctx e NoValue
 		| DisplayTypes [t] when (match follow t with TMono _ -> true | _ -> false) ->
-			type_expr ctx (if ctx.com.display = DMToplevel then find_enclosing ctx.com e else e) NoValue
+			type_expr ctx (if ctx.com.display = DMToplevel then Display.find_enclosing ctx.com e else e) NoValue
 	end in
 	let e = match e.eexpr with
 		| TMeta((Meta.MergeBlock,_,_), ({eexpr = TBlock el} as e1)) -> e1
@@ -1983,15 +1998,7 @@ module ClassInitializer = struct
 			| None -> false
 			| Some (c,_) -> extends_public c
 		in
-		let is_display_file = match ctx.com.display with
-			| DMNone -> false
-			| DMResolve s ->
-				let mt = load_type_def ctx p {tname = s; tpackage = []; tsub = None; tparams = []} in
-				let p = (t_infos mt).mt_pos in
-				raise (DisplayPosition [p]);
-			| _ ->
-				Common.unique_full_path p.pfile = (!Parser.resume_display).pfile
-		in
+		let is_display_file = Display.is_display_file ctx p in
 		let cctx = {
 			tclass = c;
 			is_lib = is_lib;
@@ -2032,7 +2039,7 @@ module ClassInitializer = struct
 			is_override = is_override;
 			is_macro = is_macro;
 			is_extern = is_extern;
-			is_display_field = cctx.is_display_file && (cff.cff_pos.pmin <= cctx.completion_position.pmin && cff.cff_pos.pmax >= cctx.completion_position.pmax);
+			is_display_field = cctx.is_display_file && Display.encloses_position cctx.completion_position cff.cff_pos;
 			is_abstract_member = cctx.abstract <> None && Meta.has Meta.Impl cff.cff_meta;
 			field_kind = field_kind;
 			do_bind = (((not c.cl_extern || is_inline) && not c.cl_interface) || field_kind = FKInit);