Parcourir la source

added type_expr_with_type for Arrays : allow better variance handling

Nicolas Cannasse il y a 13 ans
Parent
commit
45783c6911
3 fichiers modifiés avec 16 ajouts et 2 suppressions
  1. 1 1
      std/flash/display/DisplayObject.hx
  2. 1 1
      std/flash8/MovieClip.hx
  3. 14 0
      typer.ml

+ 1 - 1
std/flash/display/DisplayObject.hx

@@ -6,7 +6,7 @@ extern class DisplayObject extends flash.events.EventDispatcher, implements IBit
 	var blendMode : BlendMode;
 	@:require(flash10) var blendShader(null,default) : Shader;
 	var cacheAsBitmap : Bool;
-	var filters : Array<Dynamic>;
+	var filters : Array<flash.filters.BitmapFilter>;
 	var height : Float;
 	var loaderInfo(default,null) : LoaderInfo;
 	var mask : DisplayObject;

+ 1 - 1
std/flash8/MovieClip.hx

@@ -145,7 +145,7 @@ implements Dynamic
 	dynamic function onUnload() : Void;
 
 #if flash8
-	var filters : Array<Dynamic>; // does not use variance here.
+	var filters : Array<flash.filters.BitmapFilter>;
 	var blendMode : Dynamic;
 	var cacheAsBitmap : Bool;
 	var opaqueBackground : Int;

+ 14 - 0
typer.ml

@@ -1212,6 +1212,20 @@ and type_expr_with_type ctx e t =
 				| _ -> raise Not_found)
 		with Not_found ->
 			type_expr ctx e)
+	| (EArrayDecl el,p) ->
+		(match t with
+		| None -> type_expr ctx e
+		| Some t ->
+			match follow t with
+			| TInst ({ cl_path = [],"Array" },[tp]) ->
+				let el = List.map (fun e ->
+					let e = type_expr_with_type ctx e (Some tp) in
+					unify ctx e.etype tp e.epos;
+					e
+				) el in
+				mk (TArrayDecl el) t p
+			| _ ->
+				type_expr ctx e)
 	| _ ->
 		type_expr ctx e