Преглед изворни кода

look up unresolved identifier on extends/implements (closes #5658)

Simon Krajewski пре 9 година
родитељ
комит
f47d00e86e
2 измењених фајлова са 10 додато и 3 уклоњено
  1. 1 1
      Makefile
  2. 9 2
      src/typing/typeload.ml

+ 1 - 1
Makefile

@@ -138,7 +138,7 @@ src/display/display.$(MODULE_EXT): src/path.$(MODULE_EXT) src/syntax/ast.$(MODUL
 
 src/display/displayTypes.$(MODULE_EXT) : src/syntax/ast.$(MODULE_EXT)
 
-src/display/displayOutput.$(MODULE_EXT): src/syntax/ast.$(MODULE_EXT) src/typing/type.$(MODULE_EXT) src/typing/common.$(MODULE_EXT) src/display/display.$(MODULE_EXT)
+src/display/displayOutput.$(MODULE_EXT): src/syntax/ast.$(MODULE_EXT) src/typing/type.$(MODULE_EXT) src/typing/typer.$(MODULE_EXT) src/typing/common.$(MODULE_EXT) src/display/display.$(MODULE_EXT)
 
 # generators
 

+ 9 - 2
src/typing/typeload.ml

@@ -1505,8 +1505,7 @@ module Inheritance = struct
 		) herits in
 		let herits = List.filter (ctx.g.do_inherit ctx c p) herits in
 		(* Pass 1: Check and set relations *)
-		let fl = List.map (fun (is_extends,t) ->
-			let t = load_instance ~allow_display:true ctx t false p in
+		let check_herit t is_extends =
 			if is_extends then begin
 				if c.cl_super <> None then error "Cannot extend several classes" p;
 				let csup,params = check_extends ctx c t p in
@@ -1550,6 +1549,14 @@ module Inheritance = struct
 				| _ ->
 					error "Should implement by using an interface" p
 			end
+		in
+		let fl = ExtList.List.filter_map (fun (is_extends,t) ->
+			try
+				let t = load_instance ~allow_display:true ctx t false p in
+				Some (check_herit t is_extends)
+			with Error(Module_not_found(([],name)),p) ->
+				if Display.Diagnostics.is_diagnostics_run ctx then Display.ToplevelCollector.handle_unresolved_identifier ctx name p true;
+				None
 		) herits in
 		fl
 end