Browse Source

[analyzer] ignore unbound variables when inferring (closes #4999)

Simon Krajewski 9 năm trước cách đây
mục cha
commit
1563eaca9e

+ 0 - 3
src/optimization/analyzerTexpr.ml

@@ -122,9 +122,6 @@ let is_pure c cf = has_pure_meta c.cl_meta || has_pure_meta cf.cf_meta
 let wrap_meta s e =
 	mk (TMeta((Meta.Custom s,[],e.epos),e)) e.etype e.epos
 
-let is_unbound v =
-	Meta.has Meta.Unbound v.v_meta
-
 let is_really_unbound v =
 	v.v_name <> "`trace" && is_unbound v
 

+ 2 - 2
src/optimization/analyzerTypes.ml

@@ -454,10 +454,10 @@ module Graph = struct
 					()
 			end;
 			DynArray.iter (fun e -> match e.eexpr with
-				| TVar(v,eo) ->
+				| TVar(v,eo) when not (is_unbound v) ->
 					declare_var g v bb;
 					if eo <> None then add_var_def g bb v;
-				| TBinop(OpAssign,{eexpr = TLocal v},_) ->
+				| TBinop(OpAssign,{eexpr = TLocal v},_) when not (is_unbound v) ->
 					add_var_def g bb v
 				| _ ->
 					()

+ 3 - 0
src/typing/type.ml

@@ -327,6 +327,9 @@ let mk_block e =
 	| TBlock _ -> e
 	| _ -> mk (TBlock [e]) e.etype e.epos
 
+let is_unbound v =
+	Meta.has Meta.Unbound v.v_meta
+
 let mk_cast e t p = mk (TCast(e,None)) t p
 
 let null t p = mk (TConst TNull) t p