Browse Source

support `std.` module prefix for dot path resolution as well

Dan Korostelev 5 years ago
parent
commit
5826d63c01
2 changed files with 20 additions and 13 deletions
  1. 18 11
      src/typing/typeload.ml
  2. 2 2
      src/typing/typerDotPath.ml

+ 18 - 11
src/typing/typeload.ml

@@ -85,13 +85,17 @@ let find_type_in_module m tname =
 		not infos.mt_private && snd infos.mt_path = tname
 	) m.m_types
 
-(* raises Module_not_found or Type_not_found *)
-let load_type_raise ctx mpath tname p =
-	let m = ctx.g.do_load_module ctx mpath p in
+(* raises Type_not_found *)
+let find_type_in_module_raise m tname p =
 	try
 		find_type_in_module m tname
 	with Not_found ->
-		raise_error (Type_not_found(mpath,tname)) p
+		raise_error (Type_not_found (m.m_path,tname)) p
+
+(* raises Module_not_found or Type_not_found *)
+let load_type_raise ctx mpath tname p =
+	let m = ctx.g.do_load_module ctx mpath p in
+	find_type_in_module_raise m tname p
 
 (* raises Not_found *)
 let load_type ctx mpath tname p = try
@@ -148,17 +152,20 @@ let load_unqualified_type_def ctx mname tname p =
 		(* Check our current module's path and its parent paths *)
 		loop (List.rev (fst ctx.m.curmod.m_path))
 
-let load_qualified_type_def ctx pack mname tname p =
+let load_module ctx path p =
 	try
-		(* Try loading the fully qualified module *)
-		load_type_raise ctx (pack,mname) tname p
-	with Error((Module_not_found _ | Type_not_found _),_) as exc ->
-		match pack with
-		| "std" :: pack ->
-			load_type_raise ctx (pack,mname) tname p
+		ctx.g.do_load_module ctx path p
+	with Error (Module_not_found mpath,_) as exc when mpath = path ->
+		match path with
+		| ("std" :: pack, name) ->
+			ctx.g.do_load_module ctx (pack,name) p
 		| _ ->
 			raise exc
 
+let load_qualified_type_def ctx pack mname tname p =
+	let m = load_module ctx (pack,mname) p in
+	find_type_in_module_raise m tname p
+
 (*
 	load a type or a subtype definition
 *)

+ 2 - 2
src/typing/typerDotPath.ml

@@ -80,7 +80,7 @@ let resolve_dot_path ctx (path_parts : dot_path_part list) =
 				(* try accessing subtype or main class static field by `sname` in given module with path `m` *)
 				let check_module m =
 					try
-						let md = TypeloadModule.load_module ctx m p in
+						let md = Typeload.load_module ctx m p in
 						(* first look for existing subtype *)
 						(try
 							let t = Typeload.find_type_in_module md sname in
@@ -121,7 +121,7 @@ let resolve_dot_path ctx (path_parts : dot_path_part list) =
 					(match check_module (pack,name) with
 					| Some r -> r
 					| None -> def ()));
-			| _ ->
+			| _ -> 
 				(* no more parts or next part starts with lowercase - it's surely not a type name, so do the default thing *)
 				def())