Prechádzať zdrojové kódy

do not discard is_value when recursing into transform_expr

Simon Krajewski 11 rokov pred
rodič
commit
81334ab0d8
1 zmenil súbory, kde vykonal 15 pridanie a 15 odobranie
  1. 15 15
      genpy.ml

+ 15 - 15
genpy.ml

@@ -637,15 +637,15 @@ module Transformer = struct
 			transform_switch ae is_value e cases edef
 
 		(* anon field access on optional params *)
-		| (_, TField(e,FAnon cf)) when Meta.has Meta.Optional cf.cf_meta ->
+		| (is_value, TField(e,FAnon cf)) when Meta.has Meta.Optional cf.cf_meta ->
 			let e = dynamic_field_read e cf.cf_name in
-			transform_expr e
-		| (_, TBinop(OpAssign,{eexpr = TField(e1,FAnon cf)},e2)) when Meta.has Meta.Optional cf.cf_meta ->
+			transform_expr ~is_value:is_value e
+		| (is_value, TBinop(OpAssign,{eexpr = TField(e1,FAnon cf)},e2)) when Meta.has Meta.Optional cf.cf_meta ->
 			let e = dynamic_field_write e1 cf.cf_name e2 in
-			transform_expr e
-		| (_, TBinop(OpAssignOp op,{eexpr = TField(e1,FAnon cf)},e2)) when Meta.has Meta.Optional cf.cf_meta ->
+			transform_expr ~is_value:is_value e
+		| (is_value, TBinop(OpAssignOp op,{eexpr = TField(e1,FAnon cf)},e2)) when Meta.has Meta.Optional cf.cf_meta ->
 			let e = dynamic_field_read_write ae.a_next_id e1 cf.cf_name op e2 in
-			transform_expr e
+			transform_expr ~is_value:is_value e
 		(* TODO we need to deal with Increment, Decrement too!
 
 		| (_, TUnop( (Increment | Decrement) as unop, op,{eexpr = TField(e1,FAnon cf)})) when Meta.has Meta.Optional cf.cf_meta  ->
@@ -673,18 +673,18 @@ module Transformer = struct
 			let r = { a_expr with eexpr = TUnop(op, Prefix, e1.a_expr) } in
 			lift_expr ~blocks:e1.a_blocks r
 
-		| (_, TField(e,FDynamic s)) ->
+		| (is_value, TField(e,FDynamic s)) ->
 			let e = dynamic_field_read e s in
-			transform_expr e
-		| (_, TBinop(OpAssign,{eexpr = TField(e1,FDynamic s)},e2)) ->
+			transform_expr ~is_value:is_value e
+		| (is_value, TBinop(OpAssign,{eexpr = TField(e1,FDynamic s)},e2)) ->
 			let e = dynamic_field_write e1 s e2 in
-			transform_expr e
-		| (_, TBinop(OpAssignOp op,{eexpr = TField(e1,FDynamic s)},e2)) ->
+			transform_expr ~is_value:is_value e
+		| (is_value, TBinop(OpAssignOp op,{eexpr = TField(e1,FDynamic s)},e2)) ->
 			let e = dynamic_field_read_write ae.a_next_id e1 s op e2 in
-			transform_expr e
-		| (_, TField(e1, FClosure(Some {cl_path = [],("String" | "list")},cf))) ->
+			transform_expr ~is_value:is_value e
+		| (is_value, TField(e1, FClosure(Some {cl_path = [],("String" | "list")},cf))) ->
 			let e = dynamic_field_read e1 cf.cf_name in
-			transform_expr e
+			transform_expr ~is_value:is_value e
 		| (is_value, TBinop(OpAssign, left, right))->
 			(let left = trans true [] left in
 			let right = trans true [] right in
@@ -772,7 +772,7 @@ module Transformer = struct
 			lift_expr ~blocks:blocks r
 		| (is_value, TCast(e1,Some mt)) ->
 			let e = Codegen.default_cast ~vtmp:(ae.a_next_id()) (match !como with Some com -> com | None -> assert false) e1 mt ae.a_expr.etype ae.a_expr.epos in
-			transform_expr e
+			transform_expr ~is_value:is_value e
 		| (is_value, TCast(e,t)) ->
 			let e = trans is_value [] e in
 			let r = { a_expr with eexpr = e.a_expr.eexpr } in