gribozavr2 added inline comments.

================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:593
 
+    /// Shrink \p Range to a subrange that only contains tokens of a list.
+    ArrayRef<syntax::Token> shrinkToFitList(ArrayRef<syntax::Token> Range) {
----------------



================
Comment at: clang/lib/Tooling/Syntax/BuildTree.cpp:594
+    /// Shrink \p Range to a subrange that only contains tokens of a list.
+    ArrayRef<syntax::Token> shrinkToFitList(ArrayRef<syntax::Token> Range) {
+      auto BeginChildren = Trees.lower_bound(Range.begin());
----------------
eduucaldas wrote:
> WDYT about the naming?
Very nice name!


================
Comment at: clang/unittests/Tooling/Syntax/BuildTreeTest.cpp:2932
   |-'void'
-  |-SimpleDeclarator Declarator
-  | |-'foo'
-  | `-ParametersAndQualifiers
-  |   |-'(' OpenParen
-  |   `-')' CloseParen
+  |-DeclaratorList Declarators
+  | `-SimpleDeclarator ListElement
----------------
eduucaldas wrote:
> This sounds weird and is probably the reason why SO many tests failed.
> 
> According to the [[ 
> https://eel.is/c++draft/dcl.fct.def.general#nt:function-definition | grammar 
> ]] a function definition/declaration might only have one declarator:
> ```
> function-definition:
> attribute-specifier-seq_opt decl-specifier-seq_opt declarator 
> virt-specifier-seq_opt function-body
> ...
> ```
> But our implementation calls `processDeclaratorAndDeclaration` for 
> `DeclaratorDecl`, which englobes `FunctionDecl`.
> 
> I also noticed that we seem to have quite extensive support for declarations 
> even rarer ones:
> `StaticAssertDeclaration`, `LinkageSpecificationDeclaration` ... Moreover, 
> their names and definitions seem to adequately follow the grammar. However we 
> don't have a `FunctionDefinition` as defined in the grammar. Was grouping 
> `FunctionDefintion` and `FunctionDeclaration` as `SimpleDeclaration`  a 
> conscious choice? (I looked quickly at commits that added 
> `processDeclaratorAndDeclaration` but couldn't find any clue)
It seemed reasonable for uniformity. However, I can definitely see an argument 
for defining a special kind of tree node for them, especially now that if we 
use SimpleDeclaration for functions we would always get a 1-element list 
wrapper.

On the other hand, the following is a valid declaration:

```
int x, f(int);
```

Wouldn't it be weird if function definitions and declarations were modeled 
differently? I understand they are different in the C++ grammar, but I think it 
would be at least a bit surprising for users.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88403/new/

https://reviews.llvm.org/D88403

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to