瀏覽代碼

[analyzer] properly optimize binops and unops while propagating constants

Simon Krajewski 11 年之前
父節點
當前提交
94f6b32648
共有 1 個文件被更改,包括 11 次插入0 次删除
  1. 11 0
      analyzer.ml

+ 11 - 0
analyzer.ml

@@ -866,6 +866,17 @@ module ConstPropagation = struct
 			| TBinop(OpAssign,({eexpr = TLocal _} as e1),e2) ->
 				let e2 = loop e2 in
 				{e with eexpr = TBinop(OpAssign,e1,e2)}
+	 		| TBinop(op,e1,e2) ->
+				let e1 = loop e1 in
+				let e2 = loop e2 in
+				let e = {e with eexpr = TBinop(op,e1,e2)} in
+				let e' = Optimizer.optimize_binop e op e1 e2 in
+				e'
+			| TUnop(op,flag,e1) ->
+				let e1 = loop e1 in
+				let e = {e with eexpr = TUnop(op,flag,e1)} in
+				let e' = Optimizer.optimize_unop e op flag e1 in
+				e'
 			| TIf(e1,e2,eo) ->
 				let e1 = loop e1 in
 				let e2 = loop e2 in