소스 검색

ensure ?used marking when --no-inline is active (fixed issue #988)

Simon Krajewski 13 년 전
부모
커밋
5e03233757
1개의 변경된 파일4개의 추가작업 그리고 4개의 파일을 삭제
  1. 4 4
      typer.ml

+ 4 - 4
typer.ml

@@ -429,17 +429,17 @@ let make_call ctx e params t p =
 			| _ when has_meta ":extern" f.cf_meta -> true
 			| _ -> false
 		) in
-		if not ctx.g.doinline && not is_extern then raise Exit;
+		(* we have to make sure that we mark the field as used here so DCE does not remove it *)
+		let exit () = mark_used_field ctx f; raise Exit in
+		if not ctx.g.doinline && not is_extern then exit();
 		ignore(follow f.cf_type); (* force evaluation *)
 		let params = List.map (ctx.g.do_optimize ctx) params in
 		(match f.cf_expr with
 		| Some { eexpr = TFunction fd } ->
 			(match Optimizer.type_inline ctx f fd ethis params t p is_extern with
 			| None ->
-				(* we have to make sure that we mark the field as used here so DCE does not remove it *)
-				mark_used_field ctx f;
 				if is_extern then error "Inline could not be done" p;
-				raise Exit
+				exit()
 			| Some e -> e)
 		| _ ->
 			error "Recursive inline is not supported" p)