Browse Source

feat: support explicit object parameters

pull/332/head
rktdm 10 months ago
committed by jdrouhard
parent
commit
d749ef5967
2 changed files with 28 additions and 1 deletions
  1. +11
    -1
      grammar.js
  2. +17
    -0
      test/corpus/declarations.txt

+ 11
- 1
grammar.js View File

@ -146,7 +146,11 @@ module.exports = grammar(C, {
// Types
placeholder_type_specifier: $ => prec(1, seq(
field('constraint', optional($.type_specifier)),
field('constraint', optional(choice(
alias($.qualified_type_identifier, $.qualified_identifier),
$.template_type,
$._type_identifier,
))),
choice($.auto, alias($.decltype_auto, $.decltype)),
)),
@ -448,6 +452,7 @@ module.exports = grammar(C, {
'(',
commaSep(choice(
$.parameter_declaration,
$.explicit_object_parameter_declaration,
$.optional_parameter_declaration,
$.variadic_parameter_declaration,
'...',
@ -455,6 +460,11 @@ module.exports = grammar(C, {
')',
),
explicit_object_parameter_declaration: $ => seq(
$.this,
$.parameter_declaration,
),
optional_parameter_declaration: $ => seq(
$._declaration_specifiers,
field('declarator', optional(choice($._declarator, $.abstract_reference_declarator))),

+ 17
- 0
test/corpus/declarations.txt View File

@ -253,6 +253,7 @@ struct S {
S() : f(0) {}
private:
int getF0(this S &self) { return self.f; }
int getF1() const { return f; }
int getF2() const try { throw 1; } catch (...) { return f; }
};
@ -277,6 +278,22 @@ struct S {
(number_literal))))
(compound_statement))
(access_specifier)
(function_definition
(primitive_type)
(function_declarator
(field_identifier)
(parameter_list
(explicit_object_parameter_declaration
(this)
(parameter_declaration
(type_identifier)
(reference_declarator
(identifier))))))
(compound_statement
(return_statement
(field_expression
(identifier)
(field_identifier)))))
(function_definition
(primitive_type)
(function_declarator

Loading…
Cancel
Save