From cb41391aeaeb6809a13043dab883f7ce2e8f7725 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 10 Jan 2023 17:01:50 +0100 Subject: Split expression rule to improve parsing conflicting input --- corpus/expressions.txt | 376 +- corpus/statements.txt | 19 +- grammar.js | 58 +- src/grammar.json | 149 +- src/node-types.json | 274 +- src/parser.c | 1276191 ++++++++++++++++++++++----------------------- 6 files changed, 629555 insertions(+), 647512 deletions(-) diff --git a/corpus/expressions.txt b/corpus/expressions.txt index 84568e423..fe1970784 100644 --- a/corpus/expressions.txt +++ b/corpus/expressions.txt @@ -324,13 +324,115 @@ a >>>= a; (assignment_operator) (identifier))))) +================================================================================ +Assignment LValue types +================================================================================ + +a = 1; +a.b = 1; +a[b] = 1; +(a, b) = (1, 2); +(var a, b) = (1, 2); +var x = new A +{ + a = 1, + [b] = 1 +}; +(a) = 1; + +-------------------------------------------------------------------------------- + +(compilation_unit + (global_statement + (expression_statement + (assignment_expression + (identifier) + (assignment_operator) + (integer_literal)))) + (global_statement + (expression_statement + (assignment_expression + (member_access_expression + (identifier) + (identifier)) + (assignment_operator) + (integer_literal)))) + (global_statement + (expression_statement + (assignment_expression + (element_access_expression + (identifier) + (bracketed_argument_list + (argument + (identifier)))) + (assignment_operator) + (integer_literal)))) + (global_statement + (expression_statement + (assignment_expression + (tuple_expression + (argument + (identifier)) + (argument + (identifier))) + (assignment_operator) + (tuple_expression + (argument + (integer_literal)) + (argument + (integer_literal)))))) + (global_statement + (expression_statement + (assignment_expression + (tuple_expression + (argument + (declaration_expression + (implicit_type) + (identifier))) + (argument + (identifier))) + (assignment_operator) + (tuple_expression + (argument + (integer_literal)) + (argument + (integer_literal)))))) + (global_statement + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (object_creation_expression + (identifier) + (initializer_expression + (assignment_expression + (identifier) + (assignment_operator) + (integer_literal)) + (assignment_expression + (element_binding_expression + (bracketed_argument_list + (argument + (identifier)))) + (assignment_operator) + (integer_literal))))))))) + (global_statement + (expression_statement + (assignment_expression + (parenthesized_expression + (identifier)) + (assignment_operator) + (integer_literal))))) + ================================================================================ Ternary Expression ================================================================================ class Foo { void Test() { - x ? "foo" : "bar"; + var y = x ? "foo" : "bar"; } } @@ -345,11 +447,16 @@ class Foo { name: (identifier) parameters: (parameter_list) body: (block - (expression_statement - (conditional_expression - condition: (identifier) - consequence: (string_literal) - alternative: (string_literal)))))))) + (local_declaration_statement + (variable_declaration + type: (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (conditional_expression + condition: (identifier) + consequence: (string_literal) + alternative: (string_literal))))))))))) ================================================================================ Binary Expressions @@ -357,8 +464,8 @@ Binary Expressions class Foo { void Test() { - x == y; - 1 + 2; + var b = x == y; + var i = 1 + 2; } } @@ -373,14 +480,24 @@ class Foo { name: (identifier) parameters: (parameter_list) body: (block - (expression_statement - (binary_expression - left: (identifier) - right: (identifier))) - (expression_statement - (binary_expression - left: (integer_literal) - right: (integer_literal)))))))) + (local_declaration_statement + (variable_declaration + type: (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (binary_expression + left: (identifier) + right: (identifier)))))) + (local_declaration_statement + (variable_declaration + type: (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (binary_expression + left: (integer_literal) + right: (integer_literal))))))))))) ================================================================================ Ternary expressions is type @@ -517,45 +634,65 @@ b = (float)a[0]; Cast with parenthesized expression ================================================================================ -(A.A)(a.a.a); -(Int32)(1); -(Int32)(1); -(Int32)((1)); +var o = (A.A)(a.a.a); +var o = (Int32)(1); +var o = (Int32)(1); +var o = (Int32)((1)); -------------------------------------------------------------------------------- (compilation_unit (global_statement - (expression_statement - (cast_expression - (qualified_name + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator (identifier) - (identifier)) - (parenthesized_expression - (member_access_expression - (member_access_expression - (identifier) - (identifier)) - (identifier)))))) + (equals_value_clause + (cast_expression + (qualified_name + (identifier) + (identifier)) + (parenthesized_expression + (member_access_expression + (member_access_expression + (identifier) + (identifier)) + (identifier))))))))) (global_statement - (expression_statement - (cast_expression - (identifier) - (parenthesized_expression - (integer_literal))))) + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (cast_expression + (identifier) + (parenthesized_expression + (integer_literal)))))))) (global_statement - (expression_statement - (cast_expression - (identifier) - (parenthesized_expression - (integer_literal))))) + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (cast_expression + (identifier) + (parenthesized_expression + (integer_literal)))))))) (global_statement - (expression_statement - (cast_expression - (identifier) - (parenthesized_expression - (parenthesized_expression - (integer_literal))))))) + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (cast_expression + (identifier) + (parenthesized_expression + (parenthesized_expression + (integer_literal)))))))))) ================================================================================ Precedence of unary prefix operator and element access @@ -922,7 +1059,7 @@ Anonymous method expressions ================================================================================ void a() { - delegate(int a) { + var d = delegate(int a) { return a; }; } @@ -936,22 +1073,27 @@ void a() { (identifier) (parameter_list) (block - (expression_statement - (anonymous_method_expression - (parameter_list - (parameter - (predefined_type) - (identifier))) - (block - (return_statement - (identifier))))))))) + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (anonymous_method_expression + (parameter_list + (parameter + (predefined_type) + (identifier))) + (block + (return_statement + (identifier)))))))))))) ================================================================================ Anonymous method expression with discard parameters ================================================================================ void a() { - delegate(int _, int _) { + var d = delegate(int _, int _) { return a; }; } @@ -965,18 +1107,23 @@ void a() { (identifier) (parameter_list) (block - (expression_statement - (anonymous_method_expression - (parameter_list - (parameter - (predefined_type) - (identifier)) - (parameter - (predefined_type) - (identifier))) - (block - (return_statement - (identifier))))))))) + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (anonymous_method_expression + (parameter_list + (parameter + (predefined_type) + (identifier)) + (parameter + (predefined_type) + (identifier))) + (block + (return_statement + (identifier)))))))))))) ================================================================================ Anonymous method expression with modifiers @@ -1066,9 +1213,9 @@ Lambda expressions ================================================================================ void a() { - x => x + 1; - (A a, B b) => { return a.c(b); }; - RetType (A a, B b) => { return 1; }; + var l = x => x + 1; + var l = (A a, B b) => { return a.c(b); }; + var l = RetType (A a, B b) => { return 1; }; } -------------------------------------------------------------------------------- @@ -1080,43 +1227,58 @@ void a() { (identifier) (parameter_list) (block - (expression_statement - (lambda_expression - (identifier) - (binary_expression + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator (identifier) - (integer_literal)))) - (expression_statement - (lambda_expression - (parameter_list - (parameter - (identifier) - (identifier)) - (parameter - (identifier) - (identifier))) - (block - (return_statement - (invocation_expression - (member_access_expression + (equals_value_clause + (lambda_expression + (identifier) + (binary_expression (identifier) - (identifier)) - (argument_list - (argument - (identifier)))))))) - (expression_statement - (lambda_expression - (identifier) - (parameter_list - (parameter - (identifier) - (identifier)) - (parameter - (identifier) - (identifier))) - (block - (return_statement - (integer_literal))))))))) + (integer_literal))))))) + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (lambda_expression + (parameter_list + (parameter + (identifier) + (identifier)) + (parameter + (identifier) + (identifier))) + (block + (return_statement + (invocation_expression + (member_access_expression + (identifier) + (identifier)) + (argument_list + (argument + (identifier))))))))))) + (local_declaration_statement + (variable_declaration + (implicit_type) + (variable_declarator + (identifier) + (equals_value_clause + (lambda_expression + (identifier) + (parameter_list + (parameter + (identifier) + (identifier)) + (parameter + (identifier) + (identifier))) + (block + (return_statement + (integer_literal)))))))))))) ================================================================================ Async Lambda diff --git a/corpus/statements.txt b/corpus/statements.txt index 57bc81297..2d555d58c 100644 --- a/corpus/statements.txt +++ b/corpus/statements.txt @@ -335,15 +335,16 @@ A a = null; (compilation_unit (global_statement - (expression_statement - (assignment_expression - (binary_expression - (binary_expression - (identifier) - (identifier)) - (identifier)) - (assignment_operator) - (null_literal))))) + (local_declaration_statement + (variable_declaration + (generic_name + (identifier) + (type_argument_list + (identifier))) + (variable_declarator + (identifier) + (equals_value_clause + (null_literal))))))) ================================================================================ Assignment and declaration in same deconstruction diff --git a/grammar.js b/grammar.js index 74e6fa108..f90d5002b 100644 --- a/grammar.js +++ b/grammar.js @@ -55,7 +55,7 @@ module.exports = grammar({ [$.type_pattern, $.declaration_pattern, $.recursive_pattern], [$.type_pattern, $.tuple_element], - [$._name, $._expression], + [$._name, $._lvalue_expression], [$._simple_name, $.type_parameter], [$._simple_name, $.generic_name], [$._simple_name, $.constructor_declaration], @@ -107,8 +107,11 @@ module.exports = grammar({ [$.tuple_element, $.variable_declarator], [$.constant_pattern, $._name], - [$.constant_pattern, $._name, $._expression], - [$.constant_pattern, $._expression], + [$.constant_pattern, $._name, $._lvalue_expression], + [$.constant_pattern, $._non_lvalue_expression], + [$.constant_pattern, $._lvalue_expression], + [$.constant_pattern, $._expression_statement_expression], + ], inline: $ => [ @@ -861,7 +864,7 @@ module.exports = grammar({ empty_statement: $ => ';', - expression_statement: $ => seq($._expression, ';'), + expression_statement: $ => seq($._expression_statement_expression, ';'), fixed_statement: $ => seq('fixed', '(', $.variable_declaration, ')', $._statement), @@ -1202,7 +1205,7 @@ module.exports = grammar({ ), assignment_expression: $ => prec.right(seq( - field('left', $._expression), + field('left', $._lvalue_expression), $.assignment_operator, field('right', $._expression) )), @@ -1378,7 +1381,9 @@ module.exports = grammar({ $.tuple_type ), - parenthesized_expression: $ => seq('(', $._expression, ')'), + parenthesized_expression: $ => seq('(', $._non_lvalue_expression, ')'), + + _parenthesized_lvalue_expression: $ => seq('(', $._lvalue_expression, ')'), postfix_unary_expression: $ => prec.left(PREC.POSTFIX, choice( seq($._expression, '++'), @@ -1548,12 +1553,15 @@ module.exports = grammar({ simple_assignment_expression: $ => seq($.identifier, '=', $._expression), _expression: $ => choice( + $._non_lvalue_expression, + $._lvalue_expression, + ), + + _non_lvalue_expression: $ => choice( $.anonymous_method_expression, $.anonymous_object_creation_expression, $.array_creation_expression, $.as_expression, - $.assignment_expression, - $.await_expression, $.base_expression, $.binary_expression, $.cast_expression, @@ -1561,24 +1569,16 @@ module.exports = grammar({ $.conditional_access_expression, $.conditional_expression, $.default_expression, - $.element_access_expression, - $.element_binding_expression, $.implicit_array_creation_expression, $.implicit_object_creation_expression, $.implicit_stack_alloc_array_creation_expression, $.initializer_expression, $.interpolated_string_expression, - $.invocation_expression, $.is_expression, $.is_pattern_expression, $.lambda_expression, $.make_ref_expression, - $.member_access_expression, // $.member_binding_expression, // Not needed as handled directly in $.conditional_access_expression - $.object_creation_expression, - $.parenthesized_expression, - $.postfix_unary_expression, - $.prefix_unary_expression, $.query_expression, $.range_expression, $.ref_expression, @@ -1587,14 +1587,34 @@ module.exports = grammar({ $.size_of_expression, $.stack_alloc_array_creation_expression, $.switch_expression, - $.this_expression, $.throw_expression, - $.tuple_expression, $.type_of_expression, $.with_expression, + $._literal, + $._expression_statement_expression, + ), + + // Covers error CS0131: The left-hand side of an assignment must be a variable, property or indexer + _lvalue_expression: $ => choice( + $.this_expression, + $.member_access_expression, + $.tuple_expression, $._simple_name, - $._literal + $.element_access_expression, + $.element_binding_expression, + alias($._parenthesized_lvalue_expression, $.parenthesized_expression), + ), + + // Covers error CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement + _expression_statement_expression: $ => choice( + $.assignment_expression, + $.invocation_expression, + $.postfix_unary_expression, + $.prefix_unary_expression, + $.await_expression, + $.object_creation_expression, + $.parenthesized_expression, ), binary_expression: $ => choice( diff --git a/src/grammar.json b/src/grammar.json index 27ffea087..77cc04a2e 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -4310,7 +4310,7 @@ "members": [ { "type": "SYMBOL", - "name": "_expression" + "name": "_expression_statement_expression" }, { "type": "STRING", @@ -6440,7 +6440,7 @@ "name": "left", "content": { "type": "SYMBOL", - "name": "_expression" + "name": "_lvalue_expression" } }, { @@ -7338,7 +7338,24 @@ }, { "type": "SYMBOL", - "name": "_expression" + "name": "_non_lvalue_expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "_parenthesized_lvalue_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_lvalue_expression" }, { "type": "STRING", @@ -8279,27 +8296,32 @@ "members": [ { "type": "SYMBOL", - "name": "anonymous_method_expression" + "name": "_non_lvalue_expression" }, { "type": "SYMBOL", - "name": "anonymous_object_creation_expression" - }, + "name": "_lvalue_expression" + } + ] + }, + "_non_lvalue_expression": { + "type": "CHOICE", + "members": [ { "type": "SYMBOL", - "name": "array_creation_expression" + "name": "anonymous_method_expression" }, { "type": "SYMBOL", - "name": "as_expression" + "name": "anonymous_object_creation_expression" }, { "type": "SYMBOL", - "name": "assignment_expression" + "name": "array_creation_expression" }, { "type": "SYMBOL", - "name": "await_expression" + "name": "as_expression" }, { "type": "SYMBOL", @@ -8329,14 +8351,6 @@ "type": "SYMBOL", "name": "default_expression" }, - { - "type": "SYMBOL", - "name": "element_access_expression" - }, - { - "type": "SYMBOL", - "name": "element_binding_expression" - }, { "type": "SYMBOL", "name": "implicit_array_creation_expression" @@ -8357,10 +8371,6 @@ "type": "SYMBOL", "name": "interpolated_string_expression" }, - { - "type": "SYMBOL", - "name": "invocation_expression" - }, { "type": "SYMBOL", "name": "is_expression" @@ -8379,63 +8389,68 @@ }, { "type": "SYMBOL", - "name": "member_access_expression" + "name": "query_expression" }, { "type": "SYMBOL", - "name": "object_creation_expression" + "name": "range_expression" }, { "type": "SYMBOL", - "name": "parenthesized_expression" + "name": "ref_expression" }, { "type": "SYMBOL", - "name": "postfix_unary_expression" + "name": "ref_type_expression" }, { "type": "SYMBOL", - "name": "prefix_unary_expression" + "name": "ref_value_expression" }, { "type": "SYMBOL", - "name": "query_expression" + "name": "size_of_expression" }, { "type": "SYMBOL", - "name": "range_expression" + "name": "stack_alloc_array_creation_expression" }, { "type": "SYMBOL", - "name": "ref_expression" + "name": "switch_expression" }, { "type": "SYMBOL", - "name": "ref_type_expression" + "name": "throw_expression" }, { "type": "SYMBOL", - "name": "ref_value_expression" + "name": "type_of_expression" }, { "type": "SYMBOL", - "name": "size_of_expression" + "name": "with_expression" }, { "type": "SYMBOL", - "name": "stack_alloc_array_creation_expression" + "name": "_literal" }, { "type": "SYMBOL", - "name": "switch_expression" - }, + "name": "_expression_statement_expression" + } + ] + }, + "_lvalue_expression": { + "type": "CHOICE", + "members": [ { "type": "SYMBOL", "name": "this_expression" }, { "type": "SYMBOL", - "name": "throw_expression" + "name": "member_access_expression" }, { "type": "SYMBOL", @@ -8443,19 +8458,57 @@ }, { "type": "SYMBOL", - "name": "type_of_expression" + "name": "_simple_name" }, { "type": "SYMBOL", - "name": "with_expression" + "name": "element_access_expression" }, { "type": "SYMBOL", - "name": "_simple_name" + "name": "element_binding_expression" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_parenthesized_lvalue_expression" + }, + "named": true, + "value": "parenthesized_expression" + } + ] + }, + "_expression_statement_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "assignment_expression" }, { "type": "SYMBOL", - "name": "_literal" + "name": "invocation_expression" + }, + { + "type": "SYMBOL", + "name": "postfix_unary_expression" + }, + { + "type": "SYMBOL", + "name": "prefix_unary_expression" + }, + { + "type": "SYMBOL", + "name": "await_expression" + }, + { + "type": "SYMBOL", + "name": "object_creation_expression" + }, + { + "type": "SYMBOL", + "name": "parenthesized_expression" } ] }, @@ -10620,7 +10673,7 @@ ], [ "_name", - "_expression" + "_lvalue_expression" ], [ "_simple_name", @@ -10786,11 +10839,19 @@ [ "constant_pattern", "_name", - "_expression" + "_lvalue_expression" + ], + [ + "constant_pattern", + "_non_lvalue_expression" + ], + [ + "constant_pattern", + "_lvalue_expression" ], [ "constant_pattern", - "_expression" + "_expression_statement_expression" ] ], "precedences": [], diff --git a/src/node-types.json b/src/node-types.json index 94413d55b..fa9321709 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -914,7 +914,39 @@ "required": true, "types": [ { - "type": "_expression", + "type": "element_access_expression", + "named": true + }, + { + "type": "element_binding_expression", + "named": true + }, + { + "type": "generic_name", + "named": true + }, + { + "type": "global", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "member_access_expression", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "this_expression", + "named": true + }, + { + "type": "tuple_expression", "named": true } ] @@ -2550,7 +2582,31 @@ "required": true, "types": [ { - "type": "_expression", + "type": "assignment_expression", + "named": true + }, + { + "type": "await_expression", + "named": true + }, + { + "type": "invocation_expression", + "named": true + }, + { + "type": "object_creation_expression", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "postfix_unary_expression", + "named": true + }, + { + "type": "prefix_unary_expression", "named": true } ] @@ -4694,7 +4750,219 @@ "required": true, "types": [ { - "type": "_expression", + "type": "anonymous_method_expression", + "named": true + }, + { + "type": "anonymous_object_creation_expression", + "named": true + }, + { + "type": "array_creation_expression", + "named": true + }, + { + "type": "as_expression", + "named": true + }, + { + "type": "assignment_expression", + "named": true + }, + { + "type": "await_expression", + "named": true + }, + { + "type": "base_expression", + "named": true + }, + { + "type": "binary_expression", + "named": true + }, + { + "type": "boolean_literal", + "named": true + }, + { + "type": "cast_expression", + "named": true + }, + { + "type": "character_literal", + "named": true + }, + { + "type": "checked_expression", + "named": true + }, + { + "type": "conditional_access_expression", + "named": true + }, + { + "type": "conditional_expression", + "named": true + }, + { + "type": "default_expression", + "named": true + }, + { + "type": "element_access_expression", + "named": true + }, + { + "type": "element_binding_expression", + "named": true + }, + { + "type": "generic_name", + "named": true + }, + { + "type": "global", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "implicit_array_creation_expression", + "named": true + }, + { + "type": "implicit_object_creation_expression", + "named": true + }, + { + "type": "implicit_stack_alloc_array_creation_expression", + "named": true + }, + { + "type": "initializer_expression", + "named": true + }, + { + "type": "integer_literal", + "named": true + }, + { + "type": "interpolated_string_expression", + "named": true + }, + { + "type": "invocation_expression", + "named": true + }, + { + "type": "is_expression", + "named": true + }, + { + "type": "is_pattern_expression", + "named": true + }, + { + "type": "lambda_expression", + "named": true + }, + { + "type": "make_ref_expression", + "named": true + }, + { + "type": "member_access_expression", + "named": true + }, + { + "type": "null_literal", + "named": true + }, + { + "type": "object_creation_expression", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "postfix_unary_expression", + "named": true + }, + { + "type": "prefix_unary_expression", + "named": true + }, + { + "type": "query_expression", + "named": true + }, + { + "type": "range_expression", + "named": true + }, + { + "type": "raw_string_literal", + "named": true + }, + { + "type": "real_literal", + "named": true + }, + { + "type": "ref_expression", + "named": true + }, + { + "type": "ref_type_expression", + "named": true + }, + { + "type": "ref_value_expression", + "named": true + }, + { + "type": "size_of_expression", + "named": true + }, + { + "type": "stack_alloc_array_creation_expression", + "named": true + }, + { + "type": "string_literal", + "named": true + }, + { + "type": "switch_expression", + "named": true + }, + { + "type": "this_expression", + "named": true + }, + { + "type": "throw_expression", + "named": true + }, + { + "type": "tuple_expression", + "named": true + }, + { + "type": "type_of_expression", + "named": true + }, + { + "type": "verbatim_string_literal", + "named": true + }, + { + "type": "with_expression", "named": true } ] diff --git a/src/parser.c b/src/parser.c index b6ca789b8..818db6db8 100644 --- a/src/parser.c +++ b/src/parser.c @@ -5,10 +5,10 @@ #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif -#define LANGUAGE_VERSION 13 -#define STATE_COUNT 11067 -#define LARGE_STATE_COUNT 4038 -#define SYMBOL_COUNT 512 +#define LANGUAGE_VERSION 14 +#define STATE_COUNT 11112 +#define LARGE_STATE_COUNT 3721 +#define SYMBOL_COUNT 516 #define ALIAS_COUNT 1 #define TOKEN_COUNT 218 #define EXTERNAL_TOKEN_COUNT 1 @@ -422,113 +422,117 @@ enum { sym_object_creation_expression = 403, sym__object_creation_type = 404, sym_parenthesized_expression = 405, - sym_postfix_unary_expression = 406, - sym_prefix_unary_expression = 407, - sym_query_expression = 408, - sym_from_clause = 409, - sym__query_body = 410, - sym__query_clause = 411, - sym_join_clause = 412, - sym_join_into_clause = 413, - sym_let_clause = 414, - sym_order_by_clause = 415, - sym__ordering = 416, - sym_where_clause = 417, - sym__select_or_group_clause = 418, - sym_group_clause = 419, - sym_select_clause = 420, - sym_query_continuation = 421, - sym_range_expression = 422, - sym_ref_expression = 423, - sym_ref_type_expression = 424, - sym_ref_value_expression = 425, - sym_size_of_expression = 426, - sym_stack_alloc_array_creation_expression = 427, - sym_switch_expression = 428, - sym_switch_expression_arm = 429, - sym_throw_expression = 430, - sym_tuple_expression = 431, - sym_type_of_expression = 432, - sym_with_expression = 433, - sym_with_initializer_expression = 434, - sym_simple_assignment_expression = 435, - sym__expression = 436, - sym_binary_expression = 437, - sym_as_expression = 438, - sym_is_expression = 439, - sym_identifier = 440, - sym_global = 441, - sym__literal = 442, - sym_boolean_literal = 443, - sym_character_literal = 444, - sym_string_literal = 445, - sym__contextual_keywords = 446, - sym__preprocessor_call = 447, - sym_nullable_directive = 448, - sym_define_directive = 449, - sym_undef_directive = 450, - sym_if_directive = 451, - sym_else_directive = 452, - sym_elif_directive = 453, - sym_region_directive = 454, - sym_endregion_directive = 455, - sym_error_directive = 456, - sym_warning_directive = 457, - sym_line_directive = 458, - sym_pragma_directive = 459, - sym_reference_directive = 460, - sym_load_directive = 461, - sym_shebang_directive = 462, - sym__preproc_expression = 463, - sym_preproc_parenthesized_expression = 464, - sym_preproc_unary_expression = 465, - sym_preproc_binary_expression = 466, - aux_sym_compilation_unit_repeat1 = 467, - aux_sym_compilation_unit_repeat2 = 468, - aux_sym_compilation_unit_repeat3 = 469, - aux_sym_compilation_unit_repeat4 = 470, - aux_sym_compilation_unit_repeat5 = 471, - aux_sym_type_argument_list_repeat1 = 472, - aux_sym_type_argument_list_repeat2 = 473, - aux_sym_attribute_list_repeat1 = 474, - aux_sym_attribute_argument_list_repeat1 = 475, - aux_sym_event_field_declaration_repeat1 = 476, - aux_sym_event_field_declaration_repeat2 = 477, - aux_sym_variable_declaration_repeat1 = 478, - aux_sym_bracketed_argument_list_repeat1 = 479, - aux_sym_tuple_pattern_repeat1 = 480, - aux_sym__formal_parameter_list_repeat1 = 481, - aux_sym_block_repeat1 = 482, - aux_sym_method_declaration_repeat1 = 483, - aux_sym_type_parameter_list_repeat1 = 484, - aux_sym_type_parameter_constraints_clause_repeat1 = 485, - aux_sym_accessor_list_repeat1 = 486, - aux_sym_enum_member_declaration_list_repeat1 = 487, - aux_sym_declaration_list_repeat1 = 488, - aux_sym_record_base_repeat1 = 489, - aux_sym_file_scoped_namespace_declaration_repeat1 = 490, - aux_sym_array_rank_specifier_repeat1 = 491, - aux_sym_function_pointer_type_repeat1 = 492, - aux_sym_function_pointer_unmanaged_calling_convention_list_repeat1 = 493, - aux_sym_tuple_type_repeat1 = 494, - aux_sym_for_statement_repeat1 = 495, - aux_sym_switch_body_repeat1 = 496, - aux_sym_switch_section_repeat1 = 497, - aux_sym_list_pattern_repeat1 = 498, - aux_sym_parenthesized_variable_designation_repeat1 = 499, - aux_sym_positional_pattern_clause_repeat1 = 500, - aux_sym_try_statement_repeat1 = 501, - aux_sym_anonymous_object_creation_expression_repeat1 = 502, - aux_sym_interpolated_string_expression_repeat1 = 503, - aux_sym_interpolated_string_expression_repeat2 = 504, - aux_sym_interpolated_string_expression_repeat3 = 505, - aux_sym__query_body_repeat1 = 506, - aux_sym_order_by_clause_repeat1 = 507, - aux_sym_switch_expression_repeat1 = 508, - aux_sym_with_initializer_expression_repeat1 = 509, - aux_sym_string_literal_repeat1 = 510, - aux_sym_pragma_directive_repeat1 = 511, - alias_sym_parameter_modifier = 512, + sym__parenthesized_lvalue_expression = 406, + sym_postfix_unary_expression = 407, + sym_prefix_unary_expression = 408, + sym_query_expression = 409, + sym_from_clause = 410, + sym__query_body = 411, + sym__query_clause = 412, + sym_join_clause = 413, + sym_join_into_clause = 414, + sym_let_clause = 415, + sym_order_by_clause = 416, + sym__ordering = 417, + sym_where_clause = 418, + sym__select_or_group_clause = 419, + sym_group_clause = 420, + sym_select_clause = 421, + sym_query_continuation = 422, + sym_range_expression = 423, + sym_ref_expression = 424, + sym_ref_type_expression = 425, + sym_ref_value_expression = 426, + sym_size_of_expression = 427, + sym_stack_alloc_array_creation_expression = 428, + sym_switch_expression = 429, + sym_switch_expression_arm = 430, + sym_throw_expression = 431, + sym_tuple_expression = 432, + sym_type_of_expression = 433, + sym_with_expression = 434, + sym_with_initializer_expression = 435, + sym_simple_assignment_expression = 436, + sym__expression = 437, + sym__non_lvalue_expression = 438, + sym__lvalue_expression = 439, + sym__expression_statement_expression = 440, + sym_binary_expression = 441, + sym_as_expression = 442, + sym_is_expression = 443, + sym_identifier = 444, + sym_global = 445, + sym__literal = 446, + sym_boolean_literal = 447, + sym_character_literal = 448, + sym_string_literal = 449, + sym__contextual_keywords = 450, + sym__preprocessor_call = 451, + sym_nullable_directive = 452, + sym_define_directive = 453, + sym_undef_directive = 454, + sym_if_directive = 455, + sym_else_directive = 456, + sym_elif_directive = 457, + sym_region_directive = 458, + sym_endregion_directive = 459, + sym_error_directive = 460, + sym_warning_directive = 461, + sym_line_directive = 462, + sym_pragma_directive = 463, + sym_reference_directive = 464, + sym_load_directive = 465, + sym_shebang_directive = 466, + sym__preproc_expression = 467, + sym_preproc_parenthesized_expression = 468, + sym_preproc_unary_expression = 469, + sym_preproc_binary_expression = 470, + aux_sym_compilation_unit_repeat1 = 471, + aux_sym_compilation_unit_repeat2 = 472, + aux_sym_compilation_unit_repeat3 = 473, + aux_sym_compilation_unit_repeat4 = 474, + aux_sym_compilation_unit_repeat5 = 475, + aux_sym_type_argument_list_repeat1 = 476, + aux_sym_type_argument_list_repeat2 = 477, + aux_sym_attribute_list_repeat1 = 478, + aux_sym_attribute_argument_list_repeat1 = 479, + aux_sym_event_field_declaration_repeat1 = 480, + aux_sym_event_field_declaration_repeat2 = 481, + aux_sym_variable_declaration_repeat1 = 482, + aux_sym_bracketed_argument_list_repeat1 = 483, + aux_sym_tuple_pattern_repeat1 = 484, + aux_sym__formal_parameter_list_repeat1 = 485, + aux_sym_block_repeat1 = 486, + aux_sym_method_declaration_repeat1 = 487, + aux_sym_type_parameter_list_repeat1 = 488, + aux_sym_type_parameter_constraints_clause_repeat1 = 489, + aux_sym_accessor_list_repeat1 = 490, + aux_sym_enum_member_declaration_list_repeat1 = 491, + aux_sym_declaration_list_repeat1 = 492, + aux_sym_record_base_repeat1 = 493, + aux_sym_file_scoped_namespace_declaration_repeat1 = 494, + aux_sym_array_rank_specifier_repeat1 = 495, + aux_sym_function_pointer_type_repeat1 = 496, + aux_sym_function_pointer_unmanaged_calling_convention_list_repeat1 = 497, + aux_sym_tuple_type_repeat1 = 498, + aux_sym_for_statement_repeat1 = 499, + aux_sym_switch_body_repeat1 = 500, + aux_sym_switch_section_repeat1 = 501, + aux_sym_list_pattern_repeat1 = 502, + aux_sym_parenthesized_variable_designation_repeat1 = 503, + aux_sym_positional_pattern_clause_repeat1 = 504, + aux_sym_try_statement_repeat1 = 505, + aux_sym_anonymous_object_creation_expression_repeat1 = 506, + aux_sym_interpolated_string_expression_repeat1 = 507, + aux_sym_interpolated_string_expression_repeat2 = 508, + aux_sym_interpolated_string_expression_repeat3 = 509, + aux_sym__query_body_repeat1 = 510, + aux_sym_order_by_clause_repeat1 = 511, + aux_sym_switch_expression_repeat1 = 512, + aux_sym_with_initializer_expression_repeat1 = 513, + aux_sym_string_literal_repeat1 = 514, + aux_sym_pragma_directive_repeat1 = 515, + alias_sym_parameter_modifier = 516, }; static const char * const ts_symbol_names[] = { @@ -938,6 +942,7 @@ static const char * const ts_symbol_names[] = { [sym_object_creation_expression] = "object_creation_expression", [sym__object_creation_type] = "_object_creation_type", [sym_parenthesized_expression] = "parenthesized_expression", + [sym__parenthesized_lvalue_expression] = "parenthesized_expression", [sym_postfix_unary_expression] = "postfix_unary_expression", [sym_prefix_unary_expression] = "prefix_unary_expression", [sym_query_expression] = "query_expression", @@ -969,6 +974,9 @@ static const char * const ts_symbol_names[] = { [sym_with_initializer_expression] = "with_initializer_expression", [sym_simple_assignment_expression] = "simple_assignment_expression", [sym__expression] = "_expression", + [sym__non_lvalue_expression] = "_non_lvalue_expression", + [sym__lvalue_expression] = "_lvalue_expression", + [sym__expression_statement_expression] = "_expression_statement_expression", [sym_binary_expression] = "binary_expression", [sym_as_expression] = "as_expression", [sym_is_expression] = "is_expression", @@ -1454,6 +1462,7 @@ static const TSSymbol ts_symbol_map[] = { [sym_object_creation_expression] = sym_object_creation_expression, [sym__object_creation_type] = sym__object_creation_type, [sym_parenthesized_expression] = sym_parenthesized_expression, + [sym__parenthesized_lvalue_expression] = sym_parenthesized_expression, [sym_postfix_unary_expression] = sym_postfix_unary_expression, [sym_prefix_unary_expression] = sym_prefix_unary_expression, [sym_query_expression] = sym_query_expression, @@ -1485,6 +1494,9 @@ static const TSSymbol ts_symbol_map[] = { [sym_with_initializer_expression] = sym_with_initializer_expression, [sym_simple_assignment_expression] = sym_simple_assignment_expression, [sym__expression] = sym__expression, + [sym__non_lvalue_expression] = sym__non_lvalue_expression, + [sym__lvalue_expression] = sym__lvalue_expression, + [sym__expression_statement_expression] = sym__expression_statement_expression, [sym_binary_expression] = sym_binary_expression, [sym_as_expression] = sym_as_expression, [sym_is_expression] = sym_is_expression, @@ -3191,6 +3203,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym__parenthesized_lvalue_expression] = { + .visible = true, + .named = true, + }, [sym_postfix_unary_expression] = { .visible = true, .named = true, @@ -3316,6 +3332,18 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .named = true, .supertype = true, }, + [sym__non_lvalue_expression] = { + .visible = false, + .named = true, + }, + [sym__lvalue_expression] = { + .visible = false, + .named = true, + }, + [sym__expression_statement_expression] = { + .visible = false, + .named = true, + }, [sym_binary_expression] = { .visible = true, .named = true, @@ -5044,6 +5072,11121 @@ static const uint16_t ts_non_terminal_alias_map[] = { 0, }; +static const TSStateId ts_primary_state_ids[STATE_COUNT] = { + [0] = 0, + [1] = 1, + [2] = 2, + [3] = 3, + [4] = 4, + [5] = 5, + [6] = 6, + [7] = 7, + [8] = 8, + [9] = 9, + [10] = 10, + [11] = 11, + [12] = 12, + [13] = 13, + [14] = 14, + [15] = 15, + [16] = 14, + [17] = 14, + [18] = 18, + [19] = 14, + [20] = 14, + [21] = 14, + [22] = 14, + [23] = 14, + [24] = 14, + [25] = 25, + [26] = 26, + [27] = 25, + [28] = 26, + [29] = 26, + [30] = 25, + [31] = 26, + [32] = 25, + [33] = 25, + [34] = 25, + [35] = 26, + [36] = 26, + [37] = 26, + [38] = 25, + [39] = 26, + [40] = 25, + [41] = 25, + [42] = 26, + [43] = 43, + [44] = 44, + [45] = 45, + [46] = 46, + [47] = 47, + [48] = 48, + [49] = 49, + [50] = 50, + [51] = 51, + [52] = 49, + [53] = 43, + [54] = 54, + [55] = 55, + [56] = 54, + [57] = 57, + [58] = 43, + [59] = 59, + [60] = 51, + [61] = 47, + [62] = 62, + [63] = 63, + [64] = 64, + [65] = 50, + [66] = 66, + [67] = 67, + [68] = 68, + [69] = 69, + [70] = 70, + [71] = 71, + [72] = 72, + [73] = 73, + [74] = 44, + [75] = 64, + [76] = 76, + [77] = 77, + [78] = 78, + [79] = 45, + [80] = 67, + [81] = 71, + [82] = 82, + [83] = 83, + [84] = 50, + [85] = 62, + [86] = 86, + [87] = 87, + [88] = 55, + [89] = 57, + [90] = 69, + [91] = 82, + [92] = 48, + [93] = 83, + [94] = 64, + [95] = 66, + [96] = 63, + [97] = 59, + [98] = 57, + [99] = 55, + [100] = 59, + [101] = 63, + [102] = 77, + [103] = 76, + [104] = 66, + [105] = 44, + [106] = 69, + [107] = 77, + [108] = 46, + [109] = 49, + [110] = 73, + [111] = 76, + [112] = 78, + [113] = 78, + [114] = 62, + [115] = 72, + [116] = 86, + [117] = 54, + [118] = 87, + [119] = 68, + [120] = 51, + [121] = 87, + [122] = 86, + [123] = 73, + [124] = 83, + [125] = 82, + [126] = 71, + [127] = 67, + [128] = 45, + [129] = 68, + [130] = 70, + [131] = 70, + [132] = 46, + [133] = 48, + [134] = 72, + [135] = 135, + [136] = 136, + [137] = 135, + [138] = 135, + [139] = 135, + [140] = 136, + [141] = 141, + [142] = 141, + [143] = 141, + [144] = 141, + [145] = 141, + [146] = 141, + [147] = 141, + [148] = 141, + [149] = 141, + [150] = 141, + [151] = 141, + [152] = 141, + [153] = 141, + [154] = 141, + [155] = 141, + [156] = 141, + [157] = 141, + [158] = 141, + [159] = 141, + [160] = 141, + [161] = 141, + [162] = 141, + [163] = 141, + [164] = 141, + [165] = 141, + [166] = 141, + [167] = 141, + [168] = 168, + [169] = 168, + [170] = 170, + [171] = 171, + [172] = 170, + [173] = 171, + [174] = 170, + [175] = 171, + [176] = 171, + [177] = 170, + [178] = 171, + [179] = 170, + [180] = 171, + [181] = 170, + [182] = 170, + [183] = 171, + [184] = 170, + [185] = 171, + [186] = 170, + [187] = 171, + [188] = 170, + [189] = 170, + [190] = 171, + [191] = 171, + [192] = 171, + [193] = 171, + [194] = 171, + [195] = 171, + [196] = 171, + [197] = 170, + [198] = 170, + [199] = 171, + [200] = 171, + [201] = 170, + [202] = 170, + [203] = 170, + [204] = 171, + [205] = 170, + [206] = 170, + [207] = 170, + [208] = 171, + [209] = 171, + [210] = 170, + [211] = 211, + [212] = 211, + [213] = 213, + [214] = 211, + [215] = 171, + [216] = 171, + [217] = 170, + [218] = 171, + [219] = 170, + [220] = 220, + [221] = 213, + [222] = 170, + [223] = 170, + [224] = 170, + [225] = 171, + [226] = 170, + [227] = 171, + [228] = 170, + [229] = 171, + [230] = 171, + [231] = 170, + [232] = 170, + [233] = 170, + [234] = 234, + [235] = 171, + [236] = 171, + [237] = 237, + [238] = 171, + [239] = 170, + [240] = 240, + [241] = 170, + [242] = 237, + [243] = 237, + [244] = 171, + [245] = 170, + [246] = 171, + [247] = 247, + [248] = 171, + [249] = 237, + [250] = 234, + [251] = 170, + [252] = 237, + [253] = 253, + [254] = 254, + [255] = 171, + [256] = 170, + [257] = 254, + [258] = 170, + [259] = 259, + [260] = 171, + [261] = 261, + [262] = 171, + [263] = 170, + [264] = 264, + [265] = 265, + [266] = 170, + [267] = 170, + [268] = 264, + [269] = 269, + [270] = 265, + [271] = 261, + [272] = 264, + [273] = 170, + [274] = 265, + [275] = 171, + [276] = 259, + [277] = 264, + [278] = 259, + [279] = 264, + [280] = 171, + [281] = 265, + [282] = 259, + [283] = 254, + [284] = 171, + [285] = 171, + [286] = 259, + [287] = 170, + [288] = 171, + [289] = 170, + [290] = 254, + [291] = 291, + [292] = 291, + [293] = 291, + [294] = 294, + [295] = 295, + [296] = 291, + [297] = 297, + [298] = 298, + [299] = 297, + [300] = 297, + [301] = 297, + [302] = 302, + [303] = 298, + [304] = 304, + [305] = 304, + [306] = 302, + [307] = 304, + [308] = 302, + [309] = 304, + [310] = 302, + [311] = 302, + [312] = 304, + [313] = 302, + [314] = 304, + [315] = 298, + [316] = 298, + [317] = 297, + [318] = 302, + [319] = 304, + [320] = 298, + [321] = 297, + [322] = 322, + [323] = 302, + [324] = 304, + [325] = 297, + [326] = 298, + [327] = 297, + [328] = 302, + [329] = 298, + [330] = 298, + [331] = 302, + [332] = 304, + [333] = 297, + [334] = 298, + [335] = 304, + [336] = 297, + [337] = 298, + [338] = 298, + [339] = 304, + [340] = 297, + [341] = 302, + [342] = 304, + [343] = 302, + [344] = 297, + [345] = 297, + [346] = 298, + [347] = 304, + [348] = 302, + [349] = 302, + [350] = 304, + [351] = 298, + [352] = 304, + [353] = 302, + [354] = 297, + [355] = 302, + [356] = 298, + [357] = 304, + [358] = 358, + [359] = 297, + [360] = 298, + [361] = 297, + [362] = 298, + [363] = 304, + [364] = 302, + [365] = 297, + [366] = 302, + [367] = 297, + [368] = 297, + [369] = 297, + [370] = 297, + [371] = 302, + [372] = 302, + [373] = 304, + [374] = 304, + [375] = 297, + [376] = 304, + [377] = 298, + [378] = 302, + [379] = 297, + [380] = 297, + [381] = 297, + [382] = 297, + [383] = 302, + [384] = 304, + [385] = 304, + [386] = 297, + [387] = 304, + [388] = 297, + [389] = 302, + [390] = 322, + [391] = 297, + [392] = 297, + [393] = 298, + [394] = 298, + [395] = 298, + [396] = 297, + [397] = 304, + [398] = 297, + [399] = 302, + [400] = 302, + [401] = 304, + [402] = 298, + [403] = 298, + [404] = 298, + [405] = 304, + [406] = 302, + [407] = 297, + [408] = 298, + [409] = 297, + [410] = 297, + [411] = 297, + [412] = 297, + [413] = 297, + [414] = 302, + [415] = 297, + [416] = 297, + [417] = 298, + [418] = 304, + [419] = 297, + [420] = 297, + [421] = 298, + [422] = 298, + [423] = 423, + [424] = 424, + [425] = 424, + [426] = 424, + [427] = 424, + [428] = 424, + [429] = 424, + [430] = 424, + [431] = 431, + [432] = 431, + [433] = 431, + [434] = 431, + [435] = 431, + [436] = 431, + [437] = 431, + [438] = 431, + [439] = 431, + [440] = 431, + [441] = 431, + [442] = 431, + [443] = 431, + [444] = 431, + [445] = 431, + [446] = 431, + [447] = 431, + [448] = 448, + [449] = 431, + [450] = 431, + [451] = 431, + [452] = 431, + [453] = 431, + [454] = 431, + [455] = 431, + [456] = 431, + [457] = 431, + [458] = 431, + [459] = 431, + [460] = 431, + [461] = 431, + [462] = 431, + [463] = 431, + [464] = 431, + [465] = 431, + [466] = 431, + [467] = 431, + [468] = 431, + [469] = 431, + [470] = 431, + [471] = 431, + [472] = 431, + [473] = 431, + [474] = 431, + [475] = 475, + [476] = 475, + [477] = 475, + [478] = 475, + [479] = 475, + [480] = 480, + [481] = 480, + [482] = 480, + [483] = 480, + [484] = 480, + [485] = 485, + [486] = 485, + [487] = 485, + [488] = 485, + [489] = 485, + [490] = 490, + [491] = 491, + [492] = 490, + [493] = 491, + [494] = 494, + [495] = 494, + [496] = 496, + [497] = 494, + [498] = 494, + [499] = 494, + [500] = 500, + [501] = 501, + [502] = 502, + [503] = 503, + [504] = 502, + [505] = 505, + [506] = 503, + [507] = 507, + [508] = 508, + [509] = 503, + [510] = 502, + [511] = 511, + [512] = 501, + [513] = 507, + [514] = 503, + [515] = 501, + [516] = 516, + [517] = 502, + [518] = 508, + [519] = 502, + [520] = 503, + [521] = 503, + [522] = 507, + [523] = 501, + [524] = 507, + [525] = 501, + [526] = 526, + [527] = 527, + [528] = 527, + [529] = 529, + [530] = 529, + [531] = 527, + [532] = 527, + [533] = 533, + [534] = 529, + [535] = 529, + [536] = 529, + [537] = 529, + [538] = 527, + [539] = 526, + [540] = 540, + [541] = 529, + [542] = 542, + [543] = 527, + [544] = 529, + [545] = 529, + [546] = 529, + [547] = 529, + [548] = 529, + [549] = 529, + [550] = 527, + [551] = 529, + [552] = 529, + [553] = 527, + [554] = 527, + [555] = 527, + [556] = 527, + [557] = 527, + [558] = 529, + [559] = 527, + [560] = 527, + [561] = 561, + [562] = 527, + [563] = 529, + [564] = 540, + [565] = 527, + [566] = 527, + [567] = 527, + [568] = 529, + [569] = 527, + [570] = 529, + [571] = 527, + [572] = 529, + [573] = 529, + [574] = 527, + [575] = 527, + [576] = 527, + [577] = 526, + [578] = 529, + [579] = 527, + [580] = 529, + [581] = 527, + [582] = 527, + [583] = 527, + [584] = 526, + [585] = 529, + [586] = 529, + [587] = 527, + [588] = 588, + [589] = 529, + [590] = 527, + [591] = 527, + [592] = 527, + [593] = 529, + [594] = 527, + [595] = 561, + [596] = 542, + [597] = 529, + [598] = 527, + [599] = 527, + [600] = 527, + [601] = 527, + [602] = 542, + [603] = 529, + [604] = 527, + [605] = 527, + [606] = 561, + [607] = 527, + [608] = 527, + [609] = 527, + [610] = 529, + [611] = 611, + [612] = 529, + [613] = 540, + [614] = 588, + [615] = 529, + [616] = 527, + [617] = 529, + [618] = 529, + [619] = 619, + [620] = 527, + [621] = 527, + [622] = 529, + [623] = 623, + [624] = 527, + [625] = 529, + [626] = 527, + [627] = 526, + [628] = 527, + [629] = 529, + [630] = 527, + [631] = 527, + [632] = 529, + [633] = 527, + [634] = 529, + [635] = 527, + [636] = 529, + [637] = 527, + [638] = 529, + [639] = 527, + [640] = 529, + [641] = 527, + [642] = 642, + [643] = 643, + [644] = 642, + [645] = 645, + [646] = 646, + [647] = 647, + [648] = 648, + [649] = 649, + [650] = 650, + [651] = 651, + [652] = 652, + [653] = 653, + [654] = 654, + [655] = 655, + [656] = 656, + [657] = 650, + [658] = 658, + [659] = 656, + [660] = 655, + [661] = 651, + [662] = 652, + [663] = 654, + [664] = 664, + [665] = 665, + [666] = 666, + [667] = 647, + [668] = 653, + [669] = 669, + [670] = 649, + [671] = 671, + [672] = 672, + [673] = 671, + [674] = 672, + [675] = 669, + [676] = 676, + [677] = 654, + [678] = 652, + [679] = 643, + [680] = 643, + [681] = 651, + [682] = 650, + [683] = 647, + [684] = 671, + [685] = 643, + [686] = 666, + [687] = 665, + [688] = 664, + [689] = 658, + [690] = 648, + [691] = 656, + [692] = 655, + [693] = 672, + [694] = 653, + [695] = 649, + [696] = 676, + [697] = 646, + [698] = 645, + [699] = 669, + [700] = 642, + [701] = 653, + [702] = 666, + [703] = 643, + [704] = 642, + [705] = 645, + [706] = 665, + [707] = 646, + [708] = 648, + [709] = 658, + [710] = 664, + [711] = 676, + [712] = 649, + [713] = 643, + [714] = 653, + [715] = 642, + [716] = 655, + [717] = 656, + [718] = 650, + [719] = 651, + [720] = 720, + [721] = 645, + [722] = 652, + [723] = 676, + [724] = 654, + [725] = 649, + [726] = 671, + [727] = 727, + [728] = 672, + [729] = 665, + [730] = 666, + [731] = 669, + [732] = 647, + [733] = 669, + [734] = 650, + [735] = 653, + [736] = 656, + [737] = 651, + [738] = 672, + [739] = 671, + [740] = 647, + [741] = 652, + [742] = 654, + [743] = 666, + [744] = 655, + [745] = 655, + [746] = 746, + [747] = 656, + [748] = 665, + [749] = 664, + [750] = 658, + [751] = 648, + [752] = 646, + [753] = 645, + [754] = 642, + [755] = 650, + [756] = 651, + [757] = 652, + [758] = 664, + [759] = 643, + [760] = 654, + [761] = 658, + [762] = 652, + [763] = 651, + [764] = 650, + [765] = 654, + [766] = 648, + [767] = 676, + [768] = 649, + [769] = 653, + [770] = 655, + [771] = 656, + [772] = 646, + [773] = 646, + [774] = 650, + [775] = 651, + [776] = 652, + [777] = 656, + [778] = 655, + [779] = 654, + [780] = 671, + [781] = 672, + [782] = 669, + [783] = 653, + [784] = 649, + [785] = 671, + [786] = 676, + [787] = 672, + [788] = 648, + [789] = 647, + [790] = 666, + [791] = 669, + [792] = 647, + [793] = 666, + [794] = 643, + [795] = 665, + [796] = 665, + [797] = 664, + [798] = 658, + [799] = 648, + [800] = 664, + [801] = 646, + [802] = 645, + [803] = 671, + [804] = 658, + [805] = 805, + [806] = 658, + [807] = 648, + [808] = 664, + [809] = 646, + [810] = 645, + [811] = 642, + [812] = 645, + [813] = 642, + [814] = 665, + [815] = 666, + [816] = 647, + [817] = 669, + [818] = 672, + [819] = 671, + [820] = 805, + [821] = 654, + [822] = 746, + [823] = 643, + [824] = 643, + [825] = 652, + [826] = 651, + [827] = 650, + [828] = 649, + [829] = 666, + [830] = 643, + [831] = 655, + [832] = 656, + [833] = 656, + [834] = 655, + [835] = 835, + [836] = 676, + [837] = 649, + [838] = 676, + [839] = 649, + [840] = 653, + [841] = 653, + [842] = 835, + [843] = 655, + [844] = 653, + [845] = 649, + [846] = 655, + [847] = 656, + [848] = 676, + [849] = 650, + [850] = 651, + [851] = 652, + [852] = 656, + [853] = 654, + [854] = 650, + [855] = 651, + [856] = 652, + [857] = 654, + [858] = 650, + [859] = 651, + [860] = 652, + [861] = 671, + [862] = 654, + [863] = 672, + [864] = 805, + [865] = 669, + [866] = 647, + [867] = 671, + [868] = 672, + [869] = 671, + [870] = 669, + [871] = 647, + [872] = 666, + [873] = 665, + [874] = 672, + [875] = 654, + [876] = 835, + [877] = 669, + [878] = 664, + [879] = 658, + [880] = 648, + [881] = 665, + [882] = 646, + [883] = 647, + [884] = 666, + [885] = 642, + [886] = 645, + [887] = 665, + [888] = 645, + [889] = 642, + [890] = 664, + [891] = 658, + [892] = 648, + [893] = 664, + [894] = 658, + [895] = 646, + [896] = 648, + [897] = 646, + [898] = 643, + [899] = 645, + [900] = 900, + [901] = 642, + [902] = 727, + [903] = 676, + [904] = 649, + [905] = 653, + [906] = 655, + [907] = 656, + [908] = 645, + [909] = 650, + [910] = 651, + [911] = 652, + [912] = 654, + [913] = 671, + [914] = 672, + [915] = 669, + [916] = 642, + [917] = 643, + [918] = 647, + [919] = 666, + [920] = 643, + [921] = 665, + [922] = 643, + [923] = 664, + [924] = 658, + [925] = 676, + [926] = 648, + [927] = 646, + [928] = 648, + [929] = 649, + [930] = 646, + [931] = 645, + [932] = 658, + [933] = 664, + [934] = 642, + [935] = 653, + [936] = 643, + [937] = 655, + [938] = 656, + [939] = 939, + [940] = 650, + [941] = 676, + [942] = 649, + [943] = 651, + [944] = 653, + [945] = 655, + [946] = 656, + [947] = 650, + [948] = 651, + [949] = 652, + [950] = 652, + [951] = 654, + [952] = 671, + [953] = 672, + [954] = 669, + [955] = 647, + [956] = 666, + [957] = 665, + [958] = 664, + [959] = 658, + [960] = 648, + [961] = 646, + [962] = 649, + [963] = 645, + [964] = 665, + [965] = 666, + [966] = 642, + [967] = 676, + [968] = 642, + [969] = 649, + [970] = 643, + [971] = 647, + [972] = 669, + [973] = 973, + [974] = 672, + [975] = 671, + [976] = 653, + [977] = 977, + [978] = 671, + [979] = 676, + [980] = 649, + [981] = 655, + [982] = 653, + [983] = 656, + [984] = 655, + [985] = 656, + [986] = 650, + [987] = 650, + [988] = 651, + [989] = 651, + [990] = 652, + [991] = 654, + [992] = 652, + [993] = 672, + [994] = 654, + [995] = 669, + [996] = 671, + [997] = 672, + [998] = 671, + [999] = 669, + [1000] = 647, + [1001] = 666, + [1002] = 665, + [1003] = 664, + [1004] = 658, + [1005] = 672, + [1006] = 669, + [1007] = 648, + [1008] = 653, + [1009] = 647, + [1010] = 666, + [1011] = 646, + [1012] = 645, + [1013] = 642, + [1014] = 649, + [1015] = 647, + [1016] = 665, + [1017] = 645, + [1018] = 664, + [1019] = 658, + [1020] = 648, + [1021] = 646, + [1022] = 666, + [1023] = 645, + [1024] = 642, + [1025] = 665, + [1026] = 646, + [1027] = 648, + [1028] = 643, + [1029] = 654, + [1030] = 652, + [1031] = 658, + [1032] = 651, + [1033] = 664, + [1034] = 671, + [1035] = 650, + [1036] = 665, + [1037] = 672, + [1038] = 664, + [1039] = 658, + [1040] = 666, + [1041] = 648, + [1042] = 646, + [1043] = 647, + [1044] = 669, + [1045] = 676, + [1046] = 649, + [1047] = 653, + [1048] = 672, + [1049] = 835, + [1050] = 655, + [1051] = 656, + [1052] = 671, + [1053] = 645, + [1054] = 650, + [1055] = 651, + [1056] = 669, + [1057] = 647, + [1058] = 656, + [1059] = 655, + [1060] = 652, + [1061] = 654, + [1062] = 642, + [1063] = 654, + [1064] = 805, + [1065] = 652, + [1066] = 651, + [1067] = 650, + [1068] = 671, + [1069] = 672, + [1070] = 669, + [1071] = 647, + [1072] = 666, + [1073] = 665, + [1074] = 656, + [1075] = 655, + [1076] = 664, + [1077] = 658, + [1078] = 648, + [1079] = 646, + [1080] = 643, + [1081] = 645, + [1082] = 666, + [1083] = 665, + [1084] = 653, + [1085] = 655, + [1086] = 649, + [1087] = 642, + [1088] = 653, + [1089] = 653, + [1090] = 643, + [1091] = 676, + [1092] = 649, + [1093] = 649, + [1094] = 656, + [1095] = 643, + [1096] = 643, + [1097] = 650, + [1098] = 676, + [1099] = 649, + [1100] = 653, + [1101] = 655, + [1102] = 656, + [1103] = 650, + [1104] = 651, + [1105] = 651, + [1106] = 652, + [1107] = 654, + [1108] = 652, + [1109] = 654, + [1110] = 671, + [1111] = 672, + [1112] = 669, + [1113] = 647, + [1114] = 642, + [1115] = 666, + [1116] = 665, + [1117] = 645, + [1118] = 664, + [1119] = 658, + [1120] = 648, + [1121] = 646, + [1122] = 645, + [1123] = 642, + [1124] = 671, + [1125] = 676, + [1126] = 672, + [1127] = 676, + [1128] = 649, + [1129] = 653, + [1130] = 669, + [1131] = 655, + [1132] = 656, + [1133] = 650, + [1134] = 647, + [1135] = 651, + [1136] = 652, + [1137] = 654, + [1138] = 671, + [1139] = 672, + [1140] = 669, + [1141] = 647, + [1142] = 666, + [1143] = 665