[PATCH] D90543: [Syntax] Start to move trivial Node class definitions to TableGen. NFC
Dmitri Gribenko via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 4 02:45:22 PST 2020
gribozavr2 accepted this revision.
gribozavr2 added a comment.
This revision is now accepted and ready to land.
> e.g. we may introduce abstract bases like "loop" that the grammar doesn't care about in order to model is-a concepts that might make refactorings more expressive. This is less natural in a grammar-like idiom.
Loop can be an alternative rule in the grammar, I'm not sure what is less natural about it:
Statement ::=
IfStatement | LoopStatement | BreakStatement | ...
LoopStatement ::=
ForLoopStatement | WhileLoopStatement | ...
================
Comment at: clang/include/clang/Tooling/Syntax/Syntax.td:36
+ // Documentation for this Node subclass.
+ string documentation;
}
----------------
I think it would be best to make documentation mandatory, and for nodes that are currently lacking it, add a FIXME so that we clearly see where the tech debt is.
================
Comment at: clang/include/clang/Tooling/Syntax/Syntax.td:48
+
+// An abstract node type which merely serves as a base for more specific types.
+class Alternatives<NodeType base_ = Tree> : NodeType { let base = base_; }
----------------
+
```
It corresponds to an alternative rule in the grammar, for example:
Statement ::=
IfStatement | ForStatement | ...
`Statement` should be modeled with `Alternatives<>`. `IfStatement` and `ForStatement` are derived from `Statement`.
`````
================
Comment at: clang/utils/TableGen/ClangSyntaxEmitter.cpp:147-148
+
+// Format a documentation string as a C++ comment.
+// This has special whitespace handling as comments may appear in *.td as:
+// documentation = [{
----------------
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90543/new/
https://reviews.llvm.org/D90543
More information about the cfe-commits
mailing list