소스 검색

force inlining of abstract "this" only if it is actually written (closes #2050)

Simon Krajewski 12 년 전
부모
커밋
835b3c3733
1개의 변경된 파일3개의 추가작업 그리고 3개의 파일을 삭제
  1. 3 3
      optimizer.ml

+ 3 - 3
optimizer.ml

@@ -349,9 +349,9 @@ let rec type_inline ctx cf f ethis params tret config p force =
 		let flag = flag && (not i.i_captured || is_constant e) in
 		(* force inlining if we modify 'this' *)
 		if i.i_write && snd i.i_var.v_extra then force := true;
-		(* force inlining of 'this' variable if the expression is writable *)
-		let flag = if not flag && snd i.i_var.v_extra then begin
-			if i.i_write && not (is_writable e) then error "Cannot modify the abstract value, store it into a local first" p;
+		(* force inlining of 'this' variable if it is written *)
+		let flag = if not flag && snd i.i_var.v_extra && i.i_write then begin
+			if not (is_writable e) then error "Cannot modify the abstract value, store it into a local first" p;
 			true
 		end else flag in
 		if flag then begin