From 545a9b2a12411b36c2b8ce8af6a4815572a4600c Mon Sep 17 00:00:00 2001 From: Kendall Hopkins Date: Sun, 7 Apr 2019 12:18:27 -0700 Subject: [PATCH] Disallow Await and inout counting as a final position and ignore & as a lval-as-an-expression Summary: Because we don't support `async` and `inout` on the same function, we shouldn't support it as a final position. Also because &'s are slanted for removal and hack has traditionally had a firm belief they don't exist I'm going to exclude them from being counted as `lval-as-an-expression`. Reviewed By: Matt-Schellhas Differential Revision: D14789082 fbshipit-source-id: 7d23d77bd84f4ae976a59528588f0b7a05badb0c --- .../hack/src/parser/full_fidelity_parser_errors.ml | 11 +- .../concurrent/error/concurrent_reuse_lval_3.php | 8 -- .../error/concurrent_reuse_lval_3.php.errors.exp | 1 - .../error/concurrent_reuse_lval_3.php.sexp.exp | 53 -------- .../error/lval_as_an_expression_simple_error.php | 7 +- ...al_as_an_expression_simple_error.php.errors.exp | 11 +- ...lval_as_an_expression_simple_error.php.sexp.exp | 134 ++++----------------- .../lval_as_an_expression_simple.php | 2 - .../lval_as_an_expression_simple.php.sexp.exp | 41 +------ 9 files changed, 32 insertions(+), 236 deletions(-) delete mode 100644 hphp/hack/test/full_fidelity/cases/concurrent/error/concurrent_reuse_lval_3.php delete mode 100644 hphp/hack/test/full_fidelity/cases/concurrent/error/concurrent_reuse_lval_3.php.errors.exp delete mode 100644 hphp/hack/test/full_fidelity/cases/concurrent/error/concurrent_reuse_lval_3.php.sexp.exp diff --git a/hphp/hack/src/parser/full_fidelity_parser_errors.ml b/hphp/hack/src/parser/full_fidelity_parser_errors.ml index 6df1e2b4dab..1023e6b06a0 100644 --- a/hphp/hack/src/parser/full_fidelity_parser_errors.ml +++ b/hphp/hack/src/parser/full_fidelity_parser_errors.ml @@ -1662,12 +1662,7 @@ let parameter_rx_errors context errors node = | FunctionCallWithTypeArgumentsExpression { function_call_with_type_arguments_argument_list = { syntax = arg_list; _ }; _ } ) as call_expression :: parents when phys_equal arg_list node -> - (match parents with - | PrefixUnaryExpression { prefix_unary_operator = op; _ } as call_expression :: parents - when token_kind op = Some TokenKind.Await -> - Some (call_expression, parents) - | _ -> - Some (call_expression, parents)) + Some (call_expression, parents) | _ -> None in let lval_ness_of_function_arg next_node next_parents = @@ -1700,10 +1695,10 @@ let parameter_rx_errors context errors node = | PrefixUnaryExpression { prefix_unary_operator = token; prefix_unary_operand = { syntax = lval; _ } - } as next_node :: next_parents + } :: _ when phys_equal lval node && Some TokenKind.Ampersand = token_kind token -> - lval_ness_of_function_arg next_node next_parents + LvalTypeNone | (PrefixUnaryExpression { prefix_unary_operator = token; diff --git a/hphp/hack/test/full_fidelity/cases/concurrent/error/concurrent_reuse_lval_3.php b/hphp/hack/test/full_fidelity/cases/concurrent/error/concurrent_reuse_lval_3.php deleted file mode 100644 index f1b020e13e4..00000000000 --- a/hphp/hack/test/full_fidelity/cases/concurrent/error/concurrent_reuse_lval_3.php +++ /dev/null @@ -1,8 +0,0 @@ -(inout $x)); $y = (my_inout2(inout $x)); $y = await (my_inout2(inout $x)); - (my_inout1(&$x)); - (my_inout1(&$x)); - ($y = my_inout2(&$x)); - ($y = my_inout2(&$x)); - $y = (my_inout2(&$x)); - $y = await (my_inout2(&$x)); (list($x1, $x2, list($x3, $x4)) = tuple(1, 2, tuple(3, 4))); + $y = await my_inout2(inout $x); } diff --git a/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/error/lval_as_an_expression_simple_error.php.errors.exp b/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/error/lval_as_an_expression_simple_error.php.errors.exp index 991245f6c67..27feed6b27f 100644 --- a/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/error/lval_as_an_expression_simple_error.php.errors.exp +++ b/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/error/lval_as_an_expression_simple_error.php.errors.exp @@ -32,12 +32,5 @@ (36,30)-(36,31) Lval can no longer be used as an expression. Pull it out into it's own statement. (37,25)-(37,26) Lval can no longer be used as an expression. Pull it out into it's own statement. (38,31)-(38,32) Lval can no longer be used as an expression. Pull it out into it's own statement. -(39,15)-(39,16) Lval can no longer be used as an expression. Pull it out into it's own statement. -(40,20)-(40,21) Lval can no longer be used as an expression. Pull it out into it's own statement. -(41,4)-(41,5) Lval can no longer be used as an expression. Pull it out into it's own statement. -(41,20)-(41,21) Lval can no longer be used as an expression. Pull it out into it's own statement. -(42,4)-(42,5) Lval can no longer be used as an expression. Pull it out into it's own statement. -(42,25)-(42,26) Lval can no longer be used as an expression. Pull it out into it's own statement. -(43,20)-(43,21) Lval can no longer be used as an expression. Pull it out into it's own statement. -(44,26)-(44,27) Lval can no longer be used as an expression. Pull it out into it's own statement. -(45,4)-(45,33) Lval can no longer be used as an expression. Pull it out into it's own statement. +(39,4)-(39,33) Lval can no longer be used as an expression. Pull it out into it's own statement. +(40,30)-(40,31) Lval can no longer be used as an expression. Pull it out into it's own statement. diff --git a/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/error/lval_as_an_expression_simple_error.php.sexp.exp b/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/error/lval_as_an_expression_simple_error.php.sexp.exp index 7d01392d17c..60d51c773c5 100644 --- a/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/error/lval_as_an_expression_simple_error.php.sexp.exp +++ b/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/error/lval_as_an_expression_simple_error.php.sexp.exp @@ -1,5 +1,5 @@ -((script 1052 - ((list 1052 +((script 930 + ((list 930 ((markup_section 4 ((missing 0 ()) (() markup 0 ()) (markup_suffix 4 ((() 1 ()))) - (() "(" 1 ()) - (list 3 - ((list_item 3 - ((prefix_unary_expression 3 - ((() & 1 ()) (variable 2 ((() variable 2 ()))))) - (missing 0 ()))))) - (() ")" 1 ()))) - (() ")" 1 ()))) - (() ";" 1 ((end_of_line 1))))) - (expression_statement 22 - ((parenthesized_expression 21 - ((((whitespace 2)) "(" 1 ()) - (binary_expression 19 - ((variable 2 ((() variable 2 ((whitespace 1))))) - (() = 1 ((whitespace 1))) - (function_call_expression 14 - ((() name 9 ()) (() "(" 1 ()) - (list 3 - ((list_item 3 - ((prefix_unary_expression 3 - ((() & 1 ()) (variable 2 ((() variable 2 ()))))) - (missing 0 ()))))) - (() ")" 1 ()))))) - (() ")" 1 ()))) - (() ";" 1 ((end_of_line 1))))) - (expression_statement 27 - ((parenthesized_expression 26 - ((((whitespace 2)) "(" 1 ()) - (binary_expression 24 - ((variable 2 ((() variable 2 ((whitespace 1))))) - (() = 1 ((whitespace 1))) - (function_call_with_type_arguments_expression 19 - ((() name 9 ()) - (type_arguments 5 - ((() < 1 ()) - (list 3 - ((list_item 3 - ((simple_type_specifier 3 ((() int 3 ()))) - (missing 0 ()))))) - (() > 1 ()))) - (() "(" 1 ()) - (list 3 - ((list_item 3 - ((prefix_unary_expression 3 - ((() & 1 ()) (variable 2 ((() variable 2 ()))))) - (missing 0 ()))))) - (() ")" 1 ()))))) - (() ")" 1 ()))) - (() ";" 1 ((end_of_line 1))))) - (expression_statement 22 - ((binary_expression 21 - ((variable 2 ((((whitespace 2)) variable 2 ((whitespace 1))))) - (() = 1 ((whitespace 1))) - (parenthesized_expression 16 - ((() "(" 1 ()) - (function_call_expression 14 - ((() name 9 ()) (() "(" 1 ()) - (list 3 - ((list_item 3 - ((prefix_unary_expression 3 - ((() & 1 ()) (variable 2 ((() variable 2 ()))))) - (missing 0 ()))))) - (() ")" 1 ()))) - (() ")" 1 ()))))) - (() ";" 1 ((end_of_line 1))))) - (expression_statement 28 - ((binary_expression 27 - ((variable 2 ((((whitespace 2)) variable 2 ((whitespace 1))))) - (() = 1 ((whitespace 1))) - (prefix_unary_expression 22 - ((() await 5 ((whitespace 1))) - (parenthesized_expression 16 - ((() "(" 1 ()) - (function_call_expression 14 - ((() name 9 ()) (() "(" 1 ()) - (list 3 - ((list_item 3 - ((prefix_unary_expression 3 - ((() & 1 ()) (variable 2 ((() variable 2 ()))))) - (missing 0 ()))))) - (() ")" 1 ()))) - (() ")" 1 ()))))))) - (() ";" 1 ((end_of_line 1))))) (expression_statement 60 ((parenthesized_expression 59 ((((whitespace 2)) "(" 1 ()) @@ -624,6 +516,22 @@ (missing 0 ()))))) (() ")" 1 ()))))) (() ")" 1 ()))) + (() ";" 1 ((end_of_line 1))))) + (expression_statement 31 + ((binary_expression 30 + ((variable 2 ((((whitespace 2)) variable 2 ((whitespace 1))))) + (() = 1 ((whitespace 1))) + (prefix_unary_expression 25 + ((() await 5 ((whitespace 1))) + (function_call_expression 19 + ((() name 9 ()) (() "(" 1 ()) + (list 8 + ((list_item 8 + ((decorated_expression 8 + ((() inout 5 ((whitespace 1))) + (variable 2 ((() variable 2 ()))))) + (missing 0 ()))))) + (() ")" 1 ()))))))) (() ";" 1 ((end_of_line 1))))))) (() } 1 ((end_of_line 1))))))) (end_of_file 0 ((() end_of_file 0 ())))))))) diff --git a/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/lval_as_an_expression_simple.php b/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/lval_as_an_expression_simple.php index fa8d38b642d..9d72e6f68e0 100644 --- a/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/lval_as_an_expression_simple.php +++ b/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/lval_as_an_expression_simple.php @@ -34,11 +34,9 @@ function foo(): void { my_inout1(inout $x); $y = my_inout2(inout $x); $y = my_inout2(inout $x); - $y = await my_inout2(inout $x); my_inout1(&$x); my_inout1(&$x); $y = my_inout2(&$x); $y = my_inout2(&$x); - $y = await my_inout2(&$x); list($x1, $x2, list($x3, $x4)) = tuple(1, 2, tuple(3, 4)); } diff --git a/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/lval_as_an_expression_simple.php.sexp.exp b/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/lval_as_an_expression_simple.php.sexp.exp index 4b59ffb45f1..513348f092e 100644 --- a/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/lval_as_an_expression_simple.php.sexp.exp +++ b/hphp/hack/test/full_fidelity/cases/lval_as_an_expression/lval_as_an_expression_simple.php.sexp.exp @@ -1,5 +1,5 @@ -((script 915 - ((list 915 +((script 852 + ((list 852 ((markup_section 4 ((missing 0 ()) (() markup 0 ()) (markup_suffix 4 ((()