Browse Source

[DCE] pass position to mark_t

Simon Krajewski 12 years ago
parent
commit
4ec7d58244
1 changed files with 18 additions and 18 deletions
  1. 18 18
      dce.ml

+ 18 - 18
dce.ml

@@ -129,37 +129,37 @@ end
 
 let rec mark_enum dce e = if not (Meta.has Meta.Used e.e_meta) then begin
 	e.e_meta <- (Meta.Used,[],e.e_pos) :: e.e_meta;
-	PMap.iter (fun _ ef -> mark_t dce ef.ef_type) e.e_constrs;
+	PMap.iter (fun _ ef -> mark_t dce ef.ef_pos ef.ef_type) e.e_constrs;
 end
 
 and mark_abstract dce a = if not (Meta.has Meta.Used a.a_meta) then
 	a.a_meta <- (Meta.Used,[],a.a_pos) :: a.a_meta
 
 (* mark a type as kept *)
-and mark_t dce t =
+and mark_t dce p t =
 	if not (List.exists (fun t2 -> Type.fast_eq t t2) dce.t_stack) then begin
 		dce.t_stack <- t :: dce.t_stack;
 		begin match follow t with
 		| TInst({cl_kind = KTypeParameter tl} as c,pl) ->
 			if not (Meta.has Meta.Used c.cl_meta) then begin
 				c.cl_meta <- (Meta.Used,[],c.cl_pos) :: c.cl_meta;
-				List.iter (mark_t dce) tl;
+				List.iter (mark_t dce p) tl;
 			end;
-			List.iter (mark_t dce) pl
+			List.iter (mark_t dce p) pl
 		| TInst(c,pl) ->
 			mark_class dce c;
-			List.iter (mark_t dce) pl
+			List.iter (mark_t dce p) pl
 		| TFun(args,ret) ->
-			List.iter (fun (_,_,t) -> mark_t dce t) args;
-			mark_t dce ret
+			List.iter (fun (_,_,t) -> mark_t dce p t) args;
+			mark_t dce p ret
 		| TEnum(e,pl) ->
 			mark_enum dce e;
-			List.iter (mark_t dce) pl
+			List.iter (mark_t dce p) pl
 		| TAbstract(a,pl) when Meta.has Meta.MultiType a.a_meta ->
-			mark_t dce (snd (Codegen.Abstract.find_multitype_specialization a pl Ast.null_pos))
+			mark_t dce p (snd (Codegen.Abstract.find_multitype_specialization a pl p))
 		| TAbstract(a,pl) ->
 			mark_abstract dce a;
-			List.iter (mark_t dce) pl
+			List.iter (mark_t dce p) pl
 		| TLazy _ | TDynamic _ | TAnon _ | TType _ | TMono _ -> ()
 		end;
 		dce.t_stack <- List.tl dce.t_stack
@@ -286,17 +286,17 @@ and field dce c n stat =
 		if dce.debug then prerr_endline ("[DCE] Field " ^ n ^ " not found on " ^ (s_type_path c.cl_path)) else ())
 
 and expr dce e =
-	mark_t dce e.etype;
+	mark_t dce e.epos e.etype;
 	match e.eexpr with
 	| TNew(c,pl,el) ->
 		mark_class dce c;
 		field dce c "new" false;
 		List.iter (expr dce) el;
-		List.iter (mark_t dce) pl;
+		List.iter (mark_t dce e.epos) pl;
 	| TVars vl ->
-		List.iter (fun (v,e) ->
-			opt (expr dce) e;
-			mark_t dce v.v_type;
+		List.iter (fun (v,e1) ->
+			opt (expr dce) e1;
+			mark_t dce e.epos v.v_type;
 		) vl;
 	| TCast(e, Some mt) ->
 		check_feature dce "typed_cast";
@@ -309,7 +309,7 @@ and expr dce e =
 		List.iter (fun (v,e) ->
 			if v.v_type != t_dynamic then check_feature dce "typed_catch";
 			expr dce e;
-			mark_t dce v.v_type;
+			mark_t dce e.epos v.v_type;
 		) vl;
 	| TCall ({eexpr = TLocal ({v_name = "__define_feature__"})},[{eexpr = TConst (TString ft)};e]) ->
 		Common.add_feature dce.com ft;
@@ -323,7 +323,7 @@ and expr dce e =
 		expr dce ef;
 		List.iter (expr dce) args;
 	| TCall ({eexpr = TConst TSuper} as e,el) ->
-		mark_t dce e.etype;
+		mark_t dce e.epos e.etype;
 		List.iter (expr dce) el;
 	| TField(e,fa) ->
 		begin match fa with
@@ -415,7 +415,7 @@ let run com main full =
 			List.iter (fun (c,cf,stat) ->
 				mark_class dce c;
 				mark_field dce c cf stat;
-				mark_t dce cf.cf_type
+				mark_t dce cf.cf_pos cf.cf_type
 			) cfl;
 			(* follow expressions to new types/fields *)
 			List.iter (fun (_,cf,_) ->