From b585ca878aa2e390c1fb8f831dd6e78c2aab8a3c Mon Sep 17 00:00:00 2001 From: Eric Lippert Date: Mon, 30 Jan 2017 22:56:17 -0800 Subject: [PATCH] Allow define as identifier Summary: The FF parser required "define" to be followed by a parenthesized list, but the original Hack and HHVM parsers allow it to be an identifier. Differential Revision: D4479828 fbshipit-source-id: ea1b85606b8fa7086ca44956cdfb7a35966c0e1a --- .../src/full_fidelity/full_fidelity_expression_parser.ml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hphp/hack/src/full_fidelity/full_fidelity_expression_parser.ml b/hphp/hack/src/full_fidelity/full_fidelity_expression_parser.ml index abaffe5291b..9c1cc4147e6 100644 --- a/hphp/hack/src/full_fidelity/full_fidelity_expression_parser.ml +++ b/hphp/hack/src/full_fidelity/full_fidelity_expression_parser.ml @@ -230,10 +230,15 @@ module WithStatementAndDeclAndTypeParser that? if so, should we give the error in the parser or a later pass? * is define case-insensitive? *) - let (parser, keyword) = assert_token parser Define in - let (parser, left, args, right) = parse_expression_list_opt parser in - let result = make_define_expression keyword left args right in - (parser, result) + (* TODO: The original Hack and HHVM parsers accept "define" as an + identifier, so we do too; consider whether it should be reserved. *) + let (parser1, keyword) = assert_token parser Define in + if peek_token_kind parser1 = LeftParen then + let (parser, left, args, right) = parse_expression_list_opt parser1 in + let result = make_define_expression keyword left args right in + (parser, result) + else + parse_as_name_or_error parser and parse_double_quoted_string parser head = parse_string_literal parser head "" -- 2.11.4.GIT