瀏覽代碼

fixes to DCE with Reflect

Franco Ponticelli 14 年之前
父節點
當前提交
ebd2ea7061
共有 1 個文件被更改,包括 3 次插入2 次删除
  1. 3 2
      optimizer.ml

+ 3 - 2
optimizer.ml

@@ -597,14 +597,15 @@ let reduce_expression ctx e =
 let filter_dead_code com =
 let filter_dead_code com =
 	let s_class c = s_type_path c.cl_path in
 	let s_class c = s_type_path c.cl_path in
 	let s_field c cf = (s_class c) ^ "." ^ cf.cf_name in
 	let s_field c cf = (s_class c) ^ "." ^ cf.cf_name in
+	let keep c cf = (has_meta ":core_api" c.cl_meta) || (has_meta ":keep" c.cl_meta) || (has_meta ":keep" cf.cf_meta) in
 	let remove_inlines c =
 	let remove_inlines c =
 		let remove_inline_fields lst =
 		let remove_inline_fields lst =
 			List.filter(fun cf ->
 			List.filter(fun cf ->
 				match cf.cf_kind with
 				match cf.cf_kind with
-				| Var k when ((k.v_read = AccInline) && (not (has_meta ":keep" cf.cf_meta))) ->
+				| Var k when ((k.v_read = AccInline) && (not (keep c cf))) ->
 					if com.verbose then print_endline ("Remove inline var " ^ s_field c cf);
 					if com.verbose then print_endline ("Remove inline var " ^ s_field c cf);
 					false;
 					false;
-				| Method k when ((k = MethInline) && (not (has_meta ":keep" cf.cf_meta))) ->
+				| Method k when ((k = MethInline) && (not (keep c cf))) ->
 					if com.verbose then print_endline ("Remove inline method " ^ s_field c cf);
 					if com.verbose then print_endline ("Remove inline method " ^ s_field c cf);
 					false;
 					false;
 				| _ ->
 				| _ ->