Browse Source

small verify error fix

Nicolas Cannasse 16 năm trước cách đây
mục cha
commit
4038656f9b
1 tập tin đã thay đổi với 14 bổ sung4 xóa
  1. 14 4
      genswf9.ml

+ 14 - 4
genswf9.ml

@@ -364,6 +364,15 @@ let set_reg ctx r =
 	coerce ctx r.rtype;
 	write ctx (HSetReg r.rid)
 
+let set_reg_dup ctx r =
+	if not r.rinit then begin
+		r.rinit <- true;
+		if ctx.infos.icond then r.rcond <- true;
+	end;
+	coerce ctx r.rtype;
+	write ctx HDup;
+	write ctx (HSetReg r.rid)
+
 let free_reg ctx r =
 	r.rused <- false
 
@@ -422,12 +431,13 @@ let get_local_register ctx name =
 let rec setvar ctx (acc : write access) kret =
 	match acc with
 	| VReg r ->
-		if kret <> None then write ctx HDup;
-		set_reg ctx r;
+		if kret <> None then
+			set_reg_dup ctx r
+		else
+			set_reg ctx r;
 	| VGlobal _ | VId _ | VCast _ | VArray | VScope _ when kret <> None ->
 		let r = alloc_reg ctx (match kret with None -> assert false | Some k -> k) in
-		write ctx HDup;
-		set_reg ctx r;
+		set_reg_dup ctx r;
 		setvar ctx acc None;
 		write ctx (HReg r.rid);
 		free_reg ctx r