[PATCH] D102579: [Demangle][Rust] Parse tuples

Tomasz Miąsko via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed May 19 11:58:12 PDT 2021


tmiasko added inline comments.


================
Comment at: llvm/lib/Demangle/RustDemangle.cpp:450-451
+    }
+    if (I == 1)
+      print(",");
+    print(")");
----------------
dblaikie wrote:
> tmiasko wrote:
> > dblaikie wrote:
> > > tmiasko wrote:
> > > > dblaikie wrote:
> > > > > Looks a bit awkward to print a comma after a single argument (`(_,)`) - is that necessary? (does it disambiguate this with some other case that has only a list of 1 between parentheses?)
> > > > The intention is to match Rust language syntax which requires a comma after one element tuples to disambiguate them from parenthesized types.
> > > Cool - thanks for the context!
> > > 
> > > And stylistically, that trailing comma is usually written without a space after it, unlike separating commas?
> > > 
> > > Pity, this could come out more naturally from the algorithm if that was the case (always printing ", " after every type - rather than having to special case)
> > > 
> > > I guess you could do it this way:
> > > ```
> > > for (...) {
> > >   if (I > 0)
> > >     print(" ");
> > >   demangleType();
> > >   print(",");
> > > }
> > > ```
> > > Marginally less special casing
> > Looking at rustfmt, rustc type printer and other demanglers, they are consistent writing trailing comma without a space. They also include the trailing comma only when necessary, i.e., for one element tuple only (so I retained the special case).
> Cool, I still wonder if it might be marginally more neatly written the way I suggested - it still produces the same output, but with one fewer "if", I think?
It would be `()`, `(T1,)`, and then `(T1, T2,)` instead of `(T1, T2)`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D102579



More information about the llvm-commits mailing list