Bläddra i källkod

[analyzer] update field access after propagating because we might have a more accurate type

Simon Krajewski 10 år sedan
förälder
incheckning
83e754bdf4
1 ändrade filer med 9 tillägg och 0 borttagningar
  1. 9 0
      analyzer.ml

+ 9 - 0
analyzer.ml

@@ -1180,6 +1180,15 @@ module ConstPropagation = struct
 				in
 				let el = Codegen.UnificationCallback.check_call check el e1.etype in
 				{e with eexpr = TCall(e1,el)}
+			| TField(e1,fa) ->
+				let e1' = loop e1 in
+				let fa = if e1' != e1 then
+					begin try quick_field e1'.etype (field_name fa)
+					with Not_found -> fa end
+				else
+					fa
+				in
+				{e with eexpr = TField(e1',fa)}
 			| TUnop((Increment | Decrement),_,_) ->
 				e
 			| TBinop(OpAssignOp op,e1,e2) ->