From d2533d7bccaabc2c44a74926c277b4650ace24ab Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 11 Dec 2017 09:48:40 -0800 Subject: [PATCH] Allow to interleave visibility and function modifiers Summary: HHVM allows to put visibility and function modifiers like `async` in any order - this diff enables similar capabilities for FFP This diff includes lots of changes in FFP baselines but all of them are related to the fact that - instead of two fields `async` and `coroutine` function declaration header now has only one `modifiers` - modifiers are removed from methodish declarations - error ranges over function declaration header for methods now include modifiers Differential Revision: D6523113 fbshipit-source-id: 7c97c3ebce14c2facb69b8f7a74e9fd42c5eca22 --- hphp/hack/src/generate_full_fidelity.ml | 4 + hphp/hack/src/hackfmt/hack_format.ml | 26 ++--- .../coroutine/coroutine_closure_generator.ml | 18 ++-- .../hack/src/parser/coroutine/coroutine_lowerer.ml | 11 +- .../parser/coroutine/coroutine_method_lowerer.ml | 9 +- hphp/hack/src/parser/coroutine/coroutine_syntax.ml | 73 ++++++++----- hphp/hack/src/parser/full_fidelity_ast.ml | 69 +++++++----- .../src/parser/full_fidelity_declaration_parser.ml | 20 ++-- .../hack/src/parser/full_fidelity_parser_errors.ml | 76 +++++++------- .../src/parser/full_fidelity_positioned_syntax.ml | 16 +-- .../src/parser/full_fidelity_pretty_printer.ml | 16 +-- hphp/hack/src/parser/full_fidelity_syntax.ml | 50 +++------ hphp/hack/src/parser/full_fidelity_syntax_type.ml | 8 +- .../src/parser/full_fidelity_validated_syntax.ml | 8 +- hphp/hack/src/parser/js/full_fidelity_editable.js | 106 ++++--------------- hphp/hack/src/parser/js/full_fidelity_schema.json | 6 +- .../hack/src/parser/php/full_fidelity_editable.php | 116 +++++---------------- .../hack/src/parser/schema/full_fidelity_schema.ml | 2 +- hphp/hack/src/parser/schema/schema_definition.ml | 4 +- hphp/hack/src/parser/syntax_sig.ml | 10 +- .../src/server/ffpAutocompleteContextParser.ml | 15 ++- .../cases/context/test_extra_error_trivia.exp | 2 +- .../cases/context/test_method_decl_extra_token.exp | 4 +- .../cases/test_abstract_final_errors.exp | 2 +- .../full_fidelity/cases/test_array_expression.exp | 2 +- .../cases/test_array_key_value_precedence.exp | 2 +- .../full_fidelity/cases/test_attribute_spec.exp | 2 +- .../cases/test_awaitable_creation.exp | 2 +- .../cases/test_class_method_declaration.exp | 2 +- .../test/full_fidelity/cases/test_closure_type.exp | 2 +- .../cases/test_constructor_destructor.exp | 2 +- .../full_fidelity/cases/test_errors_method.exp | 36 +++---- .../full_fidelity/cases/test_for_statements.exp | 2 +- .../cases/test_foreach_statements.exp | 2 +- .../full_fidelity/cases/test_function_call.exp | 2 +- .../test/full_fidelity/cases/test_inout_params.exp | 2 +- .../full_fidelity/cases/test_list_expression.exp | 2 +- .../full_fidelity/cases/test_list_precedence.exp | 2 +- .../test/full_fidelity/cases/test_literals.exp | 2 +- .../test/full_fidelity/cases/test_namespace.exp | 2 +- hphp/hack/test/full_fidelity/cases/test_simple.exp | 2 +- ...s_preserved_in_string_containing_expression.exp | 2 +- .../test/full_fidelity/cases/test_statements.exp | 2 +- .../full_fidelity/cases/test_trailing_commas.exp | 2 +- .../full_fidelity/cases/test_try_statement.exp | 2 +- .../cases/test_tuple_type_keyword.exp | 19 +--- .../full_fidelity/cases/test_types_type_const.exp | 2 +- .../cases/test_variadic_type_hint.exp | 19 +--- .../cases/test_varray_darray_expressions.exp | 2 +- .../cases/test_visibility_modifier_errors.exp | 8 +- hphp/test/hhcodegen_failing_tests_slow | 3 +- 51 files changed, 316 insertions(+), 484 deletions(-) rewrite hphp/hack/test/full_fidelity/cases/context/test_extra_error_trivia.exp (88%) rewrite hphp/hack/test/full_fidelity/cases/test_array_expression.exp (91%) rewrite hphp/hack/test/full_fidelity/cases/test_array_key_value_precedence.exp (91%) rewrite hphp/hack/test/full_fidelity/cases/test_awaitable_creation.exp (97%) rewrite hphp/hack/test/full_fidelity/cases/test_class_method_declaration.exp (89%) rewrite hphp/hack/test/full_fidelity/cases/test_closure_type.exp (96%) rewrite hphp/hack/test/full_fidelity/cases/test_constructor_destructor.exp (92%) rewrite hphp/hack/test/full_fidelity/cases/test_for_statements.exp (93%) rewrite hphp/hack/test/full_fidelity/cases/test_foreach_statements.exp (87%) rewrite hphp/hack/test/full_fidelity/cases/test_function_call.exp (92%) rewrite hphp/hack/test/full_fidelity/cases/test_inout_params.exp (97%) rewrite hphp/hack/test/full_fidelity/cases/test_list_expression.exp (90%) rewrite hphp/hack/test/full_fidelity/cases/test_list_precedence.exp (94%) rewrite hphp/hack/test/full_fidelity/cases/test_literals.exp (90%) rewrite hphp/hack/test/full_fidelity/cases/test_namespace.exp (66%) rewrite hphp/hack/test/full_fidelity/cases/test_simple.exp (91%) rewrite hphp/hack/test/full_fidelity/cases/test_spaces_preserved_in_string_containing_expression.exp (92%) rewrite hphp/hack/test/full_fidelity/cases/test_statements.exp (96%) rewrite hphp/hack/test/full_fidelity/cases/test_trailing_commas.exp (84%) rewrite hphp/hack/test/full_fidelity/cases/test_try_statement.exp (93%) rewrite hphp/hack/test/full_fidelity/cases/test_tuple_type_keyword.exp (94%) rewrite hphp/hack/test/full_fidelity/cases/test_types_type_const.exp (85%) rewrite hphp/hack/test/full_fidelity/cases/test_variadic_type_hint.exp (100%) rewrite hphp/hack/test/full_fidelity/cases/test_varray_darray_expressions.exp (77%) diff --git a/hphp/hack/src/generate_full_fidelity.ml b/hphp/hack/src/generate_full_fidelity.ml index f9d88c099d2..2ec45d09713 100644 --- a/hphp/hack/src/generate_full_fidelity.ml +++ b/hphp/hack/src/generate_full_fidelity.ml @@ -515,6 +515,8 @@ TYPE_TESTS val is_protected : t -> bool val is_abstract : t -> bool val is_final : t -> bool + val is_async : t -> bool + val is_coroutine : t -> bool val is_void : t -> bool val is_left_brace : t -> bool val is_ellipsis : t -> bool @@ -708,6 +710,8 @@ TYPE_TESTS let is_protected = is_specific_token Full_fidelity_token_kind.Protected let is_abstract = is_specific_token Full_fidelity_token_kind.Abstract let is_final = is_specific_token Full_fidelity_token_kind.Final + let is_async = is_specific_token Full_fidelity_token_kind.Async + let is_coroutine = is_specific_token Full_fidelity_token_kind.Coroutine let is_void = is_specific_token Full_fidelity_token_kind.Void let is_left_brace = is_specific_token Full_fidelity_token_kind.LeftBrace let is_ellipsis = is_specific_token Full_fidelity_token_kind.DotDotDot diff --git a/hphp/hack/src/hackfmt/hack_format.ml b/hphp/hack/src/hackfmt/hack_format.ml index 957322f8861..d38de2fd580 100644 --- a/hphp/hack/src/hackfmt/hack_format.ml +++ b/hphp/hack/src/hackfmt/hack_format.ml @@ -290,8 +290,7 @@ let transform (env: Env.t) (node: Syntax.t) : Doc.t = ] | FunctionDeclarationHeader x -> let ( - async, - coroutine, + modifiers, kw, amp, name, @@ -306,7 +305,7 @@ let transform (env: Env.t) (node: Syntax.t) : Doc.t = in Concat [ Span ( - transform_fn_decl_name async coroutine kw amp name type_params leftp); + transform_fn_decl_name modifiers kw amp name type_params leftp); transform_fn_decl_args params rightp colon ret_type where; ] | WhereClause x -> @@ -326,21 +325,17 @@ let transform (env: Env.t) (node: Syntax.t) : Doc.t = t right; ] | MethodishDeclaration x -> - let (attr, modifiers, func_decl, body, semi) = + let (attr, func_decl, body, semi) = get_methodish_declaration_children x in Concat [ t attr; when_present attr newline; ( - let mods = - handle_possible_list ~after_each:(fun _ -> Space) modifiers - in let fn_name, args_and_where = match syntax func_decl with | FunctionDeclarationHeader x -> let ( - async, - coroutine, + modifiers, kw, amp, name, @@ -355,8 +350,7 @@ let transform (env: Env.t) (node: Syntax.t) : Doc.t = in Concat ( transform_fn_decl_name - async - coroutine + modifiers kw amp name @@ -367,7 +361,7 @@ let transform (env: Env.t) (node: Syntax.t) : Doc.t = | _ -> failwith "Expected FunctionDeclarationHeader" in Concat [ - Span [mods; fn_name]; + Span [fn_name]; args_and_where; ] ); @@ -2030,12 +2024,10 @@ let transform (env: Env.t) (node: Syntax.t) : Doc.t = ] | _ -> failwith "Expected a chain of at least length 1" - and transform_fn_decl_name async coroutine kw amp name type_params leftp = + and transform_fn_decl_name modifiers kw amp name type_params leftp = + let mods = handle_possible_list ~after_each:(fun _ -> Space) modifiers in [ - t async; - when_present async space; - t coroutine; - when_present coroutine space; + mods; t kw; Space; t amp; diff --git a/hphp/hack/src/parser/coroutine/coroutine_closure_generator.ml b/hphp/hack/src/parser/coroutine/coroutine_closure_generator.ml index 1154d2809bd..05406c88075 100644 --- a/hphp/hack/src/parser/coroutine/coroutine_closure_generator.ml +++ b/hphp/hack/src/parser/coroutine/coroutine_closure_generator.ml @@ -43,14 +43,9 @@ let generate_constructor_method let sm_param = make_state_machine_parameter_syntax context function_type in let function_parameter_list = cont_param :: sm_param :: function_parameter_list in - let ctor = make_constructor_decl_header_syntax - constructor_member_name function_parameter_list in let call_parent_syntax = make_construct_parent_syntax [ continuation_variable_syntax ] in - make_methodish_declaration_syntax - ~modifiers:[ public_syntax; final_syntax; ] - ctor - [ call_parent_syntax; ] + make_constructor_syntax function_parameter_list call_parent_syntax let select_state_machine_syntax = make_member_selection_expression_syntax @@ -77,10 +72,9 @@ let do_resume_body = let generate_do_resume_method function_type = make_methodish_declaration_syntax - (make_function_decl_header_syntax - do_resume_member_name - [ coroutine_data_parameter_syntax; nullable_exception_parameter_syntax; ] - (make_coroutine_result_type_syntax function_type)) + do_resume_member_name + [ coroutine_data_parameter_syntax; nullable_exception_parameter_syntax; ] + (make_coroutine_result_type_syntax function_type) do_resume_body let generate_clone_body { CoroutineStateMachineData.parameters; properties; } = @@ -151,7 +145,9 @@ let generate_clone_body { CoroutineStateMachineData.parameters; properties; } = let generate_clone_method state_machine_data = make_methodish_declaration_syntax - (make_function_decl_header_syntax clone_member_name [] this_type_syntax) + clone_member_name + [] + this_type_syntax (generate_clone_body state_machine_data) let generate_closure_body diff --git a/hphp/hack/src/parser/coroutine/coroutine_lowerer.ml b/hphp/hack/src/parser/coroutine/coroutine_lowerer.ml index 77e60473cfe..21f2645efec 100644 --- a/hphp/hack/src/parser/coroutine/coroutine_lowerer.ml +++ b/hphp/hack/src/parser/coroutine/coroutine_lowerer.ml @@ -137,6 +137,9 @@ let lower_coroutine_function new_body in (closure_syntax, new_function_syntax) +let has_coroutine_modifier n = + Core_list.exists (syntax_node_to_list n) ~f:is_coroutine + let lower_coroutine_functions_and_types parents current_node @@ -145,11 +148,11 @@ let lower_coroutine_functions_and_types | FunctionDeclaration { function_declaration_header = { syntax = FunctionDeclarationHeader ({ - function_coroutine; _; + function_modifiers = m; _; } as header_node); _; }; function_body; _; - } when not @@ is_missing function_coroutine -> + } when has_coroutine_modifier m -> let context = Coroutine_context.make_from_context current_node parents None in let (closure_syntax, new_function_syntax) = lower_coroutine_function @@ -185,11 +188,11 @@ let lower_coroutine_functions_and_types | MethodishDeclaration { methodish_function_decl_header = { syntax = FunctionDeclarationHeader ({ - function_coroutine; _; + function_modifiers = m; _; } as header_node); _; }; methodish_function_body; _; - } when not @@ is_missing function_coroutine -> + } when has_coroutine_modifier m -> let context = Coroutine_context.make_from_context current_node parents None in let (new_header_node, new_body, closure_syntax) = diff --git a/hphp/hack/src/parser/coroutine/coroutine_method_lowerer.ml b/hphp/hack/src/parser/coroutine/coroutine_method_lowerer.ml index d274e26d6b7..9274a33dcc0 100644 --- a/hphp/hack/src/parser/coroutine/coroutine_method_lowerer.ml +++ b/hphp/hack/src/parser/coroutine/coroutine_method_lowerer.ml @@ -31,6 +31,11 @@ let compute_parameter_list function_parameter_list function_type = coroutine_parameter_syntax function_parameter_list +let remove_coroutine_modifier_from_modifiers_list modifiers = + syntax_node_to_list modifiers + |> Core_list.filter ~f:(fun c -> not (is_coroutine c)) + |> make_list + (** * If the provided function declaration header is for a coroutine, rewrites the * parameter list and return type as necessary to implement the coroutine. @@ -41,9 +46,11 @@ let rewrite_function_decl_header header_node = make_coroutine_result_type_syntax header_node.function_type in let function_parameter_list = compute_parameter_list header_node.function_parameter_list header_node.function_type in + let function_modifiers = remove_coroutine_modifier_from_modifiers_list + header_node.function_modifiers in make_syntax { header_node with - function_coroutine = make_missing (); + function_modifiers; function_type; function_parameter_list; } diff --git a/hphp/hack/src/parser/coroutine/coroutine_syntax.ml b/hphp/hack/src/parser/coroutine/coroutine_syntax.ml index 5fc9aa54283..f4235639abf 100644 --- a/hphp/hack/src/parser/coroutine/coroutine_syntax.ml +++ b/hphp/hack/src/parser/coroutine/coroutine_syntax.ml @@ -281,10 +281,13 @@ let get_type_arguments node = |> Core_list.map ~f:(fun { type_name; _; } -> make_simple_type_specifier type_name) -let is_static_method { methodish_modifiers; _; } = - methodish_modifiers - |> syntax_node_to_list - |> Core_list.exists ~f:is_static +let is_static_method { methodish_function_decl_header = header; _; } = + match syntax header with + | FunctionDeclarationHeader { function_modifiers; _ } -> + function_modifiers + |> syntax_node_to_list + |> Core_list.exists ~f:is_static + | _ -> false let string_of_name_token node = match syntax node with @@ -539,17 +542,6 @@ let make_classish_declaration_syntax (* classish_implements_list *) (make_missing ()) classish_body -let make_methodish_declaration_with_body_syntax - ?(modifiers = [ public_syntax; ]) - function_decl_header_syntax - function_body = - make_methodish_declaration - (* methodish_attribute *) (make_missing ()) - (make_list modifiers) - function_decl_header_syntax - function_body - (* methodish_semicolon *) (make_missing ()) - let make_lambda_signature_from_method_syntax existing_node lambda_parameters @@ -576,24 +568,16 @@ let make_lambda_from_method_syntax existing_node lambda_signature lambda_body = lambda_body = lambda_body; }) -let make_methodish_declaration_syntax - ?modifiers - function_decl_header_syntax - function_body = - make_methodish_declaration_with_body_syntax - ?modifiers - function_decl_header_syntax - (make_compound_statement_syntax function_body) - let make_function_decl_header_syntax + ~modifiers name parameter_list return_type_syntax = + let modifiers_syntax = make_list modifiers in let name_syntax = make_name_syntax name in let parameter_list_syntax = make_comma_list parameter_list in make_function_declaration_header - (* function_async *) (make_missing ()) - (* function_coroutine *) (make_missing ()) + modifiers_syntax function_keyword_syntax (* function_ampersand *) (make_missing ()) name_syntax @@ -605,8 +589,41 @@ let make_function_decl_header_syntax return_type_syntax (* function_where_clause *) (make_missing ()) -let make_constructor_decl_header_syntax name parameter_list = - make_function_decl_header_syntax name parameter_list (make_missing ()) +let make_methodish_declaration_with_body_syntax + ?(modifiers = [ public_syntax; ]) + name + parameter_list + return_type_syntax + function_body = + let function_decl_header_syntax = + make_function_decl_header_syntax + modifiers name parameter_list return_type_syntax in + make_methodish_declaration + (* methodish_attribute *) (make_missing ()) + function_decl_header_syntax + function_body + (* methodish_semicolon *) (make_missing ()) + +let make_methodish_declaration_syntax + ?modifiers + name + parameter_list + return_type_syntax + function_body = + make_methodish_declaration_with_body_syntax + ?modifiers + name + parameter_list + return_type_syntax + (make_compound_statement_syntax function_body) + +let make_constructor_syntax parameter_list call_parent_syntax = + make_methodish_declaration_syntax + ~modifiers:[ public_syntax; final_syntax; ] + constructor_member_name + parameter_list + (make_missing ()) + [ call_parent_syntax; ] let make_property_declaration_syntax type_syntax declaration_syntax = make_property_declaration diff --git a/hphp/hack/src/parser/full_fidelity_ast.ml b/hphp/hack/src/parser/full_fidelity_ast.ml index 9e86e60faee..ca0db7e7d4d 100644 --- a/hphp/hack/src/parser/full_fidelity_ast.ml +++ b/hphp/hack/src/parser/full_fidelity_ast.ml @@ -182,8 +182,6 @@ let make_compound_statement nl = let missing = make_syntax Missing - - let token_kind : node -> TK.t option = function | { syntax = Token t; _ } -> Some (Token.kind t) | _ -> None @@ -256,17 +254,30 @@ let pNullFlavor : og_null_flavor parser = fun node env -> | Some TK.MinusGreaterThan -> OG_nullthrows | _ -> missing_syntax "null flavor" node env -let pKinds : kind list parser = couldMap ~f:(fun node env -> - match token_kind node with - | Some TK.Final -> Final - | Some TK.Static -> Static - | Some TK.Abstract -> Abstract - | Some TK.Private -> Private - | Some TK.Public -> Public - | Some TK.Protected -> Protected - | Some TK.Var -> Public - | _ -> missing_syntax "kind" node env - ) +type modifiers = { + has_async: bool; + has_coroutine: bool; + kinds: kind list +} + +let pModifiers node env = + let f (has_async, has_coroutine, kinds) node = + match token_kind node with + | Some TK.Final -> has_async, has_coroutine, (Final :: kinds) + | Some TK.Static -> has_async, has_coroutine, (Static :: kinds) + | Some TK.Abstract -> has_async, has_coroutine, (Abstract :: kinds) + | Some TK.Private -> has_async, has_coroutine, (Private :: kinds) + | Some TK.Public -> has_async, has_coroutine, (Public :: kinds) + | Some TK.Protected -> has_async, has_coroutine, (Protected :: kinds) + | Some TK.Var -> has_async, has_coroutine, (Public :: kinds) + | Some TK.Async -> true, has_coroutine, kinds + | Some TK.Coroutine -> has_async, true, kinds + | _ -> missing_syntax "kind" node env in + let (has_async, has_coroutine, kinds) = + Core_list.fold_left ~init:(false, false, []) ~f (as_list node) in + { has_async; has_coroutine; kinds = List.rev kinds } + +let pKinds node env = (pModifiers node env).kinds let pParamKind : param_kind parser = fun node env -> match token_kind node with @@ -399,12 +410,17 @@ type suspension_kind = | SKAsync | SKCoroutine -let mk_suspension_kind async_node coroutine_node = - match is_missing async_node, is_missing coroutine_node with - | true, true -> SKSync - | false, true -> SKAsync - | true, false -> SKCoroutine - | false, false -> raise (Failure "Couroutine functions may not be async") +let mk_suspension_kind_ has_async has_coroutine = + match has_async, has_coroutine with + | false, false -> SKSync + | true, false -> SKAsync + | false, true-> SKCoroutine + | true, true -> raise (Failure "Couroutine functions may not be async") + +let mk_suspension_kind is_async is_coroutine = + mk_suspension_kind_ + (not (is_missing is_async)) + (not (is_missing is_coroutine)) let mk_fun_kind suspension_kind yield = match suspension_kind, yield with @@ -1684,18 +1700,18 @@ and pTParaml : tparam list parser = fun node env -> and pFunHdr : fun_hdr parser = fun node env -> match syntax node with | FunctionDeclarationHeader - { function_async - ; function_coroutine + { function_modifiers ; function_ampersand ; function_name ; function_type_parameter_list ; function_parameter_list ; function_type ; _ } -> + let modifiers = pModifiers function_modifiers env in let fh_parameters = couldMap ~f:pFunParam function_parameter_list env in let fh_return_type = mpOptional pHint function_type env in let fh_suspension_kind = - mk_suspension_kind function_async function_coroutine in + mk_suspension_kind_ modifiers.has_async modifiers.has_coroutine in let fh_name = pos_name function_name env in let fh_type_parameters = pTParaml function_type_parameter_list env in let fh_param_modifiers = @@ -1840,8 +1856,9 @@ and pClassElt : class_elt list parser = fun node env -> ] | MethodishDeclaration { methodish_attribute - ; methodish_modifiers - ; methodish_function_decl_header + ; methodish_function_decl_header = { + syntax = FunctionDeclarationHeader h; _ + } as header ; methodish_function_body ; _ } -> let classvar_init : fun_param -> stmt * class_elt = fun param -> @@ -1874,7 +1891,7 @@ and pClassElt : class_elt list parser = fun node env -> } ) in - let hdr = pFunHdr methodish_function_decl_header env in + let hdr = pFunHdr header env in let member_init, member_def = List.unzip @@ List.filter_map hdr.fh_parameters ~f:(fun p -> @@ -1894,7 +1911,7 @@ and pClassElt : class_elt list parser = fun node env -> *) if env.quick_mode then [Noop] else body in - let kind = pKinds methodish_modifiers env in + let kind = pKinds h.function_modifiers env in member_def @ [Method { m_kind = kind ; m_tparams = hdr.fh_type_parameters diff --git a/hphp/hack/src/parser/full_fidelity_declaration_parser.ml b/hphp/hack/src/parser/full_fidelity_declaration_parser.ml index 37761d57e01..ab83b38be1b 100644 --- a/hphp/hack/src/parser/full_fidelity_declaration_parser.ml +++ b/hphp/hack/src/parser/full_fidelity_declaration_parser.ml @@ -1427,8 +1427,9 @@ module WithExpressionAndStatementAndTypeParser parse_function_declaration parser (make_missing parser) and parse_function_declaration parser attribute_specification = + let (parser, modifiers) = parse_modifiers parser in let (parser, header) = - parse_function_declaration_header parser ~is_methodish:false in + parse_function_declaration_header parser ~is_methodish:false modifiers in let (parser, body) = parse_compound_statement parser in let syntax = make_function_declaration attribute_specification header body in @@ -1496,7 +1497,7 @@ module WithExpressionAndStatementAndTypeParser else parse_where_clause parser - and parse_function_declaration_header parser ~is_methodish = + and parse_function_declaration_header parser modifiers ~is_methodish = (* SPEC function-definition-header: attribute-specification-opt async-opt coroutine-opt function name / @@ -1509,8 +1510,6 @@ module WithExpressionAndStatementAndTypeParser at parse time but rather by a later pass. *) (* In non-strict mode we allow an & to appear before the name. In strict mode this produces an error during post-parsing. *) - let (parser, async_token) = optional_token parser Async in - let (parser, coroutine_token) = optional_token parser Coroutine in let (parser, function_token) = require_function parser in let (parser, ampersand_token) = optional_token parser Ampersand in let (parser, label) = @@ -1524,8 +1523,7 @@ module WithExpressionAndStatementAndTypeParser let (parser, where_clause) = parse_where_clause_opt parser in let syntax = make_function_declaration_header - async_token - coroutine_token + modifiers function_token ampersand_token label @@ -1595,20 +1593,20 @@ module WithExpressionAndStatementAndTypeParser and parse_methodish parser attribute_spec modifiers = let (parser, header) = - parse_function_declaration_header parser ~is_methodish:true in + parse_function_declaration_header parser modifiers ~is_methodish:true in let (parser1, token) = next_token parser in match Token.kind token with | LeftBrace -> let (parser, body) = parse_compound_statement parser in let syntax = make_methodish_declaration - attribute_spec modifiers header body (make_missing parser)in + attribute_spec header body (make_missing parser)in (parser, syntax) | Semicolon -> let semicolon = make_token token in let syntax = make_methodish_declaration - attribute_spec modifiers header (make_missing parser) + attribute_spec header (make_missing parser) semicolon in (parser1, syntax) | _ -> @@ -1617,7 +1615,7 @@ module WithExpressionAndStatementAndTypeParser TODO: Is this the right error recovery? *) let error = make_error (make_token token) in let syntax = make_methodish_declaration - attribute_spec modifiers header error (make_missing parser) in + attribute_spec header error (make_missing parser) in let parser = with_error parser1 SyntaxError.error1041 in (parser, syntax) @@ -1629,6 +1627,8 @@ module WithExpressionAndStatementAndTypeParser | Public | Protected | Private + | Async + | Coroutine | Final -> (parser1, Some (make_token token)) | _ -> (parser, None) diff --git a/hphp/hack/src/parser/full_fidelity_parser_errors.ml b/hphp/hack/src/parser/full_fidelity_parser_errors.ml index 3a4622b13c8..2f05eaf044a 100644 --- a/hphp/hack/src/parser/full_fidelity_parser_errors.ml +++ b/hphp/hack/src/parser/full_fidelity_parser_errors.ml @@ -321,21 +321,26 @@ let rec containing_classish_kind parents = | _ -> containing_classish_kind t end +let modifiers_of_function_decl_header_exn node = + match syntax node with + | FunctionDeclarationHeader { function_modifiers = m; _ } -> m + | _ -> failwith "expected to get FunctionDeclarationHeader" + +let get_modifiers_of_methodish_declaration node = + match syntax node with + | MethodishDeclaration { methodish_function_decl_header = header; _ } -> + Some (modifiers_of_function_decl_header_exn header) + | _ -> None + (* tests whether the methodish contains a modifier that satisfies [p] *) let methodish_modifier_contains_helper p node = - match syntax node with - | MethodishDeclaration syntax -> - let node = syntax.methodish_modifiers in - list_contains_predicate p node - | _ -> false + get_modifiers_of_methodish_declaration node + |> Option.exists ~f:(list_contains_predicate p) (* tests whether the methodish contains > 1 modifier that satisfies [p] *) let methodish_modifier_multiple_helper p node = - match syntax node with - | MethodishDeclaration syntax -> - let node = syntax.methodish_modifiers in - list_contains_multiple_predicate p node - | _ -> false + get_modifiers_of_methodish_declaration node + |> Option.value_map ~default:false ~f:(list_contains_multiple_predicate p) (* test the methodish node contains the Final keyword *) let methodish_contains_final node = @@ -409,9 +414,9 @@ let class_destructor_has_non_visibility_modifier hhvm_compat_mode node parents = (is_destruct label) && (matches_first (methodish_contains_non_visibility hhvm_compat_mode) parents) -let async_magic_method { function_async; function_name; _} parents = +let async_magic_method { function_modifiers; function_name; _} parents = SSet.mem (String.lowercase_ascii @@ text function_name) SN.Members.as_set && - not @@ is_missing function_async + list_contains_predicate is_async function_modifiers (* check that a constructor or a destructor is type annotated *) let class_constructor_destructor_has_non_void_type hhvm_compat_node node parents = @@ -433,11 +438,8 @@ let class_constructor_destructor_has_non_void_type hhvm_compat_node node parents let methodish_duplicate_modifier hhvm_compat_mode node = if hhvm_compat_mode then false else - match syntax node with - | MethodishDeclaration syntax -> - let modifiers = syntax.methodish_modifiers in - list_contains_duplicate modifiers - | _ -> false + get_modifiers_of_methodish_declaration node + |> Option.value_map ~default:false ~f:list_contains_duplicate (* whether a methodish decl has body *) let methodish_has_body node = @@ -721,12 +723,15 @@ let first_parent_class_name parents = (* Given a classish_ or methodish_ declaration node, returns the modifier node from its list of modifiers, or None if there isn't one. *) let extract_keyword modifier declaration_node = + let aux modifiers_list = + Hh_core.List.find ~f:modifier (syntax_to_list_no_separators modifiers_list) + in + match syntax declaration_node with - | ClassishDeclaration { classish_modifiers = modifiers_list ; _ } - | MethodishDeclaration { methodish_modifiers = modifiers_list ; _ } -> - Hh_core.List.find ~f:modifier - (syntax_to_list_no_separators modifiers_list) - | _ -> None + | ClassishDeclaration { classish_modifiers = modifiers_list ; _ } -> + aux modifiers_list + | _ -> + Option.bind (get_modifiers_of_methodish_declaration declaration_node) aux (* Wrapper function that uses above extract_keyword function to test if node contains is_abstract keyword *) @@ -777,16 +782,9 @@ let is_generalized_abstract_method md_node parents = * None if something other than a methodish_declaration node was provided as * input. *) let extract_async_node md_node = - match syntax md_node with - | MethodishDeclaration { methodish_function_decl_header; _ } -> begin - match syntax methodish_function_decl_header with - | FunctionDeclarationHeader { function_async ; _ } -> Some function_async - | _ -> - failwith("Encountered an improperly defined methodish_function_decl_" ^ - "header: expected it to match FunctionDeclarationHeader with field " ^ - "function_async.") - end - | _ -> None (* Only method declarations have async nodes *) + get_modifiers_of_methodish_declaration md_node + |> Option.value_map ~default:[] ~f:syntax_to_list_no_separators + |> Hh_core.List.find ~f:is_async let first_parent_function_declaration parents = Hh_core.List.find_map parents ~f:begin fun node -> @@ -836,7 +834,9 @@ let has_inout_params parents = let is_inside_async_method parents = match first_parent_function_declaration parents with - | Some { function_async; _ } -> not @@ is_missing function_async + | Some { function_modifiers = m; _ } -> + syntax_to_list_no_separators m + |> Hh_core.List.exists ~f:is_async | None -> false let make_name_already_used_error node name short_name original_location @@ -880,15 +880,15 @@ let extract_callconv_node node = (* Tests if visibility modifiers of the node are allowed on * methods inside an interface. *) let has_valid_interface_visibility node = - match syntax node with - | MethodishDeclaration { methodish_modifiers; _ } -> + (* If not a methodish declaration, is vacuously valid *) + get_modifiers_of_methodish_declaration node + |> Option.value_map ~default:true ~f:(fun methodish_modifiers -> let visibility_kind = extract_visibility_node methodish_modifiers in let is_valid_methodish_visibility kind = (is_token_kind kind TokenKind.Public) in (* Defaulting to 'true' allows omitting visibility in method_declarations *) Option.value_map visibility_kind - ~f:is_valid_methodish_visibility ~default:true - | _ -> true (* If not a methodish declaration, is vacuously valid *) + ~f:is_valid_methodish_visibility ~default:true) (* Tests if a given node is a method definition (inside an interface) with * either private or protected visibility. *) @@ -1033,7 +1033,7 @@ let methodish_errors node parents is_hack hhvm_compat_mode errors = errors | MethodishDeclaration md -> let header_node = md.methodish_function_decl_header in - let modifiers = md.methodish_modifiers in + let modifiers = modifiers_of_function_decl_header_exn header_node in let errors = produce_error_for_header errors (class_constructor_has_static hhvm_compat_mode) header_node diff --git a/hphp/hack/src/parser/full_fidelity_positioned_syntax.ml b/hphp/hack/src/parser/full_fidelity_positioned_syntax.ml index 39a0ec1e927..b9abe4dbb1b 100644 --- a/hphp/hack/src/parser/full_fidelity_positioned_syntax.ml +++ b/hphp/hack/src/parser/full_fidelity_positioned_syntax.ml @@ -537,13 +537,11 @@ module FromMinimal = struct :: function_name :: function_ampersand :: function_keyword - :: function_coroutine - :: function_async + :: function_modifiers :: results ) -> FunctionDeclarationHeader - { function_async - ; function_coroutine + { function_modifiers ; function_keyword ; function_ampersand ; function_name @@ -579,13 +577,11 @@ module FromMinimal = struct , ( methodish_semicolon :: methodish_function_body :: methodish_function_decl_header - :: methodish_modifiers :: methodish_attribute :: results ) -> MethodishDeclaration { methodish_attribute - ; methodish_modifiers ; methodish_function_decl_header ; methodish_function_body ; methodish_semicolon @@ -2612,8 +2608,7 @@ module FromMinimal = struct let todo = Convert (function_declaration_header, todo) in convert offset todo results function_attribute_spec | { M.syntax = M.FunctionDeclarationHeader - { M.function_async - ; M.function_coroutine + { M.function_modifiers ; M.function_keyword ; M.function_ampersand ; M.function_name @@ -2637,8 +2632,7 @@ module FromMinimal = struct let todo = Convert (function_name, todo) in let todo = Convert (function_ampersand, todo) in let todo = Convert (function_keyword, todo) in - let todo = Convert (function_coroutine, todo) in - convert offset todo results function_async + convert offset todo results function_modifiers | { M.syntax = M.WhereClause { M.where_clause_keyword ; M.where_clause_constraints @@ -2659,7 +2653,6 @@ module FromMinimal = struct convert offset todo results where_constraint_left_type | { M.syntax = M.MethodishDeclaration { M.methodish_attribute - ; M.methodish_modifiers ; M.methodish_function_decl_header ; M.methodish_function_body ; M.methodish_semicolon @@ -2669,7 +2662,6 @@ module FromMinimal = struct let todo = Convert (methodish_semicolon, todo) in let todo = Convert (methodish_function_body, todo) in let todo = Convert (methodish_function_decl_header, todo) in - let todo = Convert (methodish_modifiers, todo) in convert offset todo results methodish_attribute | { M.syntax = M.ClassishDeclaration { M.classish_attribute diff --git a/hphp/hack/src/parser/full_fidelity_pretty_printer.ml b/hphp/hack/src/parser/full_fidelity_pretty_printer.ml index 42c6b06f56b..417086ae2f5 100644 --- a/hphp/hack/src/parser/full_fidelity_pretty_printer.ml +++ b/hphp/hack/src/parser/full_fidelity_pretty_printer.ml @@ -509,8 +509,7 @@ let rec get_doc node = let after_attr = handle_compound_inline_brace header body missing in group_doc (attr ^| after_attr) | FunctionDeclarationHeader - { function_async; - function_coroutine; + { function_modifiers; function_keyword; function_ampersand; function_name; @@ -522,11 +521,8 @@ let rec get_doc node = function_type; function_where_clause } -> - let preface = group_doc ( - get_doc function_async - ^| get_doc function_coroutine - ^| get_doc function_keyword - ) in + let preface = + group_doc (get_doc function_modifiers ^| get_doc function_keyword) in let name_and_generics = let type_params = get_doc function_type_parameter_list in let ampersand = get_doc function_ampersand in @@ -560,16 +556,14 @@ let rec get_doc node = let r = get_doc where_constraint_right_type in l ^| o ^| r | MethodishDeclaration - { methodish_attribute; methodish_modifiers; methodish_function_decl_header; + { methodish_attribute; methodish_function_decl_header; methodish_function_body; methodish_semicolon } -> let methodish_attr = get_doc methodish_attribute in - let methodish_modifiers = get_doc methodish_modifiers in let function_header = get_doc methodish_function_decl_header in let body_node = methodish_function_body in let semicolon = get_doc methodish_semicolon in - let before_body = group_doc (methodish_modifiers ^| function_header) in let after_attr = - handle_compound_inline_brace before_body body_node missing in + handle_compound_inline_brace function_header body_node missing in let after_attr = after_attr ^^^ semicolon in group_doc (methodish_attr ^| after_attr) | DecoratedExpression x -> diff --git a/hphp/hack/src/parser/full_fidelity_syntax.ml b/hphp/hack/src/parser/full_fidelity_syntax.ml index 46283d169a3..1ce3d1f22c3 100644 --- a/hphp/hack/src/parser/full_fidelity_syntax.ml +++ b/hphp/hack/src/parser/full_fidelity_syntax.ml @@ -427,6 +427,8 @@ module WithToken(Token: TokenType) = struct let is_protected = is_specific_token Full_fidelity_token_kind.Protected let is_abstract = is_specific_token Full_fidelity_token_kind.Abstract let is_final = is_specific_token Full_fidelity_token_kind.Final + let is_async = is_specific_token Full_fidelity_token_kind.Async + let is_coroutine = is_specific_token Full_fidelity_token_kind.Coroutine let is_void = is_specific_token Full_fidelity_token_kind.Void let is_left_brace = is_specific_token Full_fidelity_token_kind.LeftBrace let is_ellipsis = is_specific_token Full_fidelity_token_kind.DotDotDot @@ -631,8 +633,7 @@ module WithToken(Token: TokenType) = struct ) let get_function_declaration_header_children { - function_async; - function_coroutine; + function_modifiers; function_keyword; function_ampersand; function_name; @@ -644,8 +645,7 @@ module WithToken(Token: TokenType) = struct function_type; function_where_clause; } = ( - function_async, - function_coroutine, + function_modifiers, function_keyword, function_ampersand, function_name, @@ -678,13 +678,11 @@ module WithToken(Token: TokenType) = struct let get_methodish_declaration_children { methodish_attribute; - methodish_modifiers; methodish_function_decl_header; methodish_function_body; methodish_semicolon; } = ( methodish_attribute, - methodish_modifiers, methodish_function_decl_header, methodish_function_body, methodish_semicolon @@ -2528,8 +2526,7 @@ module WithToken(Token: TokenType) = struct let acc = f acc function_body in acc | FunctionDeclarationHeader { - function_async; - function_coroutine; + function_modifiers; function_keyword; function_ampersand; function_name; @@ -2541,8 +2538,7 @@ module WithToken(Token: TokenType) = struct function_type; function_where_clause; } -> - let acc = f acc function_async in - let acc = f acc function_coroutine in + let acc = f acc function_modifiers in let acc = f acc function_keyword in let acc = f acc function_ampersand in let acc = f acc function_name in @@ -2572,13 +2568,11 @@ module WithToken(Token: TokenType) = struct acc | MethodishDeclaration { methodish_attribute; - methodish_modifiers; methodish_function_decl_header; methodish_function_body; methodish_semicolon; } -> let acc = f acc methodish_attribute in - let acc = f acc methodish_modifiers in let acc = f acc methodish_function_decl_header in let acc = f acc methodish_function_body in let acc = f acc methodish_semicolon in @@ -4283,8 +4277,7 @@ module WithToken(Token: TokenType) = struct function_body; ] | FunctionDeclarationHeader { - function_async; - function_coroutine; + function_modifiers; function_keyword; function_ampersand; function_name; @@ -4296,8 +4289,7 @@ module WithToken(Token: TokenType) = struct function_type; function_where_clause; } -> [ - function_async; - function_coroutine; + function_modifiers; function_keyword; function_ampersand; function_name; @@ -4327,13 +4319,11 @@ module WithToken(Token: TokenType) = struct ] | MethodishDeclaration { methodish_attribute; - methodish_modifiers; methodish_function_decl_header; methodish_function_body; methodish_semicolon; } -> [ methodish_attribute; - methodish_modifiers; methodish_function_decl_header; methodish_function_body; methodish_semicolon; @@ -6039,8 +6029,7 @@ module WithToken(Token: TokenType) = struct "function_body"; ] | FunctionDeclarationHeader { - function_async; - function_coroutine; + function_modifiers; function_keyword; function_ampersand; function_name; @@ -6052,8 +6041,7 @@ module WithToken(Token: TokenType) = struct function_type; function_where_clause; } -> [ - "function_async"; - "function_coroutine"; + "function_modifiers"; "function_keyword"; "function_ampersand"; "function_name"; @@ -6083,13 +6071,11 @@ module WithToken(Token: TokenType) = struct ] | MethodishDeclaration { methodish_attribute; - methodish_modifiers; methodish_function_decl_header; methodish_function_body; methodish_semicolon; } -> [ "methodish_attribute"; - "methodish_modifiers"; "methodish_function_decl_header"; "methodish_function_body"; "methodish_semicolon"; @@ -7869,8 +7855,7 @@ module WithToken(Token: TokenType) = struct function_body; } | (SyntaxKind.FunctionDeclarationHeader, [ - function_async; - function_coroutine; + function_modifiers; function_keyword; function_ampersand; function_name; @@ -7883,8 +7868,7 @@ module WithToken(Token: TokenType) = struct function_where_clause; ]) -> FunctionDeclarationHeader { - function_async; - function_coroutine; + function_modifiers; function_keyword; function_ampersand; function_name; @@ -7916,14 +7900,12 @@ module WithToken(Token: TokenType) = struct } | (SyntaxKind.MethodishDeclaration, [ methodish_attribute; - methodish_modifiers; methodish_function_decl_header; methodish_function_body; methodish_semicolon; ]) -> MethodishDeclaration { methodish_attribute; - methodish_modifiers; methodish_function_decl_header; methodish_function_body; methodish_semicolon; @@ -9883,8 +9865,7 @@ module WithToken(Token: TokenType) = struct make syntax value let make_function_declaration_header - function_async - function_coroutine + function_modifiers function_keyword function_ampersand function_name @@ -9897,8 +9878,7 @@ module WithToken(Token: TokenType) = struct function_where_clause = let syntax = FunctionDeclarationHeader { - function_async; - function_coroutine; + function_modifiers; function_keyword; function_ampersand; function_name; @@ -9939,14 +9919,12 @@ module WithToken(Token: TokenType) = struct let make_methodish_declaration methodish_attribute - methodish_modifiers methodish_function_decl_header methodish_function_body methodish_semicolon = let syntax = MethodishDeclaration { methodish_attribute; - methodish_modifiers; methodish_function_decl_header; methodish_function_body; methodish_semicolon; diff --git a/hphp/hack/src/parser/full_fidelity_syntax_type.ml b/hphp/hack/src/parser/full_fidelity_syntax_type.ml index 89d78ef045d..682af354745 100644 --- a/hphp/hack/src/parser/full_fidelity_syntax_type.ml +++ b/hphp/hack/src/parser/full_fidelity_syntax_type.ml @@ -174,8 +174,7 @@ module MakeSyntaxType(Token : TokenType)(SyntaxValue : SyntaxValueType) = struct ; function_body : t } and function_declaration_header = - { function_async : t - ; function_coroutine : t + { function_modifiers : t ; function_keyword : t ; function_ampersand : t ; function_name : t @@ -198,7 +197,6 @@ module MakeSyntaxType(Token : TokenType)(SyntaxValue : SyntaxValueType) = struct } and methodish_declaration = { methodish_attribute : t - ; methodish_modifiers : t ; methodish_function_decl_header : t ; methodish_function_body : t ; methodish_semicolon : t @@ -1574,8 +1572,7 @@ module MakeValidated(Token : TokenType)(SyntaxValue : SyntaxValueType) = struct ; function_body: compound_statement value } and function_declaration_header = - { function_async: Token.t option value - ; function_coroutine: Token.t option value + { function_modifiers: Token.t listesque value ; function_keyword: Token.t value ; function_ampersand: Token.t option value ; function_name: Token.t value @@ -1598,7 +1595,6 @@ module MakeValidated(Token : TokenType)(SyntaxValue : SyntaxValueType) = struct } and methodish_declaration = { methodish_attribute: attribute_specification option value - ; methodish_modifiers: Token.t listesque value ; methodish_function_decl_header: function_declaration_header value ; methodish_function_body: compound_statement option value ; methodish_semicolon: Token.t option value diff --git a/hphp/hack/src/parser/full_fidelity_validated_syntax.ml b/hphp/hack/src/parser/full_fidelity_validated_syntax.ml index c82639b087a..1293e855166 100644 --- a/hphp/hack/src/parser/full_fidelity_validated_syntax.ml +++ b/hphp/hack/src/parser/full_fidelity_validated_syntax.ml @@ -1003,15 +1003,13 @@ module Make(Token : TokenType)(SyntaxValue : SyntaxValueType) = struct ; function_name = validate_token x.Syntax.function_name ; function_ampersand = validate_option_with (validate_token) x.Syntax.function_ampersand ; function_keyword = validate_token x.Syntax.function_keyword - ; function_coroutine = validate_option_with (validate_token) x.Syntax.function_coroutine - ; function_async = validate_option_with (validate_token) x.Syntax.function_async + ; function_modifiers = validate_list_with (validate_token) x.Syntax.function_modifiers } | s -> validation_fail SyntaxKind.FunctionDeclarationHeader s and invalidate_function_declaration_header : function_declaration_header invalidator = fun (v, x) -> { Syntax.syntax = Syntax.FunctionDeclarationHeader - { Syntax.function_async = invalidate_option_with (invalidate_token) x.function_async - ; Syntax.function_coroutine = invalidate_option_with (invalidate_token) x.function_coroutine + { Syntax.function_modifiers = invalidate_list_with (invalidate_token) x.function_modifiers ; Syntax.function_keyword = invalidate_token x.function_keyword ; Syntax.function_ampersand = invalidate_option_with (invalidate_token) x.function_ampersand ; Syntax.function_name = invalidate_token x.function_name @@ -1060,7 +1058,6 @@ module Make(Token : TokenType)(SyntaxValue : SyntaxValueType) = struct { methodish_semicolon = validate_option_with (validate_token) x.Syntax.methodish_semicolon ; methodish_function_body = validate_option_with (validate_compound_statement) x.Syntax.methodish_function_body ; methodish_function_decl_header = validate_function_declaration_header x.Syntax.methodish_function_decl_header - ; methodish_modifiers = validate_list_with (validate_token) x.Syntax.methodish_modifiers ; methodish_attribute = validate_option_with (validate_attribute_specification) x.Syntax.methodish_attribute } | s -> validation_fail SyntaxKind.MethodishDeclaration s @@ -1068,7 +1065,6 @@ module Make(Token : TokenType)(SyntaxValue : SyntaxValueType) = struct { Syntax.syntax = Syntax.MethodishDeclaration { Syntax.methodish_attribute = invalidate_option_with (invalidate_attribute_specification) x.methodish_attribute - ; Syntax.methodish_modifiers = invalidate_list_with (invalidate_token) x.methodish_modifiers ; Syntax.methodish_function_decl_header = invalidate_function_declaration_header x.methodish_function_decl_header ; Syntax.methodish_function_body = invalidate_option_with (invalidate_compound_statement) x.methodish_function_body ; Syntax.methodish_semicolon = invalidate_option_with (invalidate_token) x.methodish_semicolon diff --git a/hphp/hack/src/parser/js/full_fidelity_editable.js b/hphp/hack/src/parser/js/full_fidelity_editable.js index f666e635e3d..2f5b8bcab71 100644 --- a/hphp/hack/src/parser/js/full_fidelity_editable.js +++ b/hphp/hack/src/parser/js/full_fidelity_editable.js @@ -4637,8 +4637,7 @@ class FunctionDeclaration extends EditableSyntax class FunctionDeclarationHeader extends EditableSyntax { constructor( - async, - coroutine, + modifiers, keyword, ampersand, name, @@ -4651,8 +4650,7 @@ class FunctionDeclarationHeader extends EditableSyntax where_clause) { super('function_declaration_header', { - async: async, - coroutine: coroutine, + modifiers: modifiers, keyword: keyword, ampersand: ampersand, name: name, @@ -4664,8 +4662,7 @@ class FunctionDeclarationHeader extends EditableSyntax type: type, where_clause: where_clause }); } - get async() { return this.children.async; } - get coroutine() { return this.children.coroutine; } + get modifiers() { return this.children.modifiers; } get keyword() { return this.children.keyword; } get ampersand() { return this.children.ampersand; } get name() { return this.children.name; } @@ -4676,25 +4673,9 @@ class FunctionDeclarationHeader extends EditableSyntax get colon() { return this.children.colon; } get type() { return this.children.type; } get where_clause() { return this.children.where_clause; } - with_async(async){ - return new FunctionDeclarationHeader( - async, - this.coroutine, - this.keyword, - this.ampersand, - this.name, - this.type_parameter_list, - this.left_paren, - this.parameter_list, - this.right_paren, - this.colon, - this.type, - this.where_clause); - } - with_coroutine(coroutine){ + with_modifiers(modifiers){ return new FunctionDeclarationHeader( - this.async, - coroutine, + modifiers, this.keyword, this.ampersand, this.name, @@ -4708,8 +4689,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_keyword(keyword){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, keyword, this.ampersand, this.name, @@ -4723,8 +4703,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_ampersand(ampersand){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, ampersand, this.name, @@ -4738,8 +4717,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_name(name){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, this.ampersand, name, @@ -4753,8 +4731,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_type_parameter_list(type_parameter_list){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, this.ampersand, this.name, @@ -4768,8 +4745,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_left_paren(left_paren){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, this.ampersand, this.name, @@ -4783,8 +4759,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_parameter_list(parameter_list){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, this.ampersand, this.name, @@ -4798,8 +4773,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_right_paren(right_paren){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, this.ampersand, this.name, @@ -4813,8 +4787,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_colon(colon){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, this.ampersand, this.name, @@ -4828,8 +4801,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_type(type){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, this.ampersand, this.name, @@ -4843,8 +4815,7 @@ class FunctionDeclarationHeader extends EditableSyntax } with_where_clause(where_clause){ return new FunctionDeclarationHeader( - this.async, - this.coroutine, + this.modifiers, this.keyword, this.ampersand, this.name, @@ -4862,8 +4833,7 @@ class FunctionDeclarationHeader extends EditableSyntax parents = []; let new_parents = parents.slice(); new_parents.push(this); - var async = this.async.rewrite(rewriter, new_parents); - var coroutine = this.coroutine.rewrite(rewriter, new_parents); + var modifiers = this.modifiers.rewrite(rewriter, new_parents); var keyword = this.keyword.rewrite(rewriter, new_parents); var ampersand = this.ampersand.rewrite(rewriter, new_parents); var name = this.name.rewrite(rewriter, new_parents); @@ -4875,8 +4845,7 @@ class FunctionDeclarationHeader extends EditableSyntax var type = this.type.rewrite(rewriter, new_parents); var where_clause = this.where_clause.rewrite(rewriter, new_parents); if ( - async === this.async && - coroutine === this.coroutine && + modifiers === this.modifiers && keyword === this.keyword && ampersand === this.ampersand && name === this.name && @@ -4893,8 +4862,7 @@ class FunctionDeclarationHeader extends EditableSyntax else { return rewriter(new FunctionDeclarationHeader( - async, - coroutine, + modifiers, keyword, ampersand, name, @@ -4909,12 +4877,9 @@ class FunctionDeclarationHeader extends EditableSyntax } static from_json(json, position, source) { - let async = EditableSyntax.from_json( - json.function_async, position, source); - position += async.width; - let coroutine = EditableSyntax.from_json( - json.function_coroutine, position, source); - position += coroutine.width; + let modifiers = EditableSyntax.from_json( + json.function_modifiers, position, source); + position += modifiers.width; let keyword = EditableSyntax.from_json( json.function_keyword, position, source); position += keyword.width; @@ -4946,8 +4911,7 @@ class FunctionDeclarationHeader extends EditableSyntax json.function_where_clause, position, source); position += where_clause.width; return new FunctionDeclarationHeader( - async, - coroutine, + modifiers, keyword, ampersand, name, @@ -4963,8 +4927,7 @@ class FunctionDeclarationHeader extends EditableSyntax { if (FunctionDeclarationHeader._children_keys == null) FunctionDeclarationHeader._children_keys = [ - 'async', - 'coroutine', + 'modifiers', 'keyword', 'ampersand', 'name', @@ -5129,35 +5092,23 @@ class MethodishDeclaration extends EditableSyntax { constructor( attribute, - modifiers, function_decl_header, function_body, semicolon) { super('methodish_declaration', { attribute: attribute, - modifiers: modifiers, function_decl_header: function_decl_header, function_body: function_body, semicolon: semicolon }); } get attribute() { return this.children.attribute; } - get modifiers() { return this.children.modifiers; } get function_decl_header() { return this.children.function_decl_header; } get function_body() { return this.children.function_body; } get semicolon() { return this.children.semicolon; } with_attribute(attribute){ return new MethodishDeclaration( attribute, - this.modifiers, - this.function_decl_header, - this.function_body, - this.semicolon); - } - with_modifiers(modifiers){ - return new MethodishDeclaration( - this.attribute, - modifiers, this.function_decl_header, this.function_body, this.semicolon); @@ -5165,7 +5116,6 @@ class MethodishDeclaration extends EditableSyntax with_function_decl_header(function_decl_header){ return new MethodishDeclaration( this.attribute, - this.modifiers, function_decl_header, this.function_body, this.semicolon); @@ -5173,7 +5123,6 @@ class MethodishDeclaration extends EditableSyntax with_function_body(function_body){ return new MethodishDeclaration( this.attribute, - this.modifiers, this.function_decl_header, function_body, this.semicolon); @@ -5181,7 +5130,6 @@ class MethodishDeclaration extends EditableSyntax with_semicolon(semicolon){ return new MethodishDeclaration( this.attribute, - this.modifiers, this.function_decl_header, this.function_body, semicolon); @@ -5193,13 +5141,11 @@ class MethodishDeclaration extends EditableSyntax let new_parents = parents.slice(); new_parents.push(this); var attribute = this.attribute.rewrite(rewriter, new_parents); - var modifiers = this.modifiers.rewrite(rewriter, new_parents); var function_decl_header = this.function_decl_header.rewrite(rewriter, new_parents); var function_body = this.function_body.rewrite(rewriter, new_parents); var semicolon = this.semicolon.rewrite(rewriter, new_parents); if ( attribute === this.attribute && - modifiers === this.modifiers && function_decl_header === this.function_decl_header && function_body === this.function_body && semicolon === this.semicolon) @@ -5210,7 +5156,6 @@ class MethodishDeclaration extends EditableSyntax { return rewriter(new MethodishDeclaration( attribute, - modifiers, function_decl_header, function_body, semicolon), parents); @@ -5221,9 +5166,6 @@ class MethodishDeclaration extends EditableSyntax let attribute = EditableSyntax.from_json( json.methodish_attribute, position, source); position += attribute.width; - let modifiers = EditableSyntax.from_json( - json.methodish_modifiers, position, source); - position += modifiers.width; let function_decl_header = EditableSyntax.from_json( json.methodish_function_decl_header, position, source); position += function_decl_header.width; @@ -5235,7 +5177,6 @@ class MethodishDeclaration extends EditableSyntax position += semicolon.width; return new MethodishDeclaration( attribute, - modifiers, function_decl_header, function_body, semicolon); @@ -5245,7 +5186,6 @@ class MethodishDeclaration extends EditableSyntax if (MethodishDeclaration._children_keys == null) MethodishDeclaration._children_keys = [ 'attribute', - 'modifiers', 'function_decl_header', 'function_body', 'semicolon']; diff --git a/hphp/hack/src/parser/js/full_fidelity_schema.json b/hphp/hack/src/parser/js/full_fidelity_schema.json index 6e6c69ceced..937b806e0cc 100644 --- a/hphp/hack/src/parser/js/full_fidelity_schema.json +++ b/hphp/hack/src/parser/js/full_fidelity_schema.json @@ -1,6 +1,6 @@ { "description" : "@generated JSON schema of the Hack Full Fidelity Parser AST", - "version" : "2017-12-01-0001", + "version" : "2017-12-07-0001", "trivia" : [ { "trivia_kind_name" : "WhiteSpace", "trivia_type_name" : "whitespace" }, @@ -610,8 +610,7 @@ "description" : "function_declaration_header", "prefix" : "function", "fields" : [ - { "field_name" : "async" }, - { "field_name" : "coroutine" }, + { "field_name" : "modifiers" }, { "field_name" : "keyword" }, { "field_name" : "ampersand" }, { "field_name" : "name" }, @@ -646,7 +645,6 @@ "prefix" : "methodish", "fields" : [ { "field_name" : "attribute" }, - { "field_name" : "modifiers" }, { "field_name" : "function_decl_header" }, { "field_name" : "function_body" }, { "field_name" : "semicolon" } diff --git a/hphp/hack/src/parser/php/full_fidelity_editable.php b/hphp/hack/src/parser/php/full_fidelity_editable.php index 461d8d2206b..3a277cd140b 100644 --- a/hphp/hack/src/parser/php/full_fidelity_editable.php +++ b/hphp/hack/src/parser/php/full_fidelity_editable.php @@ -6443,8 +6443,7 @@ final class FunctionDeclaration extends EditableSyntax { } } final class FunctionDeclarationHeader extends EditableSyntax { - private EditableSyntax $_async; - private EditableSyntax $_coroutine; + private EditableSyntax $_modifiers; private EditableSyntax $_keyword; private EditableSyntax $_ampersand; private EditableSyntax $_name; @@ -6456,8 +6455,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { private EditableSyntax $_type; private EditableSyntax $_where_clause; public function __construct( - EditableSyntax $async, - EditableSyntax $coroutine, + EditableSyntax $modifiers, EditableSyntax $keyword, EditableSyntax $ampersand, EditableSyntax $name, @@ -6469,8 +6467,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { EditableSyntax $type, EditableSyntax $where_clause) { parent::__construct('function_declaration_header'); - $this->_async = $async; - $this->_coroutine = $coroutine; + $this->_modifiers = $modifiers; $this->_keyword = $keyword; $this->_ampersand = $ampersand; $this->_name = $name; @@ -6482,11 +6479,8 @@ final class FunctionDeclarationHeader extends EditableSyntax { $this->_type = $type; $this->_where_clause = $where_clause; } - public function async(): EditableSyntax { - return $this->_async; - } - public function coroutine(): EditableSyntax { - return $this->_coroutine; + public function modifiers(): EditableSyntax { + return $this->_modifiers; } public function keyword(): EditableSyntax { return $this->_keyword; @@ -6518,25 +6512,9 @@ final class FunctionDeclarationHeader extends EditableSyntax { public function where_clause(): EditableSyntax { return $this->_where_clause; } - public function with_async(EditableSyntax $async): FunctionDeclarationHeader { - return new FunctionDeclarationHeader( - $async, - $this->_coroutine, - $this->_keyword, - $this->_ampersand, - $this->_name, - $this->_type_parameter_list, - $this->_left_paren, - $this->_parameter_list, - $this->_right_paren, - $this->_colon, - $this->_type, - $this->_where_clause); - } - public function with_coroutine(EditableSyntax $coroutine): FunctionDeclarationHeader { + public function with_modifiers(EditableSyntax $modifiers): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $coroutine, + $modifiers, $this->_keyword, $this->_ampersand, $this->_name, @@ -6550,8 +6528,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_keyword(EditableSyntax $keyword): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $keyword, $this->_ampersand, $this->_name, @@ -6565,8 +6542,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_ampersand(EditableSyntax $ampersand): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $ampersand, $this->_name, @@ -6580,8 +6556,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_name(EditableSyntax $name): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $this->_ampersand, $name, @@ -6595,8 +6570,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_type_parameter_list(EditableSyntax $type_parameter_list): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $this->_ampersand, $this->_name, @@ -6610,8 +6584,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_left_paren(EditableSyntax $left_paren): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $this->_ampersand, $this->_name, @@ -6625,8 +6598,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_parameter_list(EditableSyntax $parameter_list): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $this->_ampersand, $this->_name, @@ -6640,8 +6612,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_right_paren(EditableSyntax $right_paren): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $this->_ampersand, $this->_name, @@ -6655,8 +6626,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_colon(EditableSyntax $colon): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $this->_ampersand, $this->_name, @@ -6670,8 +6640,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_type(EditableSyntax $type): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $this->_ampersand, $this->_name, @@ -6685,8 +6654,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public function with_where_clause(EditableSyntax $where_clause): FunctionDeclarationHeader { return new FunctionDeclarationHeader( - $this->_async, - $this->_coroutine, + $this->_modifiers, $this->_keyword, $this->_ampersand, $this->_name, @@ -6705,8 +6673,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { ?array $parents = null): ?EditableSyntax { $new_parents = $parents ?? []; array_push($new_parents, $this); - $async = $this->async()->rewrite($rewriter, $new_parents); - $coroutine = $this->coroutine()->rewrite($rewriter, $new_parents); + $modifiers = $this->modifiers()->rewrite($rewriter, $new_parents); $keyword = $this->keyword()->rewrite($rewriter, $new_parents); $ampersand = $this->ampersand()->rewrite($rewriter, $new_parents); $name = $this->name()->rewrite($rewriter, $new_parents); @@ -6718,8 +6685,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { $type = $this->type()->rewrite($rewriter, $new_parents); $where_clause = $this->where_clause()->rewrite($rewriter, $new_parents); if ( - $async === $this->async() && - $coroutine === $this->coroutine() && + $modifiers === $this->modifiers() && $keyword === $this->keyword() && $ampersand === $this->ampersand() && $name === $this->name() && @@ -6733,8 +6699,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { return $rewriter($this, $parents ?? []); } else { return $rewriter(new FunctionDeclarationHeader( - $async, - $coroutine, + $modifiers, $keyword, $ampersand, $name, @@ -6749,12 +6714,9 @@ final class FunctionDeclarationHeader extends EditableSyntax { } public static function from_json(mixed $json, int $position, string $source) { - $async = EditableSyntax::from_json( - $json->function_async, $position, $source); - $position += $async->width(); - $coroutine = EditableSyntax::from_json( - $json->function_coroutine, $position, $source); - $position += $coroutine->width(); + $modifiers = EditableSyntax::from_json( + $json->function_modifiers, $position, $source); + $position += $modifiers->width(); $keyword = EditableSyntax::from_json( $json->function_keyword, $position, $source); $position += $keyword->width(); @@ -6786,8 +6748,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { $json->function_where_clause, $position, $source); $position += $where_clause->width(); return new FunctionDeclarationHeader( - $async, - $coroutine, + $modifiers, $keyword, $ampersand, $name, @@ -6800,8 +6761,7 @@ final class FunctionDeclarationHeader extends EditableSyntax { $where_clause); } public function children(): Generator { - yield $this->_async; - yield $this->_coroutine; + yield $this->_modifiers; yield $this->_keyword; yield $this->_ampersand; yield $this->_name; @@ -6965,19 +6925,16 @@ final class WhereConstraint extends EditableSyntax { } final class MethodishDeclaration extends EditableSyntax { private EditableSyntax $_attribute; - private EditableSyntax $_modifiers; private EditableSyntax $_function_decl_header; private EditableSyntax $_function_body; private EditableSyntax $_semicolon; public function __construct( EditableSyntax $attribute, - EditableSyntax $modifiers, EditableSyntax $function_decl_header, EditableSyntax $function_body, EditableSyntax $semicolon) { parent::__construct('methodish_declaration'); $this->_attribute = $attribute; - $this->_modifiers = $modifiers; $this->_function_decl_header = $function_decl_header; $this->_function_body = $function_body; $this->_semicolon = $semicolon; @@ -6985,9 +6942,6 @@ final class MethodishDeclaration extends EditableSyntax { public function attribute(): EditableSyntax { return $this->_attribute; } - public function modifiers(): EditableSyntax { - return $this->_modifiers; - } public function function_decl_header(): EditableSyntax { return $this->_function_decl_header; } @@ -7000,15 +6954,6 @@ final class MethodishDeclaration extends EditableSyntax { public function with_attribute(EditableSyntax $attribute): MethodishDeclaration { return new MethodishDeclaration( $attribute, - $this->_modifiers, - $this->_function_decl_header, - $this->_function_body, - $this->_semicolon); - } - public function with_modifiers(EditableSyntax $modifiers): MethodishDeclaration { - return new MethodishDeclaration( - $this->_attribute, - $modifiers, $this->_function_decl_header, $this->_function_body, $this->_semicolon); @@ -7016,7 +6961,6 @@ final class MethodishDeclaration extends EditableSyntax { public function with_function_decl_header(EditableSyntax $function_decl_header): MethodishDeclaration { return new MethodishDeclaration( $this->_attribute, - $this->_modifiers, $function_decl_header, $this->_function_body, $this->_semicolon); @@ -7024,7 +6968,6 @@ final class MethodishDeclaration extends EditableSyntax { public function with_function_body(EditableSyntax $function_body): MethodishDeclaration { return new MethodishDeclaration( $this->_attribute, - $this->_modifiers, $this->_function_decl_header, $function_body, $this->_semicolon); @@ -7032,7 +6975,6 @@ final class MethodishDeclaration extends EditableSyntax { public function with_semicolon(EditableSyntax $semicolon): MethodishDeclaration { return new MethodishDeclaration( $this->_attribute, - $this->_modifiers, $this->_function_decl_header, $this->_function_body, $semicolon); @@ -7045,13 +6987,11 @@ final class MethodishDeclaration extends EditableSyntax { $new_parents = $parents ?? []; array_push($new_parents, $this); $attribute = $this->attribute()->rewrite($rewriter, $new_parents); - $modifiers = $this->modifiers()->rewrite($rewriter, $new_parents); $function_decl_header = $this->function_decl_header()->rewrite($rewriter, $new_parents); $function_body = $this->function_body()->rewrite($rewriter, $new_parents); $semicolon = $this->semicolon()->rewrite($rewriter, $new_parents); if ( $attribute === $this->attribute() && - $modifiers === $this->modifiers() && $function_decl_header === $this->function_decl_header() && $function_body === $this->function_body() && $semicolon === $this->semicolon()) { @@ -7059,7 +6999,6 @@ final class MethodishDeclaration extends EditableSyntax { } else { return $rewriter(new MethodishDeclaration( $attribute, - $modifiers, $function_decl_header, $function_body, $semicolon), $parents ?? []); @@ -7070,9 +7009,6 @@ final class MethodishDeclaration extends EditableSyntax { $attribute = EditableSyntax::from_json( $json->methodish_attribute, $position, $source); $position += $attribute->width(); - $modifiers = EditableSyntax::from_json( - $json->methodish_modifiers, $position, $source); - $position += $modifiers->width(); $function_decl_header = EditableSyntax::from_json( $json->methodish_function_decl_header, $position, $source); $position += $function_decl_header->width(); @@ -7084,14 +7020,12 @@ final class MethodishDeclaration extends EditableSyntax { $position += $semicolon->width(); return new MethodishDeclaration( $attribute, - $modifiers, $function_decl_header, $function_body, $semicolon); } public function children(): Generator { yield $this->_attribute; - yield $this->_modifiers; yield $this->_function_decl_header; yield $this->_function_body; yield $this->_semicolon; diff --git a/hphp/hack/src/parser/schema/full_fidelity_schema.ml b/hphp/hack/src/parser/schema/full_fidelity_schema.ml index 3bc56ab0a76..9ac3554bfe5 100644 --- a/hphp/hack/src/parser/schema/full_fidelity_schema.ml +++ b/hphp/hack/src/parser/schema/full_fidelity_schema.ml @@ -10,7 +10,7 @@ (* If you make changes to the schema that cause it to serialize / deserialize differently, please update this version number *) -let full_fidelity_schema_version_number = "2017-12-01-0001" +let full_fidelity_schema_version_number = "2017-12-07-0001" (* TODO: Consider basing the version number on an auto-generated hash of a file rather than relying on people remembering to update it. *) (* TODO: It may be worthwhile to investigate how Thrift describes data types diff --git a/hphp/hack/src/parser/schema/schema_definition.ml b/hphp/hack/src/parser/schema/schema_definition.ml index 8c50cedbf00..12d7b70201a 100644 --- a/hphp/hack/src/parser/schema/schema_definition.ml +++ b/hphp/hack/src/parser/schema/schema_definition.ml @@ -263,8 +263,7 @@ let schema : schema_node list = ; prefix = "function" ; aggregates = [] ; fields = - [ "async", ZeroOrOne Token - ; "coroutine", ZeroOrOne Token + [ "modifiers", ZeroOrMore Token ; "keyword", Token ; "ampersand", ZeroOrOne Token ; "name", Token @@ -308,7 +307,6 @@ let schema : schema_node list = ; aggregates = [ ClassBodyDeclaration ] ; fields = [ "attribute", ZeroOrOne (Just "AttributeSpecification") - ; "modifiers", ZeroOrMore Token ; "function_decl_header", Just "FunctionDeclarationHeader" ; "function_body", ZeroOrOne (Just "CompoundStatement") ; "semicolon", ZeroOrOne Token diff --git a/hphp/hack/src/parser/syntax_sig.ml b/hphp/hack/src/parser/syntax_sig.ml index ce3e851c414..a02d7346db3 100644 --- a/hphp/hack/src/parser/syntax_sig.ml +++ b/hphp/hack/src/parser/syntax_sig.ml @@ -123,8 +123,7 @@ module type Syntax_S = sig ; function_body : t } and function_declaration_header = - { function_async : t - ; function_coroutine : t + { function_modifiers : t ; function_keyword : t ; function_ampersand : t ; function_name : t @@ -147,7 +146,6 @@ module type Syntax_S = sig } and methodish_declaration = { methodish_attribute : t - ; methodish_modifiers : t ; methodish_function_decl_header : t ; methodish_function_body : t ; methodish_semicolon : t @@ -1183,10 +1181,10 @@ module type Syntax_S = sig val make_namespace_group_use_declaration : t -> t -> t -> t -> t -> t -> t -> t val make_namespace_use_clause : t -> t -> t -> t -> t val make_function_declaration : t -> t -> t -> t - val make_function_declaration_header : t -> t -> t -> t -> t -> t -> t -> t -> t -> t -> t -> t -> t + val make_function_declaration_header : t -> t -> t -> t -> t -> t -> t -> t -> t -> t -> t -> t val make_where_clause : t -> t -> t val make_where_constraint : t -> t -> t -> t - val make_methodish_declaration : t -> t -> t -> t -> t -> t + val make_methodish_declaration : t -> t -> t -> t -> t val make_classish_declaration : t -> t -> t -> t -> t -> t -> t -> t -> t -> t -> t val make_classish_body : t -> t -> t -> t val make_trait_use_precedence_item : t -> t -> t -> t @@ -1506,6 +1504,8 @@ module type Syntax_S = sig val is_protected : t -> bool val is_abstract : t -> bool val is_final : t -> bool + val is_async : t -> bool + val is_coroutine : t -> bool val is_void : t -> bool val is_left_brace : t -> bool val is_ellipsis : t -> bool diff --git a/hphp/hack/src/server/ffpAutocompleteContextParser.ml b/hphp/hack/src/server/ffpAutocompleteContextParser.ml index 00eece4e54c..b6dd41b6a19 100644 --- a/hphp/hack/src/server/ffpAutocompleteContextParser.ml +++ b/hphp/hack/src/server/ffpAutocompleteContextParser.ml @@ -293,8 +293,12 @@ let is_method_static (method_object:PositionedSyntax.syntax) : bool = let open PositionedToken in let open TokenKind in match method_object with - | MethodishDeclaration { methodish_modifiers; _ } -> - List.exists (syntax_node_to_list methodish_modifiers) ~f:(is_specific_token Static) + | MethodishDeclaration { + methodish_function_decl_header = { + syntax = FunctionDeclarationHeader h; _ + }; _ + } -> + List.exists (syntax_node_to_list h.function_modifiers) ~f:(is_specific_token Static) | AnonymousFunction { anonymous_static_keyword = static; _ } -> is_specific_token Static static | _ -> false @@ -306,12 +310,13 @@ let is_function_async (function_object:PositionedSyntax.syntax) : bool = match function_object with | FunctionDeclaration { function_declaration_header = { syntax = FunctionDeclarationHeader { - function_async = async; _ + function_modifiers = m; _ }; _ }; _ } | MethodishDeclaration { methodish_function_decl_header = { syntax = - FunctionDeclarationHeader { function_async = async; _ }; _ - }; _ } + FunctionDeclarationHeader { function_modifiers = m; _ }; _ + }; _ } -> + List.exists (syntax_node_to_list m) ~f:is_async | AnonymousFunction { anonymous_async_keyword = async; _ } | LambdaExpression { lambda_async = async; _ } -> is_specific_token Async async diff --git a/hphp/hack/test/full_fidelity/cases/context/test_extra_error_trivia.exp b/hphp/hack/test/full_fidelity/cases/context/test_extra_error_trivia.exp dissimilarity index 88% index f8fbc8fbb4a..df33a61ce2b 100644 --- a/hphp/hack/test/full_fidelity/cases/context/test_extra_error_trivia.exp +++ b/hphp/hack/test/full_fidelity/cases/context/test_extra_error_trivia.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(classish_declaration(missing)(missing)((end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(list((end_of_line)(whitespace)(single_line_comment)(end_of_line)(whitespace)(public)(whitespace)))(function_declaration_header(missing)(missing)((extra_token_error)(whitespace)(function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))(missing))(methodish_declaration(missing)(list((end_of_line)(whitespace)(single_line_comment)(end_of_line)(whitespace)(public)(whitespace))((static)(whitespace)))(function_declaration_header(missing)(missing)((extra_token_error)(whitespace)(function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))(missing))(property_declaration(list((end_of_line)(whitespace)(single_line_comment)(end_of_line)(whitespace)(public)(whitespace)))(simple_type_specifier((name)(whitespace)))(list(list_item(property_declarator(missing)(missing))(missing)))(missing))(methodish_declaration(missing)(list((static)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))(missing))(property_declaration(list((end_of_line)(whitespace)(single_line_comment)(end_of_line)(whitespace)(public)(whitespace)))(simple_type_specifier((name)(whitespace)))(list(list_item(property_declarator(missing)(missing))(missing)))(missing))(error((name)(whitespace)))(methodish_declaration(missing)(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))(missing)))((end_of_line)(})))))) +(script(header((<))((?))((name)(end_of_line)))(list(classish_declaration(missing)(missing)((end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(function_declaration_header(list((end_of_line)(whitespace)(single_line_comment)(end_of_line)(whitespace)(public)(whitespace)))((extra_token_error)(whitespace)(function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))(missing))(methodish_declaration(missing)(function_declaration_header(list((end_of_line)(whitespace)(single_line_comment)(end_of_line)(whitespace)(public)(whitespace))((static)(whitespace)))((extra_token_error)(whitespace)(function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))(missing))(property_declaration(list((end_of_line)(whitespace)(single_line_comment)(end_of_line)(whitespace)(public)(whitespace)))(simple_type_specifier((name)(whitespace)))(list(list_item(property_declarator(missing)(missing))(missing)))(missing))(methodish_declaration(missing)(function_declaration_header(list((static)(whitespace)))((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))(missing))(property_declaration(list((end_of_line)(whitespace)(single_line_comment)(end_of_line)(whitespace)(public)(whitespace)))(simple_type_specifier((name)(whitespace)))(list(list_item(property_declarator(missing)(missing))(missing)))(missing))(error((name)(whitespace)))(methodish_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))(missing)))((end_of_line)(})))))) diff --git a/hphp/hack/test/full_fidelity/cases/context/test_method_decl_extra_token.exp b/hphp/hack/test/full_fidelity/cases/context/test_method_decl_extra_token.exp index 7843a88936e..08900e0ff95 100644 --- a/hphp/hack/test/full_fidelity/cases/context/test_method_decl_extra_token.exp +++ b/hphp/hack/test/full_fidelity/cases/context/test_method_decl_extra_token.exp @@ -1,8 +1,8 @@ (6,10)-(6,13) This token is not valid as part of a function declaration. +(10,3)-(10,44) Redeclared method C::f (10,17)-(10,32) This token is not valid as part of a function declaration. -(10,33)-(10,44) Redeclared method C::f (14,26)-(14,26) A variable name is expected here. -(14,33)-(14,44) Redeclared method C::f +(14,26)-(14,44) Redeclared method C::f (18,27)-(18,27) A variable name is expected here. (18,44)-(18,44) A class member, method, type, trait usage, trait require, xhp attribute, xhp use, or xhp category is expected here. (18,44)-(18,55) Redeclared method C::f diff --git a/hphp/hack/test/full_fidelity/cases/test_abstract_final_errors.exp b/hphp/hack/test/full_fidelity/cases/test_abstract_final_errors.exp index c87ad983cbb..a9e42927600 100644 --- a/hphp/hack/test/full_fidelity/cases/test_abstract_final_errors.exp +++ b/hphp/hack/test/full_fidelity/cases/test_abstract_final_errors.exp @@ -1,3 +1,3 @@ (4,3)-(4,8) Non-static instance variables are not allowed in abstract final classes. -(12,10)-(12,27) Non-static methods are not allowed in abstract final classes. +(12,3)-(12,27) Non-static methods are not allowed in abstract final classes. diff --git a/hphp/hack/test/full_fidelity/cases/test_array_expression.exp b/hphp/hack/test/full_fidelity/cases/test_array_expression.exp dissimilarity index 91% index 2b9ed654b6a..63071d73db5 100644 --- a/hphp/hack/test/full_fidelity/cases/test_array_expression.exp +++ b/hphp/hack/test/full_fidelity/cases/test_array_expression.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(array_intrinsic_expression((whitespace)(array))((lparen))(missing)((rparen)))((;)(end_of_line)))(expression_statement(array_intrinsic_expression((whitespace)(array))((lparen))(list(list_item(variable((variable)))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(array_intrinsic_expression((whitespace)(array))((lparen))(list(list_item(variable((variable)))((,))))((rparen)))((;)(end_of_line)))(expression_statement(array_intrinsic_expression((whitespace)(array))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(array_creation_expression((whitespace)([))(missing)((])))((;)(end_of_line)))(expression_statement(array_creation_expression((whitespace)([))(list(list_item(variable((variable)))(missing)))((])))((;)(end_of_line)))(expression_statement(array_creation_expression((whitespace)([))(list(list_item(variable((variable)))((,))))((])))((;)(end_of_line)))(expression_statement(array_creation_expression((whitespace)([))(list(list_item(variable((variable)))((,)))(list_item(variable((variable)))((,)))(list_item(variable((variable)))(missing)))((])))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(array_intrinsic_expression((whitespace)(array))((lparen))(missing)((rparen)))((;)(end_of_line)))(expression_statement(array_intrinsic_expression((whitespace)(array))((lparen))(list(list_item(variable((variable)))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(array_intrinsic_expression((whitespace)(array))((lparen))(list(list_item(variable((variable)))((,))))((rparen)))((;)(end_of_line)))(expression_statement(array_intrinsic_expression((whitespace)(array))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(array_creation_expression((whitespace)([))(missing)((])))((;)(end_of_line)))(expression_statement(array_creation_expression((whitespace)([))(list(list_item(variable((variable)))(missing)))((])))((;)(end_of_line)))(expression_statement(array_creation_expression((whitespace)([))(list(list_item(variable((variable)))((,))))((])))((;)(end_of_line)))(expression_statement(array_creation_expression((whitespace)([))(list(list_item(variable((variable)))((,)))(list_item(variable((variable)))((,)))(list_item(variable((variable)))(missing)))((])))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_array_key_value_precedence.exp b/hphp/hack/test/full_fidelity/cases/test_array_key_value_precedence.exp dissimilarity index 91% index 0c2787cafb4..967d081365e 100644 --- a/hphp/hack/test/full_fidelity/cases/test_array_key_value_precedence.exp +++ b/hphp/hack/test/full_fidelity/cases/test_array_key_value_precedence.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(prefix_unary_expression((whitespace)(await)(whitespace))(binary_expression(variable((variable)(whitespace)))((.)(whitespace))(array_intrinsic_expression((array)(whitespace))((lparen))(list(list_item(element_initializer(variable((variable)(whitespace)))((=>)(whitespace))(binary_expression(qualified_name((name)(whitespace)))((*=)(whitespace))(literal((decimal_literal)))))(missing)))((rparen)))))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(prefix_unary_expression((whitespace)(await)(whitespace))(binary_expression(variable((variable)(whitespace)))((.)(whitespace))(array_intrinsic_expression((array)(whitespace))((lparen))(list(list_item(element_initializer(variable((variable)(whitespace)))((=>)(whitespace))(binary_expression(qualified_name((name)(whitespace)))((*=)(whitespace))(literal((decimal_literal)))))(missing)))((rparen)))))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_attribute_spec.exp b/hphp/hack/test/full_fidelity/cases/test_attribute_spec.exp index 2078e4c643b..4b2957b1077 100644 --- a/hphp/hack/test/full_fidelity/cases/test_attribute_spec.exp +++ b/hphp/hack/test/full_fidelity/cases/test_attribute_spec.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(attribute_specification((<<))(list(list_item(attribute((name))((lparen))(missing)((rparen)))((,)(whitespace)))(list_item(attribute((name))((lparen))(list(list_item(binary_expression(literal((decimal_literal)))((+))(literal((decimal_literal))))(missing)))((rparen)))((,)(whitespace)))(list_item(attribute((name))((lparen))(list(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))(missing)))((rparen)))(missing)))((>>)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(attribute_specification((<<))(list(list_item(attribute((name))((lparen))(missing)((rparen)))((,)(whitespace)))(list_item(attribute((name))((lparen))(list(list_item(binary_expression(literal((decimal_literal)))((+))(literal((decimal_literal))))(missing)))((rparen)))((,)(whitespace)))(list_item(attribute((name))((lparen))(list(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))(missing)))((rparen)))(missing)))((>>)(whitespace)))(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_awaitable_creation.exp b/hphp/hack/test/full_fidelity/cases/test_awaitable_creation.exp dissimilarity index 97% index 0e035778dd1..7b715d8e418 100644 --- a/hphp/hack/test/full_fidelity/cases/test_awaitable_creation.exp +++ b/hphp/hack/test/full_fidelity/cases/test_awaitable_creation.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((})))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(binary_expression(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((})(whitespace))))((+)(whitespace))(literal((decimal_literal)))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(binary_expression(literal((decimal_literal)(whitespace)))((+)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((}))))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(binary_expression(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((})(whitespace))))((+)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((}))))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))((;)(end_of_line))))((whitespace)(})))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(binary_expression(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((})(whitespace))))((+)(whitespace))(literal((decimal_literal)))))((;)(end_of_line))))((whitespace)(})))))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((})))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(binary_expression(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((})(whitespace))))((+)(whitespace))(literal((decimal_literal)))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(binary_expression(literal((decimal_literal)(whitespace)))((+)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((}))))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(binary_expression(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((})(whitespace))))((+)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((}))))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))((;)(end_of_line))))((whitespace)(})))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(binary_expression(awaitable_creation_expression((async)(whitespace))(missing)(compound_statement(({))(missing)((})(whitespace))))((+)(whitespace))(literal((decimal_literal)))))((;)(end_of_line))))((whitespace)(})))))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_class_method_declaration.exp b/hphp/hack/test/full_fidelity/cases/test_class_method_declaration.exp dissimilarity index 89% index 43b391f34f6..f58af15afb2 100644 --- a/hphp/hack/test/full_fidelity/cases/test_class_method_declaration.exp +++ b/hphp/hack/test/full_fidelity/cases/test_class_method_declaration.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(classish_declaration(missing)(missing)((class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(list((whitespace)(public)(whitespace))((static)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(list((whitespace)(public)(whitespace))((abstract)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(missing)((;)(end_of_line)))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(list((public)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(list((public)(whitespace))((static)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing)))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(classish_declaration(missing)(missing)((class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(function_declaration_header(list((whitespace)(public)(whitespace))((static)(whitespace)))((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(function_declaration_header(list((whitespace)(public)(whitespace))((abstract)(whitespace)))((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(missing)((;)(end_of_line)))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(function_declaration_header(list((public)(whitespace)))((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(function_declaration_header(list((public)(whitespace))((static)(whitespace)))((function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing)))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_closure_type.exp b/hphp/hack/test/full_fidelity/cases/test_closure_type.exp dissimilarity index 96% index 1229e8a4847..9ce946d0683 100644 --- a/hphp/hack/test/full_fidelity/cases/test_closure_type.exp +++ b/hphp/hack/test/full_fidelity/cases/test_closure_type.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(closure_type_specifier((lparen))(missing)((function)(whitespace))((lparen))(list(list_item(closure_parameter_type_specifier(missing)(simple_type_specifier((int))))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((int)))((rparen)(whitespace)))((variable))(missing))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((int)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(function_call_expression(variable((variable)))((lparen))(list(list_item(literal((octal_literal)))(missing)))((rparen))))((;)(end_of_line)))(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(closure_type_specifier((lparen))(missing)((function)(whitespace))((lparen))(list(list_item(variadic_parameter(missing)(missing)((...)))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((int)))((rparen)(whitespace)))((variable))(missing))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((int)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(function_call_expression(variable((variable)))((lparen))(list(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))(missing)))((rparen)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(closure_type_specifier((lparen))(missing)((function)(whitespace))((lparen))(list(list_item(closure_parameter_type_specifier((inout)(whitespace))(simple_type_specifier((string))))((,)(whitespace)))(list_item(closure_parameter_type_specifier(missing)(simple_type_specifier((int))))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((void)))((rparen)(whitespace)))((variable))(missing))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((string)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((single_quoted_string_literal))))((;)(end_of_line)))(expression_statement(function_call_expression(variable((whitespace)(variable)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(literal((decimal_literal)))(missing)))((rparen)))((;)(end_of_line)))(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(closure_type_specifier((lparen))(missing)((function)(whitespace))((lparen))(list(list_item(closure_parameter_type_specifier(missing)(simple_type_specifier((int))))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((int)))((rparen)(whitespace)))((variable))(missing))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((int)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(function_call_expression(variable((variable)))((lparen))(list(list_item(literal((octal_literal)))(missing)))((rparen))))((;)(end_of_line)))(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(closure_type_specifier((lparen))(missing)((function)(whitespace))((lparen))(list(list_item(variadic_parameter(missing)(missing)((...)))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((int)))((rparen)(whitespace)))((variable))(missing))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((int)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(function_call_expression(variable((variable)))((lparen))(list(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))(missing)))((rparen)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(closure_type_specifier((lparen))(missing)((function)(whitespace))((lparen))(list(list_item(closure_parameter_type_specifier((inout)(whitespace))(simple_type_specifier((string))))((,)(whitespace)))(list_item(closure_parameter_type_specifier(missing)(simple_type_specifier((int))))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((void)))((rparen)(whitespace)))((variable))(missing))(missing)))((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((string)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((single_quoted_string_literal))))((;)(end_of_line)))(expression_statement(function_call_expression(variable((whitespace)(variable)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(literal((decimal_literal)))(missing)))((rparen)))((;)(end_of_line)))(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_constructor_destructor.exp b/hphp/hack/test/full_fidelity/cases/test_constructor_destructor.exp dissimilarity index 92% index df00c1e5d1d..6f29c38c896 100644 --- a/hphp/hack/test/full_fidelity/cases/test_constructor_destructor.exp +++ b/hphp/hack/test/full_fidelity/cases/test_constructor_destructor.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(classish_declaration(missing)(missing)((end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(list((whitespace)(private)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__construct))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable))(missing))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(list((whitespace)(public)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__construct))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable)(whitespace))(simple_initializer((=)(whitespace))(literal((null)))))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(list((whitespace)(public)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__construct))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable))(missing))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(list((whitespace)(private)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__construct))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable)(whitespace))(simple_initializer((=)(whitespace))(literal((null)))))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(list((public)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__construct)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable))(missing))(missing)))((rparen))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(list((public)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__construct)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable))(missing))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(list((whitespace)(public)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__construct)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)((public)(whitespace))(missing)(missing)((variable)(whitespace))(simple_initializer((=)(whitespace))(literal((null)))))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(list((whitespace)(public)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__destruct)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(list((public)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((__destruct)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing)))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(classish_declaration(missing)(missing)((end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(function_declaration_header(list((whitespace)(private)(whitespace)))((function)(whitespace))(missing)((__construct))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable))(missing))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(function_declaration_header(list((whitespace)(public)(whitespace)))((function)(whitespace))(missing)((__construct))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable)(whitespace))(simple_initializer((=)(whitespace))(literal((null)))))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(function_declaration_header(list((whitespace)(public)(whitespace)))((function)(whitespace))(missing)((__construct))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable))(missing))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(function_declaration_header(list((whitespace)(private)(whitespace)))((function)(whitespace))(missing)((__construct))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable)(whitespace))(simple_initializer((=)(whitespace))(literal((null)))))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(function_declaration_header(list((public)(whitespace)))((function)(whitespace))(missing)((__construct)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable))(missing))(missing)))((rparen))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(function_declaration_header(list((public)(whitespace)))((function)(whitespace))(missing)((__construct)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(missing)((variable))(missing))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(function_declaration_header(list((whitespace)(public)(whitespace)))((function)(whitespace))(missing)((__construct)(whitespace))(missing)((lparen))(list(list_item(parameter_declaration(missing)((public)(whitespace))(missing)(missing)((variable)(whitespace))(simple_initializer((=)(whitespace))(literal((null)))))(missing)))((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(missing)(function_declaration_header(list((whitespace)(public)(whitespace)))((function)(whitespace))(missing)((__destruct)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing))(methodish_declaration(attribute_specification((whitespace)(<<))(list(list_item(attribute((name))(missing)(missing)(missing))(missing)))((>>)(whitespace)))(function_declaration_header(list((public)(whitespace)))((function)(whitespace))(missing)((__destruct)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line)))(missing)))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_errors_method.exp b/hphp/hack/test/full_fidelity/cases/test_errors_method.exp index 539af6e57b1..78e801c6a0f 100644 --- a/hphp/hack/test/full_fidelity/cases/test_errors_method.exp +++ b/hphp/hack/test/full_fidelity/cases/test_errors_method.exp @@ -1,40 +1,40 @@ (3,1)-(25,1) Class E contains an abstract method and must therefore be declared abstract (4,3)-(4,16) A method declaration cannot have multiple visibility modifiers. (5,3)-(5,13) A method declaration cannot have duplicate modifiers. -(5,15)-(5,34) Redeclared method E::f +(5,3)-(5,34) Redeclared method E::f (6,3)-(6,23) A method cannot be both abstract and final. +(6,3)-(6,44) Redeclared method E::f (6,10)-(6,17) Classes cannot both contain abstract methods and be non-abstract. Either declare 'abstract class E', or make 'function f' non-abstract. -(6,25)-(6,44) Redeclared method E::f (7,3)-(7,18) A method cannot be both abstract and private. +(7,3)-(7,39) Redeclared method E::f (7,11)-(7,18) Classes cannot both contain abstract methods and be non-abstract. Either declare 'abstract class E', or make 'function f' non-abstract. -(7,20)-(7,39) Redeclared method E::f +(8,3)-(8,45) Redeclared method E::f (8,10)-(8,17) Classes cannot both contain abstract methods and be non-abstract. Either declare 'abstract class E', or make 'function f' non-abstract. -(8,26)-(8,45) Redeclared method E::f (8,47)-(8,48) An abstract method cannot have a method body. +(9,3)-(9,45) Redeclared method E::f (9,10)-(9,17) Classes cannot both contain abstract methods and be non-abstract. Either declare 'abstract class E', or make 'function f' non-abstract. -(9,26)-(9,45) Redeclared method E::f -(10,10)-(10,29) Redeclared method E::f +(10,3)-(10,29) Redeclared method E::f (10,31)-(10,31) A non-abstract method must have a body. (11,3)-(11,15) A constructor cannot be static. -(12,10)-(12,45) Redeclared method E::__construct +(12,3)-(12,45) Redeclared method E::__construct +(13,3)-(13,41) Redeclared method E::__construct (13,10)-(13,17) Classes cannot both contain abstract methods and be non-abstract. Either declare 'abstract class E', or make 'function __construct' non-abstract. -(13,19)-(13,41) Redeclared method E::__construct +(14,3)-(14,41) Redeclared method E::__construct (14,10)-(14,17) Classes cannot both contain abstract methods and be non-abstract. Either declare 'abstract class E', or make 'function __construct' non-abstract. -(14,19)-(14,41) Redeclared method E::__construct (14,43)-(14,44) An abstract method cannot have a method body. -(15,10)-(15,42) Redeclared method E::f +(15,3)-(15,42) Redeclared method E::f (15,22)-(15,34) Parameters cannot have visibility modifiers (except in parameter lists of constructors). (16,31)-(16,36) A destructor must have an empty parameter list. (17,3)-(17,8) A destructor can only have visibility modifiers. -(17,10)-(17,31) Redeclared method E::__destruct -(18,10)-(18,38) Redeclared method E::__construct +(17,3)-(17,31) Redeclared method E::__destruct +(18,3)-(18,38) Redeclared method E::__construct (18,36)-(18,38) A constructor or destructor cannot have a non-void type annotation. -(19,10)-(19,35) Redeclared method E::__destruct +(19,3)-(19,35) Redeclared method E::__destruct (19,35)-(19,35) A constructor or destructor cannot have a non-void type annotation. -(20,10)-(20,39) Redeclared method E::__construct -(21,10)-(21,38) Redeclared method E::__destruct -(22,10)-(22,32) Redeclared method E::f -(23,10)-(23,33) Redeclared method E::f +(20,3)-(20,39) Redeclared method E::__construct +(21,3)-(21,38) Redeclared method E::__destruct +(22,3)-(22,32) Redeclared method E::f +(23,3)-(23,33) Redeclared method E::f (23,25)-(23,25) A variadic parameter ('...') may not be followed by a comma. -(24,10)-(24,40) Redeclared method E::f +(24,3)-(24,40) Redeclared method E::f (24,22)-(24,24) A variadic parameter ('...') may only appear at the end of a parameter list. diff --git a/hphp/hack/test/full_fidelity/cases/test_for_statements.exp b/hphp/hack/test/full_fidelity/cases/test_for_statements.exp dissimilarity index 93% index 040d44327ad..614cfc18c7f 100644 --- a/hphp/hack/test/full_fidelity/cases/test_for_statements.exp +++ b/hphp/hack/test/full_fidelity/cases/test_for_statements.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((whitespace)(})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(missing)((;))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(missing)((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(missing)((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(missing)((;))(list(list_item(variable((variable)))(missing)))((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(missing)((;))(missing)((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((;))(missing)((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(missing)((;))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line)))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((whitespace)(})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(missing)((;))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(missing)((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(list(list_item(variable((variable)))(missing)))((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))(missing)))((;))(missing)((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(missing)((;))(list(list_item(variable((variable)))(missing)))((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(missing)((;))(missing)((;))(list(list_item(variable((variable)))(missing)))((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((;))(missing)((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line))))(for_statement((whitespace)(for))((lparen))(missing)((;))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((;))(missing)((rparen)(whitespace))(compound_statement(({))(missing)((})(end_of_line)))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_foreach_statements.exp b/hphp/hack/test/full_fidelity/cases/test_foreach_statements.exp dissimilarity index 87% index 358cd0f9e22..95132e83278 100644 --- a/hphp/hack/test/full_fidelity/cases/test_foreach_statements.exp +++ b/hphp/hack/test/full_fidelity/cases/test_foreach_statements.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))(missing)((as)(whitespace))(missing)(missing)(variable((variable)))((rparen))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line))))(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))(missing)((as)(whitespace))(variable((variable)(whitespace)))((=>)(whitespace))(variable((variable)))((rparen))(compound_statement(({)(end_of_line))(list(expression_statement(postfix_unary_expression(variable((whitespace)(variable)))((++)))((;)(end_of_line))))((whitespace)(})(end_of_line))))(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))((await)(whitespace))((as)(whitespace))(missing)(missing)(variable((variable)))((rparen))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line))))(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))((await)(whitespace))((as)(whitespace))(variable((variable)(whitespace)))((=>)(whitespace))(variable((variable)))((rparen))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))(missing)((as)(whitespace))(missing)(missing)(variable((variable)))((rparen))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line))))(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))(missing)((as)(whitespace))(variable((variable)(whitespace)))((=>)(whitespace))(variable((variable)))((rparen))(compound_statement(({)(end_of_line))(list(expression_statement(postfix_unary_expression(variable((whitespace)(variable)))((++)))((;)(end_of_line))))((whitespace)(})(end_of_line))))(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))((await)(whitespace))((as)(whitespace))(missing)(missing)(variable((variable)))((rparen))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line))))(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))((await)(whitespace))((as)(whitespace))(variable((variable)(whitespace)))((=>)(whitespace))(variable((variable)))((rparen))(compound_statement(({)(end_of_line))(missing)((whitespace)(})(end_of_line)))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_function_call.exp b/hphp/hack/test/full_fidelity/cases/test_function_call.exp dissimilarity index 92% index 71c76cfef84..2dcc61f8ea2 100644 --- a/hphp/hack/test/full_fidelity/cases/test_function_call.exp +++ b/hphp/hack/test/full_fidelity/cases/test_function_call.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(variable((variable)))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(member_selection_expression(function_call_expression(qualified_name((whitespace)(name)))((lparen))(missing)((rparen)(whitespace)))((->)(whitespace))((name)))((;)(end_of_line)))(expression_statement(binary_expression(function_call_expression(qualified_name((whitespace)(name)))((lparen))(missing)((rparen)(whitespace)))((+)(whitespace))(literal((decimal_literal))))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(variable((variable)))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(member_selection_expression(function_call_expression(qualified_name((whitespace)(name)))((lparen))(missing)((rparen)(whitespace)))((->)(whitespace))((name)))((;)(end_of_line)))(expression_statement(binary_expression(function_call_expression(qualified_name((whitespace)(name)))((lparen))(missing)((rparen)(whitespace)))((+)(whitespace))(literal((decimal_literal))))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_inout_params.exp b/hphp/hack/test/full_fidelity/cases/test_inout_params.exp dissimilarity index 97% index aa151f91e7c..55e87bb7653 100644 --- a/hphp/hack/test/full_fidelity/cases/test_inout_params.exp +++ b/hphp/hack/test/full_fidelity/cases/test_inout_params.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))(missing)))((>)))((lparen))(list(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(simple_type_specifier((name)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({))(missing)((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(simple_type_specifier((int)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((+=)(whitespace))(literal((decimal_literal))))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))(missing)))((>)))((lparen))(list(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(simple_type_specifier((name)(whitespace)))((variable))(missing))((,)(whitespace)))(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(simple_type_specifier((name)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))(missing)))((>)))((lparen))(list(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(vector_type_specifier((vec))((<))(simple_type_specifier((name)))(missing)((>)(whitespace)))((variable))(missing))((,)(whitespace)))(list_item(parameter_declaration(missing)(missing)(missing)(generic_type_specifier((name))(type_arguments((<))(list(list_item(simple_type_specifier((name)))(missing)))((>)(whitespace))))((variable))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((bool)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(if_statement((whitespace)(if)(whitespace))((lparen))(prefix_unary_expression((!))(variable((variable))))((rparen)(whitespace))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(literal((boolean_literal)))((;)(end_of_line))))((whitespace)(})(end_of_line)))(missing)(missing))(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))(missing)((as)(whitespace))(missing)(missing)(variable((variable)))((rparen)(whitespace))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(subscript_expression(variable((whitespace)(variable)))(([))(missing)((])(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line))))((whitespace)(})(end_of_line))))(return_statement((whitespace)(return)(whitespace))(literal((boolean_literal)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen)(end_of_line))(list(list_item(parameter_declaration(missing)(missing)(missing)(closure_type_specifier((whitespace)(lparen))(missing)((function))((lparen))(list(list_item(closure_parameter_type_specifier((inout)(whitespace))(vector_type_specifier((vec))((<))(simple_type_specifier((int)))(missing)((>))))((,)(whitespace)))(list_item(closure_parameter_type_specifier(missing)(generic_type_specifier((name))(type_arguments((<))(list(list_item(simple_type_specifier((int)))(missing)))((>)))))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((mixed)))((rparen)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)((whitespace)(inout)(whitespace))(vector_type_specifier((vec))((<))(simple_type_specifier((int)))(missing)((>)(whitespace)))((variable))(missing))((,)(end_of_line))))((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(function_call_expression(variable((whitespace)(variable)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(keyset_intrinsic_expression((keyset))(([))(list(list_item(literal((decimal_literal)))(missing)))((])))(missing)))((rparen)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen)(end_of_line))(list(list_item(parameter_declaration(missing)(missing)(missing)(simple_type_specifier((whitespace)(int)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)(missing)(simple_type_specifier((whitespace)(string)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)((whitespace)(inout)(whitespace))(simple_type_specifier((arraykey)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)((whitespace)(inout)(whitespace))(dictionary_type_specifier((dict))((<))(list(list_item(simple_type_specifier((int)))((,)(whitespace)))(list_item(vector_type_specifier((vec))((<))(simple_type_specifier((string)))(missing)((>)))(missing)))((>)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)((whitespace)(inout)(whitespace))(simple_type_specifier((bool)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)(missing)(simple_type_specifier((whitespace)(int)(whitespace)))(decorated_expression((...))((variable)(end_of_line)))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((bool)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(literal((boolean_literal)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((single_quoted_string_literal))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((boolean_literal))))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((end_of_line)(whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((end_of_line)(whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(prefix_unary_expression((&))(variable((variable))))((,)(whitespace)))(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(prefix_unary_expression((&))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(prefix_unary_expression((&))(variable((variable))))((,)(whitespace)))(list_item(prefix_unary_expression((&))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(binary_expression(variable((end_of_line)(whitespace)(variable)(whitespace)))((=)(whitespace))(vector_intrinsic_expression((vec))(([))(missing)((]))))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(vector_intrinsic_expression((vec))(([))(list(list_item(literal((octal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))(missing)))((])))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(prefix_unary_expression((&))(variable((variable))))((,)(whitespace)))(list_item(dictionary_intrinsic_expression((dict))(([))(list(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((decimal_literal))))((,)(whitespace)))(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((decimal_literal))))(missing)))((])))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(function_call_expression(qualified_name((name)))((lparen))(list(list_item(literal((single_quoted_string_literal)))(missing)))((rparen)))((,)(whitespace)))(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(binary_expression(variable((end_of_line)(whitespace)(variable)(whitespace)))((=)(whitespace))(dictionary_intrinsic_expression((dict))(([))(list(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(dictionary_intrinsic_expression((dict))(([))(list(list_item(element_initializer(literal((decimal_literal)(whitespace)))((=>)(whitespace))(vector_intrinsic_expression((vec))(([))(list(list_item(literal((single_quoted_string_literal)))(missing)))((]))))(missing)))((]))))(missing)))((]))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(lambda_expression(missing)(missing)(lambda_signature((lparen))(missing)((rparen)(whitespace))(missing)(missing))((==>)(whitespace))(literal((single_quoted_string_literal)))))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen)(end_of_line))(list(list_item(literal((whitespace)(decimal_literal)))((,)(end_of_line)))(list_item(literal((whitespace)(single_quoted_string_literal)))((,)(end_of_line)))(list_item(decorated_expression((whitespace)(inout)(whitespace))(variable((variable))))((,)(end_of_line)))(list_item(decorated_expression((whitespace)(inout)(whitespace))(subscript_expression(variable((variable)))(([))(function_call_expression(variable((variable)))((lparen))(missing)((rparen)))((]))))((,)(end_of_line)))(list_item(decorated_expression((whitespace)(inout)(whitespace))(variable((variable))))((,)(end_of_line)))(list_item(subscript_expression(variable((whitespace)(variable)))(([))(literal((octal_literal)))((])))((,)(end_of_line)))(list_item(decorated_expression((whitespace)(...))(variable((variable)(end_of_line))))(missing)))((whitespace)(rparen)))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))(missing)))((>)))((lparen))(list(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(simple_type_specifier((name)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({))(missing)((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(simple_type_specifier((int)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((+=)(whitespace))(literal((decimal_literal))))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))(missing)))((>)))((lparen))(list(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(simple_type_specifier((name)(whitespace)))((variable))(missing))((,)(whitespace)))(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(simple_type_specifier((name)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))(missing)))((>)))((lparen))(list(list_item(parameter_declaration(missing)(missing)((inout)(whitespace))(vector_type_specifier((vec))((<))(simple_type_specifier((name)))(missing)((>)(whitespace)))((variable))(missing))((,)(whitespace)))(list_item(parameter_declaration(missing)(missing)(missing)(generic_type_specifier((name))(type_arguments((<))(list(list_item(simple_type_specifier((name)))(missing)))((>)(whitespace))))((variable))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((bool)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(if_statement((whitespace)(if)(whitespace))((lparen))(prefix_unary_expression((!))(variable((variable))))((rparen)(whitespace))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(literal((boolean_literal)))((;)(end_of_line))))((whitespace)(})(end_of_line)))(missing)(missing))(foreach_statement((whitespace)(foreach)(whitespace))((lparen))(variable((variable)(whitespace)))(missing)((as)(whitespace))(missing)(missing)(variable((variable)))((rparen)(whitespace))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(subscript_expression(variable((whitespace)(variable)))(([))(missing)((])(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line))))((whitespace)(})(end_of_line))))(return_statement((whitespace)(return)(whitespace))(literal((boolean_literal)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen)(end_of_line))(list(list_item(parameter_declaration(missing)(missing)(missing)(closure_type_specifier((whitespace)(lparen))(missing)((function))((lparen))(list(list_item(closure_parameter_type_specifier((inout)(whitespace))(vector_type_specifier((vec))((<))(simple_type_specifier((int)))(missing)((>))))((,)(whitespace)))(list_item(closure_parameter_type_specifier(missing)(generic_type_specifier((name))(type_arguments((<))(list(list_item(simple_type_specifier((int)))(missing)))((>)))))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((mixed)))((rparen)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)((whitespace)(inout)(whitespace))(vector_type_specifier((vec))((<))(simple_type_specifier((int)))(missing)((>)(whitespace)))((variable))(missing))((,)(end_of_line))))((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(function_call_expression(variable((whitespace)(variable)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(keyset_intrinsic_expression((keyset))(([))(list(list_item(literal((decimal_literal)))(missing)))((])))(missing)))((rparen)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen)(end_of_line))(list(list_item(parameter_declaration(missing)(missing)(missing)(simple_type_specifier((whitespace)(int)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)(missing)(simple_type_specifier((whitespace)(string)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)((whitespace)(inout)(whitespace))(simple_type_specifier((arraykey)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)((whitespace)(inout)(whitespace))(dictionary_type_specifier((dict))((<))(list(list_item(simple_type_specifier((int)))((,)(whitespace)))(list_item(vector_type_specifier((vec))((<))(simple_type_specifier((string)))(missing)((>)))(missing)))((>)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)((whitespace)(inout)(whitespace))(simple_type_specifier((bool)(whitespace)))((variable))(missing))((,)(end_of_line)))(list_item(parameter_declaration(missing)(missing)(missing)(simple_type_specifier((whitespace)(int)(whitespace)))(decorated_expression((...))((variable)(end_of_line)))(missing))(missing)))((rparen))((:)(whitespace))(simple_type_specifier((bool)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(literal((boolean_literal)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((single_quoted_string_literal))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((boolean_literal))))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((end_of_line)(whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((end_of_line)(whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(prefix_unary_expression((&))(variable((variable))))((,)(whitespace)))(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(prefix_unary_expression((&))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(prefix_unary_expression((&))(variable((variable))))((,)(whitespace)))(list_item(prefix_unary_expression((&))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(binary_expression(variable((end_of_line)(whitespace)(variable)(whitespace)))((=)(whitespace))(vector_intrinsic_expression((vec))(([))(missing)((]))))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(decorated_expression((inout)(whitespace))(variable((variable))))((,)(whitespace)))(list_item(vector_intrinsic_expression((vec))(([))(list(list_item(literal((octal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((decimal_literal)))(missing)))((])))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(prefix_unary_expression((&))(variable((variable))))((,)(whitespace)))(list_item(dictionary_intrinsic_expression((dict))(([))(list(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((decimal_literal))))((,)(whitespace)))(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((decimal_literal))))(missing)))((])))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen))(list(list_item(function_call_expression(qualified_name((name)))((lparen))(list(list_item(literal((single_quoted_string_literal)))(missing)))((rparen)))((,)(whitespace)))(list_item(decorated_expression((inout)(whitespace))(variable((variable))))(missing)))((rparen)))((;)(end_of_line)))(expression_statement(binary_expression(variable((end_of_line)(whitespace)(variable)(whitespace)))((=)(whitespace))(dictionary_intrinsic_expression((dict))(([))(list(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(dictionary_intrinsic_expression((dict))(([))(list(list_item(element_initializer(literal((decimal_literal)(whitespace)))((=>)(whitespace))(vector_intrinsic_expression((vec))(([))(list(list_item(literal((single_quoted_string_literal)))(missing)))((]))))(missing)))((]))))(missing)))((]))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(lambda_expression(missing)(missing)(lambda_signature((lparen))(missing)((rparen)(whitespace))(missing)(missing))((==>)(whitespace))(literal((single_quoted_string_literal)))))((;)(end_of_line)))(expression_statement(function_call_expression(qualified_name((whitespace)(name)))((lparen)(end_of_line))(list(list_item(literal((whitespace)(decimal_literal)))((,)(end_of_line)))(list_item(literal((whitespace)(single_quoted_string_literal)))((,)(end_of_line)))(list_item(decorated_expression((whitespace)(inout)(whitespace))(variable((variable))))((,)(end_of_line)))(list_item(decorated_expression((whitespace)(inout)(whitespace))(subscript_expression(variable((variable)))(([))(function_call_expression(variable((variable)))((lparen))(missing)((rparen)))((]))))((,)(end_of_line)))(list_item(decorated_expression((whitespace)(inout)(whitespace))(variable((variable))))((,)(end_of_line)))(list_item(subscript_expression(variable((whitespace)(variable)))(([))(literal((octal_literal)))((])))((,)(end_of_line)))(list_item(decorated_expression((whitespace)(...))(variable((variable)(end_of_line))))(missing)))((whitespace)(rparen)))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_list_expression.exp b/hphp/hack/test/full_fidelity/cases/test_list_expression.exp dissimilarity index 90% index 32262251a73..304fa6db3ad 100644 --- a/hphp/hack/test/full_fidelity/cases/test_list_expression.exp +++ b/hphp/hack/test/full_fidelity/cases/test_list_expression.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(simple_type_specifier((name)(whitespace)))((variable))(missing))(missing)))((rparen))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(list_expression((whitespace)(list))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((rparen)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line)))(expression_statement(binary_expression(list_expression((whitespace)(list))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(list_expression((list))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((rparen)))(missing)))((rparen)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line)))(expression_statement(binary_expression(list_expression((whitespace)(list))((lparen))(list(list_item(missing)((,)))(list_item(missing)((,)))(list_item(variable((variable)))((,)))(list_item(missing)((,)))(list_item(missing)(missing)))((rparen)(whitespace)))((=)(whitespace))(variable((variable))))((;)(whitespace)(single_line_comment)(end_of_line))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(simple_type_specifier((name)(whitespace)))((variable))(missing))(missing)))((rparen))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(list_expression((whitespace)(list))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((rparen)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line)))(expression_statement(binary_expression(list_expression((whitespace)(list))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(list_expression((list))((lparen))(list(list_item(variable((variable)))((,)(whitespace)))(list_item(variable((variable)))(missing)))((rparen)))(missing)))((rparen)(whitespace)))((=)(whitespace))(variable((variable))))((;)(end_of_line)))(expression_statement(binary_expression(list_expression((whitespace)(list))((lparen))(list(list_item(missing)((,)))(list_item(missing)((,)))(list_item(variable((variable)))((,)))(list_item(missing)((,)))(list_item(missing)(missing)))((rparen)(whitespace)))((=)(whitespace))(variable((variable))))((;)(whitespace)(single_line_comment)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_list_precedence.exp b/hphp/hack/test/full_fidelity/cases/test_list_precedence.exp dissimilarity index 94% index ac9ddadfe79..5e9d1ab3896 100644 --- a/hphp/hack/test/full_fidelity/cases/test_list_precedence.exp +++ b/hphp/hack/test/full_fidelity/cases/test_list_precedence.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((+=)(whitespace))(binary_expression(variable((variable)(whitespace)))((+)(whitespace))(list_expression((list)(whitespace))((lparen))(list(list_item(binary_expression(variable((variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))(missing)))((rparen)))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((+=)(whitespace))(binary_expression(variable((variable)(whitespace)))((+)(whitespace))(list_expression((list)(whitespace))((lparen))(list(list_item(binary_expression(variable((variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))((,)(whitespace)))(list_item(prefix_unary_expression((await)(whitespace))(binary_expression(variable((variable)(whitespace)))((=)(whitespace))(literal((decimal_literal)))))(missing)))((rparen)))))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((+=)(whitespace))(binary_expression(variable((variable)(whitespace)))((+)(whitespace))(list_expression((list)(whitespace))((lparen))(list(list_item(binary_expression(variable((variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))(missing)))((rparen)))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((+=)(whitespace))(binary_expression(variable((variable)(whitespace)))((+)(whitespace))(list_expression((list)(whitespace))((lparen))(list(list_item(binary_expression(variable((variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))((,)(whitespace)))(list_item(prefix_unary_expression((await)(whitespace))(binary_expression(variable((variable)(whitespace)))((=)(whitespace))(literal((decimal_literal)))))(missing)))((rparen)))))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_literals.exp b/hphp/hack/test/full_fidelity/cases/test_literals.exp dissimilarity index 90% index a9863f3237e..a961e8574f9 100644 --- a/hphp/hack/test/full_fidelity/cases/test_literals.exp +++ b/hphp/hack/test/full_fidelity/cases/test_literals.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(end_of_line))(literal((heredoc_string_literal))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(end_of_line))(literal((nowdoc_string_literal)(end_of_line))))((;)(end_of_line))))((end_of_line)(})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(end_of_line))(literal((heredoc_string_literal))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(end_of_line))(literal((nowdoc_string_literal)(end_of_line))))((;)(end_of_line))))((end_of_line)(})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_namespace.exp b/hphp/hack/test/full_fidelity/cases/test_namespace.exp dissimilarity index 66% index c8c2568df5d..bc5014debe4 100644 --- a/hphp/hack/test/full_fidelity/cases/test_namespace.exp +++ b/hphp/hack/test/full_fidelity/cases/test_namespace.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(namespace_declaration((namespace)(whitespace))(missing)(namespace_body(({))(missing)((})(end_of_line))))(namespace_declaration((namespace)(whitespace))((name)(whitespace))(namespace_body(({))(missing)((})(end_of_line))))(namespace_declaration((namespace)(whitespace))((name))(namespace_empty_body((;)(end_of_line))))(namespace_declaration((namespace)(whitespace))((name)(whitespace))(namespace_body(({)(end_of_line))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((whitespace)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line))))(classish_declaration(missing)(missing)((whitespace)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({))(missing)((})(end_of_line)))))((})(end_of_line))))(namespace_declaration((namespace)(whitespace))(missing)(namespace_body(({)(end_of_line))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((whitespace)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line))))(classish_declaration(missing)(missing)((whitespace)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({))(missing)((})(end_of_line)))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(namespace_declaration((namespace)(whitespace))(missing)(namespace_body(({))(missing)((})(end_of_line))))(namespace_declaration((namespace)(whitespace))((name)(whitespace))(namespace_body(({))(missing)((})(end_of_line))))(namespace_declaration((namespace)(whitespace))((name))(namespace_empty_body((;)(end_of_line))))(namespace_declaration((namespace)(whitespace))((name)(whitespace))(namespace_body(({)(end_of_line))(list(function_declaration(missing)(function_declaration_header(missing)((whitespace)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line))))(classish_declaration(missing)(missing)((whitespace)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({))(missing)((})(end_of_line)))))((})(end_of_line))))(namespace_declaration((namespace)(whitespace))(missing)(namespace_body(({)(end_of_line))(list(function_declaration(missing)(function_declaration_header(missing)((whitespace)(function)(whitespace))(missing)((name)(whitespace))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({))(missing)((})(end_of_line))))(classish_declaration(missing)(missing)((whitespace)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({))(missing)((})(end_of_line)))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_simple.exp b/hphp/hack/test/full_fidelity/cases/test_simple.exp dissimilarity index 91% index 2e043d7696d..4c11d0b4d99 100644 --- a/hphp/hack/test/full_fidelity/cases/test_simple.exp +++ b/hphp/hack/test/full_fidelity/cases/test_simple.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((delimited_comment)(whitespace)(function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((single_line_comment)(end_of_line)(whitespace)(variable)(end_of_line)))((whitespace)(=)(whitespace))(binary_expression(parenthesized_expression((lparen))(binary_expression(literal((decimal_literal)(whitespace)))((+)(whitespace))(variable((variable))))((rparen)(whitespace)))((*)(whitespace))(variable((variable)))))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((delimited_comment)(whitespace)(function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((single_line_comment)(end_of_line)(whitespace)(variable)(end_of_line)))((whitespace)(=)(whitespace))(binary_expression(parenthesized_expression((lparen))(binary_expression(literal((decimal_literal)(whitespace)))((+)(whitespace))(variable((variable))))((rparen)(whitespace)))((*)(whitespace))(variable((variable)))))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_spaces_preserved_in_string_containing_expression.exp b/hphp/hack/test/full_fidelity/cases/test_spaces_preserved_in_string_containing_expression.exp dissimilarity index 92% index b3421cd368e..bac6b2ebef0 100644 --- a/hphp/hack/test/full_fidelity/cases/test_spaces_preserved_in_string_containing_expression.exp +++ b/hphp/hack/test/full_fidelity/cases/test_spaces_preserved_in_string_containing_expression.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal(list((double_quoted_string_literal_head))(($))(embedded_braced_expression(({))((name))((})))((string_literal_body))(embedded_braced_expression(({))(variable((variable)))((})))((double_quoted_string_literal_tail)))))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal((decimal_literal))))((;)(end_of_line)))(expression_statement(binary_expression(variable((whitespace)(variable)(whitespace)))((=)(whitespace))(literal(list((double_quoted_string_literal_head))(($))(embedded_braced_expression(({))((name))((})))((string_literal_body))(embedded_braced_expression(({))(variable((variable)))((})))((double_quoted_string_literal_tail)))))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_statements.exp b/hphp/hack/test/full_fidelity/cases/test_statements.exp dissimilarity index 96% index 8b772ebf5a3..ab8adf8394f 100644 --- a/hphp/hack/test/full_fidelity/cases/test_statements.exp +++ b/hphp/hack/test/full_fidelity/cases/test_statements.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(if_statement((whitespace)(if)(whitespace))((lparen))(variable((variable)))((rparen)(end_of_line))(if_statement((whitespace)(if)(whitespace))((lparen))(variable((variable)))((rparen)(end_of_line))(switch_statement((whitespace)(switch)(whitespace))((lparen))(variable((variable)))((rparen)(whitespace))(({)(end_of_line))(list(switch_section(list(case_label((whitespace)(case)(whitespace))(literal((decimal_literal)))((:)(whitespace))))(missing)(switch_fallthrough((fallthrough))((;)(whitespace)(single_line_comment)(end_of_line))))(switch_section(list(default_label((whitespace)(default))((:)(whitespace))))(list(break_statement((break))(missing)((;)(end_of_line))))(missing)))((whitespace)(})(end_of_line)))(missing)(else_clause((whitespace)(else)(end_of_line))(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line)))))(list(elseif_clause((whitespace)(elseif))((lparen))(variable((variable)))((rparen)(end_of_line))(do_statement((whitespace)(do)(whitespace))(compound_statement(({)(end_of_line))(list(while_statement((whitespace)(while))((lparen))(variable((variable)))((rparen)(end_of_line))(throw_statement((whitespace)(throw)(whitespace))(variable((variable)))((;)(end_of_line))))(continue_statement((whitespace)(continue))(missing)((;)(end_of_line))))((whitespace)(})(whitespace)))((while)(whitespace))((lparen))(variable((variable)))((rparen))((;)(end_of_line)))))(missing)))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen)(whitespace))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(if_statement((whitespace)(if)(whitespace))((lparen))(variable((variable)))((rparen)(end_of_line))(if_statement((whitespace)(if)(whitespace))((lparen))(variable((variable)))((rparen)(end_of_line))(switch_statement((whitespace)(switch)(whitespace))((lparen))(variable((variable)))((rparen)(whitespace))(({)(end_of_line))(list(switch_section(list(case_label((whitespace)(case)(whitespace))(literal((decimal_literal)))((:)(whitespace))))(missing)(switch_fallthrough((fallthrough))((;)(whitespace)(single_line_comment)(end_of_line))))(switch_section(list(default_label((whitespace)(default))((:)(whitespace))))(list(break_statement((break))(missing)((;)(end_of_line))))(missing)))((whitespace)(})(end_of_line)))(missing)(else_clause((whitespace)(else)(end_of_line))(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line)))))(list(elseif_clause((whitespace)(elseif))((lparen))(variable((variable)))((rparen)(end_of_line))(do_statement((whitespace)(do)(whitespace))(compound_statement(({)(end_of_line))(list(while_statement((whitespace)(while))((lparen))(variable((variable)))((rparen)(end_of_line))(throw_statement((whitespace)(throw)(whitespace))(variable((variable)))((;)(end_of_line))))(continue_statement((whitespace)(continue))(missing)((;)(end_of_line))))((whitespace)(})(whitespace)))((while)(whitespace))((lparen))(variable((variable)))((rparen))((;)(end_of_line)))))(missing)))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_trailing_commas.exp b/hphp/hack/test/full_fidelity/cases/test_trailing_commas.exp dissimilarity index 84% index fc9a5bf4c20..4cf17a56ada 100644 --- a/hphp/hack/test/full_fidelity/cases/test_trailing_commas.exp +++ b/hphp/hack/test/full_fidelity/cases/test_trailing_commas.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(classish_declaration(missing)(missing)((end_of_line)(delimited_comment)(end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(missing)((})(end_of_line))))(classish_declaration(missing)(missing)((end_of_line)(class)(whitespace))((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))((,))))((>)(whitespace)))(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(missing)((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(dictionary_type_specifier((dict))((<))(list(list_item(simple_type_specifier((int)))((,)))(list_item(simple_type_specifier((name)))((,))))((>)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(dictionary_type_specifier((dict))((<)(end_of_line))(list(list_item(simple_type_specifier((whitespace)(int)))((,)(end_of_line)))(list_item(simple_type_specifier((whitespace)(name)))((,)(end_of_line))))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(keyset_type_specifier((keyset))((<))(simple_type_specifier((int)))((,))((>)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(keyset_type_specifier((keyset))((<)(end_of_line))(simple_type_specifier((whitespace)(int)))((,)(end_of_line))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(vector_type_specifier((vec))((<))(simple_type_specifier((name)))((,))((>)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(vector_type_specifier((vec))((<)(end_of_line))(simple_type_specifier((whitespace)(name)))((,)(end_of_line))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(generic_type_specifier((name))(type_arguments((<))(list(list_item(simple_type_specifier((name)))((,))))((>)(whitespace))))((variable))(missing))(missing)))((rparen))((:)(whitespace))(generic_type_specifier((name))(type_arguments((<)(end_of_line))(list(list_item(simple_type_specifier((whitespace)(name)))((,)(end_of_line))))((>)(whitespace))))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)(missing)((end_of_line)(function)(whitespace))(missing)((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))(missing)))((>)))((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(classname_type_specifier((classname))((<))(simple_type_specifier((name)))((,))((>)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(classname_type_specifier((classname))((<)(end_of_line))(simple_type_specifier((whitespace)(name)))((,)(end_of_line))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})))))) +(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(classish_declaration(missing)(missing)((end_of_line)(delimited_comment)(end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(missing)((})(end_of_line))))(classish_declaration(missing)(missing)((end_of_line)(class)(whitespace))((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))((,))))((>)(whitespace)))(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(missing)((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(dictionary_type_specifier((dict))((<))(list(list_item(simple_type_specifier((int)))((,)))(list_item(simple_type_specifier((name)))((,))))((>)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(dictionary_type_specifier((dict))((<)(end_of_line))(list(list_item(simple_type_specifier((whitespace)(int)))((,)(end_of_line)))(list_item(simple_type_specifier((whitespace)(name)))((,)(end_of_line))))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(keyset_type_specifier((keyset))((<))(simple_type_specifier((int)))((,))((>)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(keyset_type_specifier((keyset))((<)(end_of_line))(simple_type_specifier((whitespace)(int)))((,)(end_of_line))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(vector_type_specifier((vec))((<))(simple_type_specifier((name)))((,))((>)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(vector_type_specifier((vec))((<)(end_of_line))(simple_type_specifier((whitespace)(name)))((,)(end_of_line))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(generic_type_specifier((name))(type_arguments((<))(list(list_item(simple_type_specifier((name)))((,))))((>)(whitespace))))((variable))(missing))(missing)))((rparen))((:)(whitespace))(generic_type_specifier((name))(type_arguments((<)(end_of_line))(list(list_item(simple_type_specifier((whitespace)(name)))((,)(end_of_line))))((>)(whitespace))))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})(end_of_line))))(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(type_parameters((<))(list(list_item(type_parameter(missing)((name))(missing))(missing)))((>)))((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(classname_type_specifier((classname))((<))(simple_type_specifier((name)))((,))((>)(whitespace)))((variable))(missing))(missing)))((rparen))((:)(whitespace))(classname_type_specifier((classname))((<)(end_of_line))(simple_type_specifier((whitespace)(name)))((,)(end_of_line))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(variable((variable)))((;)(end_of_line))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_try_statement.exp b/hphp/hack/test/full_fidelity/cases/test_try_statement.exp dissimilarity index 93% index 74f2348ab26..9f2b87281d1 100644 --- a/hphp/hack/test/full_fidelity/cases/test_try_statement.exp +++ b/hphp/hack/test/full_fidelity/cases/test_try_statement.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(try_statement((whitespace)(try)(whitespace))(compound_statement(({)(end_of_line))(list(expression_statement(postfix_unary_expression(variable((whitespace)(variable)))((++)))((;)(end_of_line))))((whitespace)(})(end_of_line)))(list(catch_clause((whitespace)(catch)(whitespace))((lparen))(simple_type_specifier((name)(whitespace)))((variable))((rparen))(compound_statement(({)(end_of_line))(list(expression_statement(variable((whitespace)(variable)))((;)(end_of_line))))((whitespace)(})(end_of_line)))))(finally_clause((whitespace)(finally)(whitespace))(compound_statement(({)(end_of_line))(list(expression_statement(variable((whitespace)(variable)))((;)(end_of_line))))((whitespace)(})(end_of_line))))))((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))(missing)(missing)(missing))(compound_statement(({)(end_of_line))(list(try_statement((whitespace)(try)(whitespace))(compound_statement(({)(end_of_line))(list(expression_statement(postfix_unary_expression(variable((whitespace)(variable)))((++)))((;)(end_of_line))))((whitespace)(})(end_of_line)))(list(catch_clause((whitespace)(catch)(whitespace))((lparen))(simple_type_specifier((name)(whitespace)))((variable))((rparen))(compound_statement(({)(end_of_line))(list(expression_statement(variable((whitespace)(variable)))((;)(end_of_line))))((whitespace)(})(end_of_line)))))(finally_clause((whitespace)(finally)(whitespace))(compound_statement(({)(end_of_line))(list(expression_statement(variable((whitespace)(variable)))((;)(end_of_line))))((whitespace)(})(end_of_line))))))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_tuple_type_keyword.exp b/hphp/hack/test/full_fidelity/cases/test_tuple_type_keyword.exp dissimilarity index 94% index 090efb263c8..9d0c1219de0 100644 --- a/hphp/hack/test/full_fidelity/cases/test_tuple_type_keyword.exp +++ b/hphp/hack/test/full_fidelity/cases/test_tuple_type_keyword.exp @@ -1,18 +1 @@ -(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line))) - (list(classish_declaration(missing)(missing)((end_of_line)(class)(whitespace)) - ((name)(whitespace))(missing)(missing)(missing)(missing)(missing) - (classish_body(({)(end_of_line))(list - (methodish_declaration(missing)(list((whitespace)(public)(whitespace))) - (function_declaration_header(missing)(missing)((function)(whitespace)) - (missing)((name))(missing)((lparen))(missing)((rparen)) - ((:)(whitespace)) - (tuple_type_explicit_specifier((tuple))((<))(list - (list_item(simple_type_specifier((int)))((,))) - (list_item(simple_type_specifier((string)))(missing)) - )((>)(whitespace)))(missing))(compound_statement(({)(end_of_line)) - (list(return_statement((whitespace)(return)(whitespace)) - (tuple_expression((tuple))((lparen))(list(list_item(literal - ((decimal_literal)))((,)(whitespace)))(list_item(literal - ((single_quoted_string_literal)))(missing)))((rparen)) - )((;)(end_of_line))))((whitespace)(})(end_of_line)))(missing) - ))((})))))) +(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(classish_declaration(missing)(missing)((end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(function_declaration_header(list((whitespace)(public)(whitespace)))((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))((:)(whitespace))(tuple_type_explicit_specifier((tuple))((<))(list(list_item(simple_type_specifier((int)))((,)))(list_item(simple_type_specifier((string)))(missing)))((>)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(return_statement((whitespace)(return)(whitespace))(tuple_expression((tuple))((lparen))(list(list_item(literal((decimal_literal)))((,)(whitespace)))(list_item(literal((single_quoted_string_literal)))(missing)))((rparen)))((;)(end_of_line))))((whitespace)(})(end_of_line)))(missing)))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_types_type_const.exp b/hphp/hack/test/full_fidelity/cases/test_types_type_const.exp dissimilarity index 85% index 997ed50ce35..94899d7a6ec 100644 --- a/hphp/hack/test/full_fidelity/cases/test_types_type_const.exp +++ b/hphp/hack/test/full_fidelity/cases/test_types_type_const.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(type_constant(type_constant((self))((::))((name)))((::))((name)(whitespace)))((variable))(missing))(missing)))((rparen))(missing)(missing)(missing))(compound_statement(({))(missing)((})))))) +(script(header((<))((?))((name)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(type_constant(type_constant((self))((::))((name)))((::))((name)(whitespace)))((variable))(missing))(missing)))((rparen))(missing)(missing)(missing))(compound_statement(({))(missing)((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_variadic_type_hint.exp b/hphp/hack/test/full_fidelity/cases/test_variadic_type_hint.exp dissimilarity index 100% index 774cc9a15e9..2f52b110bad 100644 --- a/hphp/hack/test/full_fidelity/cases/test_variadic_type_hint.exp +++ b/hphp/hack/test/full_fidelity/cases/test_variadic_type_hint.exp @@ -1,18 +1 @@ -(script - (header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line))) - (list(function_declaration(missing)(function_declaration_header(missing) - (missing) - ((end_of_line)(function)(whitespace)) - (missing)((name))(missing)((lparen)) - (list(list_item( - parameter_declaration(missing)(missing)(missing)(error((function)))(missing)(missing) - )(missing))) - (missing)(missing)(missing)(missing)) - (compound_statement(missing)(list(expression_statement - (parenthesized_expression((lparen))((...))((rparen)))(missing)) - (expression_statement((rparen))(missing)) - (expression_statement((:)(whitespace))(missing)) - (expression_statement(collection_literal_expression( - simple_type_specifier((name)(whitespace)))(({))(missing)((})))(missing) - ) - )(missing))))) +(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(function_declaration(missing)(function_declaration_header(missing)((end_of_line)(function)(whitespace))(missing)((name))(missing)((lparen))(list(list_item(parameter_declaration(missing)(missing)(missing)(error((function)))(missing)(missing))(missing)))(missing)(missing)(missing)(missing))(compound_statement(missing)(list(expression_statement(parenthesized_expression((lparen))((...))((rparen)))(missing))(expression_statement((rparen))(missing))(expression_statement((:)(whitespace))(missing))(expression_statement(collection_literal_expression(simple_type_specifier((name)(whitespace)))(({))(missing)((})))(missing)))(missing))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_varray_darray_expressions.exp b/hphp/hack/test/full_fidelity/cases/test_varray_darray_expressions.exp dissimilarity index 77% index 35e4a88f6dd..bbfc7b3a2db 100644 --- a/hphp/hack/test/full_fidelity/cases/test_varray_darray_expressions.exp +++ b/hphp/hack/test/full_fidelity/cases/test_varray_darray_expressions.exp @@ -1 +1 @@ -(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(classish_declaration(missing)(missing)((single_line_comment)(end_of_line)(end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(list((whitespace)(private)(whitespace))((static)(whitespace)))(function_declaration_header(missing)(missing)((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(darray_intrinsic_expression((whitespace)(darray))(([))(list(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((octal_literal))))((,)(whitespace)))(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((decimal_literal))))((,)(whitespace)))(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((decimal_literal))))(missing)))((])))((;)(end_of_line)))(expression_statement(varray_intrinsic_expression((whitespace)(varray))(([))(list(list_item(literal((boolean_literal)))((,)(whitespace)))(list_item(literal((boolean_literal)))(missing)))((])))((;)(end_of_line))))((whitespace)(})(end_of_line)))(missing)))((})))))) +(script(header((<))((?))((name)(whitespace)(single_line_comment)(end_of_line)))(list(classish_declaration(missing)(missing)((single_line_comment)(end_of_line)(end_of_line)(class)(whitespace))((name)(whitespace))(missing)(missing)(missing)(missing)(missing)(classish_body(({)(end_of_line))(list(methodish_declaration(missing)(function_declaration_header(list((whitespace)(private)(whitespace))((static)(whitespace)))((function)(whitespace))(missing)((name))(missing)((lparen))(missing)((rparen))((:)(whitespace))(simple_type_specifier((void)(whitespace)))(missing))(compound_statement(({)(end_of_line))(list(expression_statement(darray_intrinsic_expression((whitespace)(darray))(([))(list(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((octal_literal))))((,)(whitespace)))(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((decimal_literal))))((,)(whitespace)))(list_item(element_initializer(literal((single_quoted_string_literal)(whitespace)))((=>)(whitespace))(literal((decimal_literal))))(missing)))((])))((;)(end_of_line)))(expression_statement(varray_intrinsic_expression((whitespace)(varray))(([))(list(list_item(literal((boolean_literal)))((,)(whitespace)))(list_item(literal((boolean_literal)))(missing)))((])))((;)(end_of_line))))((whitespace)(})(end_of_line)))(missing)))((})))))) diff --git a/hphp/hack/test/full_fidelity/cases/test_visibility_modifier_errors.exp b/hphp/hack/test/full_fidelity/cases/test_visibility_modifier_errors.exp index f6b3af06d7a..9888d4ddef5 100644 --- a/hphp/hack/test/full_fidelity/cases/test_visibility_modifier_errors.exp +++ b/hphp/hack/test/full_fidelity/cases/test_visibility_modifier_errors.exp @@ -2,9 +2,9 @@ (4,3)-(4,21) Method declarations require a visibility modifier such as public, private or protected. (6,3)-(6,9) Methods inside of interfaces may not be marked 'private'; only 'public' visibility is allowed. (7,3)-(7,11) Methods inside of interfaces may not be marked 'protected'; only 'public' visibility is allowed. -(8,16)-(8,34) Cannot redeclare i1() (previously declared in :4) -(9,23)-(9,41) Cannot redeclare i2() (previously declared in :5) +(8,3)-(8,34) Cannot redeclare i1() (previously declared in :4) +(9,3)-(9,41) Cannot redeclare i2() (previously declared in :5) +(10,3)-(10,42) Cannot redeclare i3() (previously declared in :6) (10,16)-(10,22) Methods inside of interfaces may not be marked 'private'; only 'public' visibility is allowed. -(10,24)-(10,42) Cannot redeclare i3() (previously declared in :6) +(11,3)-(11,44) Cannot redeclare i4() (previously declared in :7) (11,16)-(11,24) Methods inside of interfaces may not be marked 'protected'; only 'public' visibility is allowed. -(11,26)-(11,44) Cannot redeclare i4() (previously declared in :7) diff --git a/hphp/test/hhcodegen_failing_tests_slow b/hphp/test/hhcodegen_failing_tests_slow index 9113a6e7378..a084c7943ef 100644 --- a/hphp/test/hhcodegen_failing_tests_slow +++ b/hphp/test/hhcodegen_failing_tests_slow @@ -7,11 +7,10 @@ slow/hack_arr_compat/scalars.php slow/hh_namespace_migration/hh_vector5.php slow/inout/bad-call-15.php slow/inout/side-effects.php -slow/parser/async.php slow/parser/hh-namespace-conflict-2.php slow/parser/hh-namespace-conflict-3.php slow/parser/hh-namespace-conflict-6.php slow/parser/php-namespace-conflict-3.php slow/php7_backported/ns_093.php slow/reflection/param_tostring_zendcompat.php -slow/using/goto.php \ No newline at end of file +slow/using/goto.php -- 2.11.4.GIT