[pseudo] Add bracket recovery for function parameters.

This commit is contained in:
Haojian Wu
2022-07-18 09:56:54 +02:00
parent 4983fdfec0
commit b94ea8b3eb
3 changed files with 15 additions and 2 deletions

View File

@@ -412,7 +412,7 @@ noptr-declarator := declarator-id
noptr-declarator := noptr-declarator parameters-and-qualifiers
noptr-declarator := noptr-declarator [ constant-expression_opt ]
noptr-declarator := ( ptr-declarator )
parameters-and-qualifiers := ( parameter-declaration-clause_opt ) cv-qualifier-seq_opt ref-qualifier_opt noexcept-specifier_opt
parameters-and-qualifiers := ( parameter-declaration-clause_opt [recover=Brackets] ) cv-qualifier-seq_opt ref-qualifier_opt noexcept-specifier_opt
trailing-return-type := -> type-id
ptr-operator := * cv-qualifier-seq_opt
ptr-operator := &

View File

@@ -4,7 +4,7 @@ void foo2(int, ...);
// CHECK-NEXT: ├─decl-specifier-seq~VOID :=
// CHECK-NEXT: ├─init-declarator-list~noptr-declarator := noptr-declarator parameters-and-qualifiers
// CHECK-NEXT: │ ├─noptr-declarator~IDENTIFIER :=
// CHECK-NEXT: │ └─parameters-and-qualifiers := ( parameter-declaration-clause )
// CHECK-NEXT: │ └─parameters-and-qualifiers := ( parameter-declaration-clause [recover=Brackets] )
// CHECK-NEXT: │ ├─( :=
// CHECK-NEXT: │ ├─parameter-declaration-clause := parameter-declaration-list , ...
// CHECK-NEXT: │ │ ├─parameter-declaration-list~INT :=

View File

@@ -0,0 +1,13 @@
// RUN: clang-pseudo -grammar=cxx -source=%s --print-forest | FileCheck %s
void foo(complete garbage???) {}
// CHECK: translation-unit~function-definition := decl-specifier-seq declarator function-body
// CHECK-NEXT: ├─decl-specifier-seq~VOID := tok[0]
// CHECK-NEXT: ├─declarator~noptr-declarator := noptr-declarator parameters-and-qualifiers
// CHECK-NEXT: │ ├─noptr-declarator~IDENTIFIER := tok[1]
// CHECK-NEXT: │ └─parameters-and-qualifiers := ( parameter-declaration-clause [recover=Brackets] )
// CHECK-NEXT: │ ├─( := tok[2]
// CHECK-NEXT: │ ├─parameter-declaration-clause := <opaque>
// CHECK-NEXT: │ └─) := tok[8]
// CHECK-NEXT: └─function-body~compound-statement := { }
// CHECK-NEXT: ├─{ := tok[9]
// CHECK-NEXT: └─} := tok[10]