Browse Source

[php7] type_builder#parent_expr bypasses untyped casts and metas

Alexander Kuzmenko 8 years ago
parent
commit
eda1f6b478
1 changed files with 14 additions and 15 deletions
  1. 14 15
      src/generators/genphp7.ml

+ 14 - 15
src/generators/genphp7.ml

@@ -1409,29 +1409,28 @@ class virtual type_builder ctx wrapper =
 				| _ :: parent :: rest -> expr_is_block parent rest true
 				| _ -> false
 		(**
-			Returns parent expression.
+			Returns parent expression  (bypasses casts and metas)
 		*)
 		method private parent_expr =
-			match expr_hierarchy with
-				| _ :: expr :: _ -> Some expr
-				| _ -> None
-		(**
-			Indicates if parent expression is a call (bypasses casts and metas)
-		*)
-		method private parent_expr_is_call =
-			let rec expr_is_call expr parents =
+			let rec traverse expr parents =
 				match expr.eexpr with
-					| TCast _
+					| TCast (_, None)
 					| TMeta _ ->
 						(match parents with
-							| parent :: rest -> expr_is_call parent rest
-							| [] -> false
+							| parent :: rest -> traverse parent rest
+							| [] -> None
 						)
-					| TCall _ -> true
-					| _ -> false
+					| _ -> Some expr
 			in
 			match expr_hierarchy with
-				| _ :: parent :: rest -> expr_is_call parent rest
+				| _ :: parent :: rest -> traverse parent rest
+				| _ -> None
+		(**
+			Indicates if parent expression is a call (bypasses casts and metas)
+		*)
+		method private parent_expr_is_call =
+			match self#parent_expr with
+				| Some { eexpr = TCall _ } -> true
 				| _ -> false
 		(**
 			Position of currently generated code in source hx files