浏览代码

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

Simon Krajewski 10 年之前
父节点
当前提交
83e754bdf4
共有 1 个文件被更改,包括 9 次插入0 次删除
  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) ->