Prechádzať zdrojové kódy

[analyzer] do not bind `@:structAccess` to temp vars

Simon Krajewski 8 rokov pred
rodič
commit
747c9e048a

+ 2 - 0
src/optimization/analyzerTexpr.ml

@@ -30,6 +30,8 @@ let rec is_true_expr e1 = match e1.eexpr with
 	| TParenthesis e1 -> is_true_expr e1
 	| _ -> false
 
+let is_stack_allocated c = Meta.has Meta.StructAccess c.cl_meta
+
 let map_values ?(allow_control_flow=true) f e =
 	let branching = ref false in
 	let efinal = ref None in

+ 4 - 1
src/optimization/analyzerTexprTransformer.ml

@@ -333,7 +333,10 @@ let rec func ctx bb tf t p =
 		add_texpr bb {e with eexpr = TBinop(OpAssign,ea,eop)};
 		bb,ea
 	and field_assign_op bb op e ef e1 fa e2 =
-		let bb,e1 = bind_to_temp bb false e1 in
+		let bb,e1 = match fa with
+			| FInstance(c,_,_) | FClosure(Some(c,_),_) when is_stack_allocated c -> bb,e1
+			| _ -> bind_to_temp bb false e1
+		in
 		let ef = {ef with eexpr = TField(e1,fa)} in
 		let bb,e3 = bind_to_temp bb false ef in
 		let bb,e2 = bind_to_temp bb false e2 in