fix: initializer lists can be the RHS of an assignment expression

pull/708/head
Amaan Qureshi 2023-07-25 06:54:48 +07:00
parent 3c898ed3f0
commit dbc1e2baac
No known key found for this signature in database
GPG Key ID: E67890ADC4227273
2 changed files with 54 additions and 11 deletions

@ -1177,18 +1177,27 @@ module.exports = grammar(C, {
$.qualified_identifier,
),
assignment_expression: ($, original) => choice(
original,
prec.right(PREC.ASSIGNMENT, seq(
field('left', $._assignment_left_expression),
field('operator', choice(
'and_eq',
'or_eq',
'xor_eq',
)),
field('right', $._expression),
assignment_expression: $ => prec.right(PREC.ASSIGNMENT, seq(
field('left', $._assignment_left_expression),
field('operator', choice(
'=',
'*=',
'/=',
'%=',
'+=',
'-=',
'<<=',
'>>=',
'&=',
'^=',
'|=',
'and_eq',
'or_eq',
'xor_eq',
)),
),
field('right', choice($._expression, $.initializer_list)),
)),
operator_name: $ => prec(1, seq(
'operator',

@ -236,6 +236,40 @@ int main() {
(true)
(false))))))))
================================================================================
Initializer list as assignment expression RHS
================================================================================
void test() {
int b = int{1};
b = int{2};
}
--------------------------------------------------------------------------------
(translation_unit
(function_definition
(primitive_type)
(function_declarator
(identifier)
(parameter_list))
(compound_statement
(declaration
(primitive_type)
(init_declarator
(identifier)
(compound_literal_expression
(primitive_type)
(initializer_list
(number_literal)))))
(expression_statement
(assignment_expression
(identifier)
(compound_literal_expression
(primitive_type)
(initializer_list
(number_literal))))))))
================================================================================
Lambda expressions
================================================================================