sammccall added inline comments.

================
Comment at: clang-tools-extra/pseudo/include/clang-pseudo/cxx/CXX.h:54
+namespace rules {
+namespace dummy {
+enum Rule {
----------------
hokein wrote:
> why there is a dummy namespace here?
for each NT, we close the previous ns+enum and open new ones.
For this to work for the first NT, we have to open an ns+enum.

I can add a comment, but would prefer to do this some other way?


================
Comment at: clang-tools-extra/pseudo/lib/cxx/CXX.cpp:119
 
-    switch ((cxx::Rule)Declarator->rule()) {
-    case Rule::noptr_declarator_0declarator_id: // reached the bottom
+    switch (Declarator->rule()) {
+    case rule::noptr_declarator::declarator_id: // reached the bottom
----------------
hokein wrote:
> The code of applying the pattern doesn't look much worse to me and it is 
> easier to verify the exhaustiveness by human as well. We might loose some 
> performance (I hope not a lot), but I think it is a good tradeoff (not saying 
> we need do it in this patch).
> 
> ```
> switch (LHSNonterminal(Declarator->rule(), *G)) {
>    case cxx::Symbol::noptr_declarator: {
>       switch ((rule::noptr_declarator)Declarator->rule())  {
>          case rule::noptr_declarator::declarator_id:
>              ....
>          case 
> rule::noptr_declarator::noptr_declarator__parameters_and_qualifiers:
>              ....
>       }
>    ...
>    }
> }
> ```
I guess this is a question of taste, but I find that style very hard to read.

(Note that it's incorrectly indented, and the indentation rules around 
switch/case are one of the main reasons I find nested switches confusing)


================
Comment at: clang-tools-extra/pseudo/lib/grammar/Grammar.cpp:51
 #define TOK(X) #X,
-#define KEYWORD(X, Y) #X,
+#define KEYWORD(Keyword, Condition) llvm::StringRef(#Keyword).upper(),
 #include "clang/Basic/TokenKinds.def"
----------------
hokein wrote:
> IMO, this improves the readability, and also aligns with the text in the 
> cxx.grammar.
Thanks. I like this change too. We still have `semi` vs `;` (should we use 
`SEMI`?) but it feels clearer


================
Comment at: clang-tools-extra/pseudo/lib/grammar/Grammar.cpp:62
 
 std::string Grammar::mangleRule(RuleID RID) const {
   const auto &R = lookupRule(RID);
----------------
hokein wrote:
> nit: update the doc comment in .h file.
Honestly I would rather just move the impl back into gen - this change seems to 
demonstrate why


================
Comment at: clang-tools-extra/pseudo/lib/grammar/Grammar.cpp:65
+  std::string MangleName;
+  for (size_t I = 0; I < R.seq().size(); ++I) {
+    MangleName += mangleSymbol(R.seq()[I]);
----------------
hokein wrote:
> ok, now we're dropping the index for all RHS symbols. Just want to know your 
> thought about this. Personally, I'd like to keep this information 
> (`noptr_declarator__l_square__constant_expression__r_square` vs 
> `noptr_declarator0_l_square1_constant_expression2_r_square3`) though it makes 
> the name a bit uglier.
> 
> > Change mangling of keywords to ALL_CAPS (needed to turn keywords that 
> > appear alone on RHS into valid identifiers)
> 
> if we add index number to the name, then this change is not required.
Short version: I can deal with the numbers at the front (there's a *little* bit 
of value), but at the back of the symbol name there's no value, just noise. I 
find the double-underscore version much more readable (than either variant with 
numbers).

---

I always found the indexes aesthetically ugly but OK when you could read them as
```
lhs _   0 rhsa_ 1 rhsb
lhs := [0]rhsa [1]rhsb
```

But an identifier can't start with a number (`rule::empty_statement::0semi`) 
this isn't possible. I think you suggested shifting the numbers to the end, but 
I can't find a way to read that, it adds too much visual noise. (e.g. because 
the number "decorations" don't line up in a column in code completion or a 
switch statement).

I also think the double-underscore version is significantly less cryptic for 
new readers.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D130414

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

Reply via email to